目的・役割

13のジャンル(歴史・科学・地理 等)から興味のあるものを 100コイン で解放し、ジャンル別クイズで集中学習する画面。

UI 構成

要素種類説明
コインバッジHStack現在のコイン残高
ジャンルカードLazyVGrid13ジャンル × (icon, name, cost or プレイボタン)
進捗ボタンNavigationLinkGenreProgressView
履歴ボタンNavigationLinkGenreQuizHistoryView

状態

状態表示内容
未アンロック「100コインで解放」ボタン
残高不足「コインが足りません」アラート
アンロック済「プレイ」ボタン → モード選択

遷移

操作遷移先
「100コインで解放」確認アラート → コイン消費 → アンロック
「プレイ」モード選択(ランダム/順番/続きから) → GenreQuizPlayView
進捗GenreProgressView
履歴GenreQuizHistoryView

使用するデータモデル

GenreDefinition {
    let id: String
    let name: String
    let icon: String  // SF Symbol
    let cost: Int     // 100
}

GenreQuizService {
    func unlockGenre(id: String) -> Bool
    func isUnlocked(id: String) -> Bool
}

実装メモ

関連

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成