Falling Puzzle / Unity Project
PuyoPuzzle
2個組のブロックを操作し、同じ色を上下左右に4個以上つなげて消す落ちものパズルです。 盤面の状態管理、連結している要素の探索、処理順序の切り替えを学ぶために制作しました。
Overview
プロジェクト概要
Unity 6とC#を使用した学習プロジェクトです。 4色からランダムに構成される2個組のブロックを10×20の盤面で操作し、固定、自然落下、同色判定、削除を順番に処理します。
- Status
- Learning Project
- Engine
- Unity 6(6000.2.13f1)
- Language
- C#
- Input
- キーボード(矢印キー)
Implementation
実装した主な機能
ブロック操作
矢印キーによる左右移動、下移動、90度回転と、タイマーによる自動落下を実装しています。
10×20の盤面管理
固定された各マスのTransformを2次元配列へ保存し、空きマスや他のブロックとの重なりを判定しています。
固定後の自然落下
ブロックが固定された後、下に空きがある各マスを一段ずつ移動し、盤面データと表示位置を同時に更新します。
同色の連結探索
基準マスの上下左右を調べ、未確認の同色マスをリストへ加えながら連結している範囲全体を探索します。
4個以上の削除
同じ色が4個以上つながっている場合に対象を削除し、1個ごとにスコアを加算して表示を更新します。
落下と削除の繰り返し
削除後は自然落下へ戻り、盤面が安定したら再び削除判定を行うことで、続けて消える状況を処理します。
次ブロック表示
次に出現するブロックを先に生成して待機させ、現在の処理が終わった後に操作対象へ切り替えます。
ゲーム終了とリトライ
ブロックが上段まで積み上がると結果画面を表示し、ボタンからシーンを再読み込みしてやり直せます。
State Management
ゲーム状態の切り替え
操作、自然落下、削除判定を一度に実行せず、現在の状態に応じて処理を切り替えています。 盤面の更新順序を明確にし、削除後に生まれた空きマスも順番に処理できるようにしています。
- Move
- プレイヤーによる操作と自動落下を行い、着地後に各マスを盤面へ登録
- Fall
- 固定済みの各マスを、下に空きがなくなるまで一段ずつ落下
- Delete
- 同色の連結範囲を探索し、削除の有無に応じてFallまたはMoveへ移行
Code Structure
処理の分け方
- BlockController
- 色の設定、キー入力、自動落下、移動、回転、着地の通知
- PuyoPuzzleSceneDirector
- 盤面、状態遷移、自然落下、連結探索、削除、スコア、ゲーム終了
- Transform[,]
- 固定済みの各マスを盤面上の位置と対応させて保持
Learning
学んだこと・改善したいこと
2次元配列による盤面管理、リストを使った連結範囲の探索、状態を分けて処理順序を制御する方法を学びました。 今後は連鎖数に応じた得点、探索済みマスの管理方法、操作感や落下演出の調整などを進めたいと考えています。