要件¶
ユーザーストーリー¶
- プレイヤーとして、新しいゲームを開始できる
- プレイヤーとして、落ちてくるぷよを左右に移動できる
- プレイヤーとして、落ちてくるぷよを回転できる
- プレイヤーとして、ぷよを素早く落下させることができる
- プレイヤーとして、同じ色のぷよを4つ以上つなげると消去できる
- プレイヤーとして、連鎖反応を起こしてより高いスコアを獲得できる
- プレイヤーとして、全消し(ぜんけし)ボーナスを獲得できる
- プレイヤーとして、ゲームオーバーになるとゲーム終了の演出を見ることができる
- プレイヤーとして、現在のスコアを確認できる
- プレイヤーとして、キーボードでぷよを操作できる
- プレイヤーとして、タッチ操作でぷよを操作できる
ユースケース図¶
イテレーション1: ゲーム開始の実装 ✅ 完了¶
TODO¶
- ゲームの初期化処理を実装する(ゲームの状態や必要なコンポーネントを設定する)
- ゲーム画面を表示する(プレイヤーが視覚的にゲームを認識できるようにする)
- 新しいぷよを生成する(ゲーム開始時に最初のぷよを作成する)
- ゲームループを開始する(ゲームの継続的な更新と描画を行う)
- ぷよを画面に表示する(生成したぷよを画面上に描画する)
受け入れ基準¶
- ぷよが画面に表示されること
- ゲームループが正常に動作すること
- 新しいぷよが生成されること
ふりかえり¶
完了した機能: - ゲーム基盤システム (Game, GameController, GameRenderer) - ぷよとぷよペアのモデル (Puyo, PuyoPair, PuyoColor) - ゲームフィールドの実装 (GameField) - HTMLCanvas を使った描画システム - 60FPSゲームループ - ランダムなぷよ生成機能
技術的成果: - 全20テストが通過 - TypeScript + Vite による型安全な実装 - ドメイン駆動設計による適切な層分離 - テスト駆動開発によるコード品質の確保
次のイテレーションへの準備: - ぷよの移動・回転システムの基盤となるPuyoPairクラスのrotate()メソッド実装済み - GameFieldの座標系とレンダリングシステム確立済み
イテレーション2: ぷよの移動の実装 ✅ 完了¶
TODO¶
- ぷよを自由落下させる(ぷよが自動的に下に落ちるようにする)
- プレイヤーの入力を検出する(キーボードの左右キーが押されたことを検知する)
- ぷよを左右に移動する処理を実装する(実際にぷよの位置を変更する)
- 移動可能かどうかのチェックを実装する(画面の端や他のぷよにぶつかる場合は移動できないようにする)
- 移動後の表示を更新する(画面上でぷよの位置が変わったことを表示する)
- ぷよの着地を検出する(ぷよが下に落ちて他のぷよや床にぶつかったことを検知する)
- ぷよが着地したら次のぷよを生成する(新しいぷよを画面に表示する)
受け入れ基準¶
- ぷよが自動的に落下すること
- 左右矢印キーでぷよを移動できること
- 下矢印キーでぷよを高速落下できること
- フィールドの境界で移動が制限されること
- ぷよが着地して新しいぷよが生成されること
ふりかえり¶
完了した機能: - 自由落下システム(30フレーム間隔) - キーボード入力システム (InputHandler) - 左右移動・高速落下機能 - 完全な当たり判定システム - フィールド境界・衝突検出
技術的成果:
- 全31テスト通過(テスト駆動開発の実践)
- 入力システムの抽象化とゲームループ統合
- 移動可能性の包括的チェック機能
- リアルタイム移動レスポンス
次のイテレーションへの準備: - PuyoPairクラスのrotate()メソッド実装済み - 移動・衝突検出システム確立済み
イテレーション3: ぷよの回転の実装 ✅ 完了¶
TODO¶
- ぷよの回転処理を実装する(時計回り・反時計回りの回転)
- 回転可能かどうかのチェックを実装する(他のぷよや壁にぶつかる場合は回転できないようにする)
- 壁キック処理を実装する(壁際での回転を可能にする特殊処理)
- 回転後の表示を更新する(画面上でぷよの位置が変わったことを表示する)
受け入れ基準¶
- 上矢印キーでぷよを時計回りに回転できる
- フィールドの境界や他のぷよとの衝突時は回転が無効になる
- 壁際での回転時に壁キック処理が動作する
- 回転後の表示が正しく更新される
ふりかえり¶
完了した機能: - PuyoPairクラスの時計回り回転メソッド - Gameクラスのぷよ回転機能 (rotatePuyo) - 回転時の衝突検出と壁キック処理 - 上矢印キーによる回転入力処理 - 操作方法の表示追加
技術的成果: - 全44テストが通過 - 不変オブジェクトパターンを維持した回転実装 - 既存の衝突検出システムの再利用 - TDDアプローチによる包括的なテストカバレッジ
実装した回転仕様: - 時計回り90度回転 - フィールド境界での回転制限 - 左右1マスの壁キック処理 - 他のぷよとの衝突時は回転不可
次のイテレーションへの準備: - 基本的なぷよ操作(移動・回転・落下)が完成 - 高速落下機能は既に実装済み(イテレーション4完了)
イテレーション4: ぷよの高速落下の実装 ✅ 完了¶
TODO¶
- 下キー入力の検出を実装する(キーボードの下キーが押されたことを検知する)
- 高速落下処理を実装する(下キーが押されているときは落下速度を上げる)
- 落下可能かどうかのチェックを実装する(下に障害物がある場合は落下できないようにする)
- 着地判定を実装する(ぷよが着地したことを検知する)
受け入れ基準¶
- 下矢印キーを押している間、ぷよが高速で落下する
- 下に障害物がある場合は落下が停止する
- 高速落下中も正常な着地判定が動作する
- 既存の自動落下システムと共存している
ふりかえり¶
完了した機能: - InputHandlerによる下矢印キーの継続押下検出 - GameControllerでの高速落下入力処理 - Gameクラスでの移動・着地判定システムの活用 - 既存の衝突検出システムとの統合
技術的成果: - 既存のmovePuyo()メソッドを再利用した効率的な実装 - isKeyPressed()による継続的な入力検出 - 通常の自動落下と高速落下の両立 - 全44テストが引き続き通過
実装アプローチ: - 新規システム開発ではなく既存システムの組み合わせで実現 - テスト駆動開発の継続 - DRY原則に従った実装
次のイテレーションへの準備: - 基本的なぷよ操作(移動・回転・落下・高速落下)が完成 - ぷよ消去システム実装の基盤が整備済み
イテレーション5: ぷよの消去の実装 ✅ 完了¶
TODO¶
- ぷよの接続判定を実装する(隣接する同じ色のぷよを検出する)
- 4つ以上つながったぷよの検出を実装する(消去対象となるぷよのグループを特定する)
- ぷよの消去処理を実装する(消去対象のぷよを実際に消す)
- 消去後の落下処理を実装する(消去された後の空きスペースにぷよが落ちてくる)
- 消去されない場合の落下処理を実装する(ぷよが重なっている場合に下に落下する)
受け入れ基準¶
- 同じ色のぷよが4つ以上隣接して配置された場合、それらが消去されること
- 消去されたぷよの上にあるぷよが重力により下に落下すること
- 消去処理が連続で実行されること(連鎖の基盤)
- 消去されたぷよの数に応じてスコアが加算されること
- 既存のぷよ操作(移動・回転・落下)と消去システムが正しく連携すること
- ぷよが重なっている場合に下に空間があればぷよが落下すること
ふりかえり¶
完了した機能: - GameFieldクラスの接続判定システム (findConnectedPuyos, findConnectedGroups) - 4つ以上の接続グループ検出機能 (findErasableGroups) - ぷよ消去機能 (clearConnectedPuyos) - 重力適用システム (applyGravity) - ゲームループへの消去・重力処理統合 (processClearAndGravity) - スコアシステムの実装
技術的成果: - 全55テストが通過 - 深度優先探索(DFS)による効率的な接続判定 - 繰り返し消去処理による連鎖の基盤実装 - ぷよ着地時の自動消去・落下システム - テスト駆動開発による品質保証
実装したアルゴリズム: - 4方向探索による同色ぷよ接続判定 - 消去可能グループの自動検出 - 重力による列単位でのぷよ落下処理 - 消去・落下の繰り返し処理
次のイテレーションへの準備: - 連鎖反応の基盤システム完成 - スコア計算システム実装済み - 消去・重力処理の繰り返し機能で連鎖対応可能
イテレーション6: 連鎖反応の実装 ✅ 完了¶
TODO¶
- 連鎖判定を実装する(ぷよが消えた後に新たな消去パターンがあるかを判定する)
- 連鎖カウントを実装する(何連鎖目かをカウントする)
- 連鎖ボーナスの計算を実装する(連鎖数に応じたボーナス点を計算する)
- スコア表示を実装する(プレイヤーに現在のスコアを表示する)
- ゲームループに消去・連鎖機能を統合する
受け入れ基準¶
- 連鎖が発生して連鎖数がカウントされること
- 連鎖ボーナスが正しく計算されること(1連鎖: 1倍, 2連鎖: 2倍, 3連鎖: 4倍...)
- スコアにボーナスが適用されること
- ぷよ配置時に自動的に連鎖処理が実行されること
- 既存のぷよ操作システムと連鎖システムが正しく連携すること
ふりかえり¶
完了した機能: - Game.processClearAndGravity()による連鎖判定システム - chainCountプロパティによる連鎖カウント機能 - calculateChainBonus()による指数的ボーナス計算 (2^(n-1)) - 消去・落下の繰り返し処理による自動連鎖発生 - ぷよ配置時の自動連鎖統合システム
技術的成果: - 全64テストが通過(1テスト追加) - 2連鎖システムの完全動作確認 - 連鎖ボーナス: 1連鎖40点, 2連鎖80点の正確な計算 - 既存の消去・重力システムとの完全統合 - テスト駆動開発による品質保証
実装したアルゴリズム: - do-while ループによる連続消去処理 - 指数関数 Math.pow(2, chain-1) によるボーナス計算 - 消去→重力→再判定の繰り返しサイクル - ゲームループとの自動統合
次のイテレーションへの準備: - 連鎖システムの基盤完成 - スコア計算システム強化 - 全消しボーナス実装の土台確立
イテレーション7: 全消しボーナスの実装 ✅ 完了¶
TODO¶
- 全消し判定を実装する(盤面上のぷよがすべて消えたかどうかを判定する)
- 全消しボーナスの計算を実装する(全消し時に加算するボーナス点を計算する)
- 全消し演出を実装する(全消し時に特別な演出を表示する)
受け入れ基準¶
- 全消し発生時に2000点のボーナスが加算されること
- 全消しが発生しない場合はボーナスが加算されないこと
- 連鎖と全消しが同時発生した場合に正しく計算されること
- 既存の連鎖システムと全消しボーナスが正しく連携すること
ふりかえり¶
完了した機能: - Game.processClearAndGravity()による全消し判定システム - GameField.isEmpty()を活用した全消し検出 - 2000点の固定全消しボーナス加算機能 - 連鎖と全消しの組み合わせ処理
技術的成果: - 全67テストが通過 - 全消しボーナステスト3件の完全動作確認 - 連鎖反応テストの全消し問題修正 - 既存の連鎖システムとの完全統合
実装した機能: - 連鎖完了後の全消し判定ロジック - 条件付き2000点ボーナス加算(連鎖発生 && フィールド空) - 全消し・非全消しパターンの包括的テスト
次のイテレーションへの準備: - 全消しボーナスシステム完成 - スコア計算システムの最終形 - ゲームオーバー実装の土台確立
イテレーション8: ゲームオーバーの実装 ✅ 完了¶
TODO¶
- ゲームオーバー判定を実装する(新しいぷよを配置できない状態を検出する)
- ゲームオーバー演出を実装する(ゲームオーバー時に特別な表示や効果を追加する)
- リスタート機能を実装する(ゲームオーバー後に新しいゲームを始められるようにする)
- リセットボタン機能を実装する(いつでもゲームを初期状態にリセット)
受け入れ基準¶
- 新しいぷよが初期位置(2, 0)に配置できない場合にゲームオーバーになること
- ゲームオーバー時に視覚的なオーバーレイが表示されること
- ゲームオーバー時に最終スコアが表示されること
- ゲームオーバー後にRキーでリスタートできること
- ゲームオーバー時は移動・回転操作が無効になること
- リセットボタンでいつでもゲームをリセットできること
ふりかえり¶
完了した機能: - Game.checkGameOver()によるゲームオーバー判定システム - GameRenderer.renderGameOver()による視覚的オーバーレイ表示 - GameController.reset()による包括的リセット機能 - Rキーリスタート・リセットボタンの2つのリセット手段 - ゲーム状態に応じた操作制限システム
技術的成果: - 全76テストが通過(+9テスト追加) - GameState enumを使用した型安全な状態管理 - InputHandlerのevent.codeベース統一により一貫性向上 - 不変性を保持したrestart()実装(新GameFieldインスタンス作成) - 包括的なテストカバレッジ(ゲームオーバー判定・操作制限・リスタート)
実装したUI/UX: - 半透明黒オーバーレイによる没入感のあるゲームオーバー表示 - 赤い「GAME OVER」タイトルと最終スコア表示 - リスタート案内メッセージ(Press R to Restart) - ゲーム開始・リセットボタンによる直感的な操作
解決した技術的課題: - GameState enum値と文字列リテラルの比較エラー修正 - event.keyとevent.codeの不整合解決 - テストでのフィールド参照問題(restart後の新インスタンス) - キーボード入力システムの一貫性確保
実装アプローチ: - ゲーム状態管理の中央集権化 - レンダリング・入力・ゲームロジックの適切な分離 - テスト駆動開発による品質保証 - ユーザビリティを重視したリセット手段の複数提供
次のイテレーションへの準備: - 基本的なぷよぷよゲームのコア機能完成 - プレイ可能な状態の実現 - 追加機能実装の基盤確立(アニメーション、効果音等)