ゲームフロー

  1. startGame(): ストリーク記録 → sequence/playerIndex/score リセット → nextRound()
  2. nextRound(): ランダム色(0-3)追加 → 速度計算 → showSequence()
  3. showSequence(): 各色を順に点灯(litMs+音) → 消灯(gapMs) → playerTurn
  4. handlePanelTap(): 正解判定 → playerIndex+1
  5. シーケンス満了 → score+1 → checkMilestone() → nextRound()
  6. 不正解 → triggerGameOver()

速度計算(computeSpeed)

実効ラウンド = sequence.count + difficulty.roundOffset

実効ラウンドlitMsgapMsラベル
1-4650195NORMAL
5-9500150NORMAL+
10-14400120FAST
15-1932096FAST+
20+25075INSANE

gapMs = litMs × 0.3(切り捨て)

難易度オフセット

難易度roundOffset開始時の体感
NORMAL0NORMAL速度から
FAST9NORMAL+から開始
INSANE19FAST+ / INSANE速度から開始

マイルストーン演出

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

MilestoneFlashView で2秒間表示。

Task キャンセル管理

showingTask / milestoneTask を Task<Void, Never> で保持。新ゲーム開始時に cancel()。deinit では MainActor.assumeIsolated で安全アクセス。

変更履歴

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