目的・役割
解放済みジャンルの問題を3つのプレイモード(ランダム / 順番通り / 続きから)で解いていく画面。
プレイモード
| モード | 動作 |
| ランダム | 毎回 randomQuestion() で異なる問題 |
| 順番通り | position をリセットして1問目から |
| 続きから | 保存された position から再開 |
UI 構成
| 要素 | 種類 | 説明 |
| 進捗バー | ProgressView | 「N問目 / 全M問」 |
| 問題文 | Text | question |
| 選択肢ボタン | Button×4 | choices |
| 解説表示 | Overlay | 正解/不正解後の explanation |
| 「次の問題へ」 | Button | 続く問題があれば |
状態
| 状態 | 表示内容 |
| 未回答 | 問題文 + 選択肢 |
| 回答後 | 正解強調 + 解説 |
| 全問終了 | 結果サマリ画面 |
遷移
| 操作 | 遷移先 |
| 選択肢タップ | 同画面(結果表示) |
| 「次へ」 | 同画面(次問題) |
| 終了 | GenreQuizShopView へ戻る |
使用するデータモデル
GenreQuizQuestion {
let id: String
let question: String
let choices: [String]
let correct: Int
let explanation: String?
}
GenreProgressService {
func recordAnswer(genreId: String, questionId: String, correct: Bool)
func getPosition(genreId: String) -> Int
}
実装メモ
- プレイ開始時にInterstitial広告(無料ユーザー)
- 回答ごとに GenreProgressService.recordAnswer() で進捗保存
- 「続きから」モードは position を維持
関連
変更履歴
| バージョン | 日付 | 変更内容 |
| 1.0 | 2026-05-09 | 初版作成 |