本アプリは SwiftData/Realm を使わず、UserDefaults のみでローカルデータを管理。スコア・設定・ストリーク・課金状態を全て UserDefaults に保存。

UserDefaults キー(StorageKey)

キー用途
chromatic_best_score_normalIntNORMAL ベストスコア
chromatic_best_score_fastIntFAST ベストスコア
chromatic_best_score_insaneIntINSANE ベストスコア
chromatic_sound_enabledBool効果音有効(デフォルト true)
chromatic_color_blind_modeBool色覚サポートモード
chromatic_has_seen_onboardingBoolオンボーディング済
chromatic_ads_removedBool広告削除済(オフラインキャッシュ)
chromatic_streak_countInt連続プレイ日数
chromatic_last_played_dateString最終プレイ日(YYYY-MM-DD)

状態管理(@Observable @MainActor)

クラス責務
GameViewModelラウンド進行・入力判定・速度計算・マイルストーン
PurchaseManagerStoreKit 課金(広告除去 IAP)
SoundManagerWAVサウンド再生
StreakManager連続プレイ日数
GameCenterManagerGame Center 認証・スコア送信・LB表示
InterstitialAdManager全画面広告(2ゲームに1回)

主要 Enum

Difficulty

enum Difficulty: String {
    case normal  = "NORMAL"   // roundOffset: 0
    case fast    = "FAST"     // roundOffset: 9
    case insane  = "INSANE"   // roundOffset: 19
}

GameState

enum GameState {
    case idle          // START画面
    case showing       // CPUがシーケンス表示中
    case playerTurn    // プレイヤー入力待ち
    case gameOver      // ゲーム終了
}

色インデックス

Index周波数(音)
0329.63 Hz (E4)
1415.30 Hz (G#4)
2523.25 Hz (C5)
3659.25 Hz (E5)

速度テーブル

実効ラウンドlitMs(点灯時間)gapMs(間隔)ラベル
1-4650195NORMAL
5-9500150NORMAL+
10-14400120FAST
15-1932096FAST+
20+25075INSANE

マイルストーン演出

ラウンドメッセージ背景色
5GREAT!green
10AMAZING!blue
15INCREDIBLE!purple
20LEGENDARY!gold

変更履歴

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