Puzzle Game / Unity Project
TetrisPuzzle
10×20の盤面でブロックを操作し、横一列をそろえて消していく落ちものパズルです。 盤面データと画面上のブロックを対応させる方法や、処理を役割ごとに分ける設計を学ぶために制作しました。
Overview
プロジェクト概要
Unity 6とC#を使用した学習プロジェクトです。 7種類のブロックを操作して積み上げ、そろったラインの削除、上段ブロックの落下、スコア更新、ゲームオーバーまでの基本的な流れを実装しています。
- Status
- Learning Project
- Engine
- Unity 6(6000.2.13f1)
- Language
- C#
- Input
- キーボード(矢印キー)
Implementation
実装した主な機能
10×20の盤面管理
固定された各マスを2次元配列で保持し、空きマスと配置済みブロックを判定できるようにしています。
ブロック操作
矢印キーによる左右移動、下移動、90度回転と、時間経過による自動落下を実装しています。
移動可能判定
ブロックを構成する4マスを確認し、壁・床・固定済みブロックとの重なりを防いでいます。
ライン削除
横一列が埋まったかを走査し、そろった行を削除した後、その上にあるブロックを一段下へ移動します。
次ブロック表示
次に出現するブロックを先に生成して表示し、出現時に操作対象へ切り替える流れを作っています。
スコアとゲーム終了
ライン削除時のスコア加算、積み上がった際のゲームオーバー表示、シーンを再読み込みするリトライを実装しています。
Code Structure
処理の分け方
操作中のブロックと盤面全体の管理を別のクラスへ分けています。 ブロックが落下している間と、着地して盤面へ登録した後で担当を切り替える構成です。
- BlockController
- キー入力、自動落下、移動、回転、着地の通知
- TetrisPuzzleSceneDirector
- 盤面登録、当たり判定、ライン削除、スコア、次ブロック、ゲーム終了
- Transform[,]
- 固定済みの各マスを10×20の盤面データとして保持
Learning
学んだこと・改善したいこと
2次元配列を使った盤面管理、座標と配列番号の変換、当たり判定後に位置を戻す処理、クラス間の役割分担を学びました。 今後は連続したライン削除の確認、操作感の調整、定数と処理の整理などを進めたいと考えています。