Unity 2D でテトリスを制作した際に、ブロック・セル・ボード・座標の仕様について考えました。これから、その内容について記載していきます。
関連記事
目次
- ブロックとセル
- ブロックの実装方法
- ブロックの回転について
- ボードと座標
- ボードのレンダリング
1. ブロックとセル
テトリスのブロックは、4つのセル(四角形)から構成されています。
2. ブロックの実装方法
ブロックを表現するために、以下の情報を使いました。
- 軸の位置
- 軸以外の位置(回転パターンに応じた相対位置)
これから、各ブロックについて詳細を記載していきます。
2.1. O字ブロック
O字ブロックは無回転になります。
セルの座標を (x, y)
で表すと、セルの位置は以下の通りになります。
- 軸:
(0, 0)
(落下や左右移動で変化) - 軸以外:
(0, +1)
、(+1, +1)
、(+1, 0)
軸以外のセルは、軸からの距離(相対的な位置)で表現していて、軸が動いても変化しません。つまり、軸以外の位置は固定で持つことができます。
2.2. I, S, Z字ブロック
2回転するブロックは以下の通りです。
回転パターンに応じた相対位置が分かれば、ブロック全体を表現できます。
2.3. J, L, T字ブロック
4回転するブロックは以下の通りです。
3. ブロックの回転について
上の方法でブロックを実装すると、回転は厳密に回すわけではなくて、セルの位置を取得してブロックを再構成する形になります。
回転途中にぶつかるブロック(セル)が存在しても、次の相対位置がそれにぶつからなければOK、という実装方法になります。
4. ボードと座標
テトリスのプレイ画面を、下のように考えて実装しました。
図中の数字は、位置 (x, y)
を示します。右に行くと x
が増えて、上に行くと y
が増えます。
座標は以下の3つに分けていて、それぞれの左下を (0, 0)
にしています。
- 中央:
Main
- 左:
Hold
- 右:
Next
5. ボードのレンダリング
ゲーム内部で、座標の位置ごとに ID を覚えておきます。
例えば、以下の通りです。
- 空:0
- 壁:1
- I字ブロック:2
- O字ブロック:3
あとは、ID に応じた色を解決できれば画面表示ができます。
次の記事
今回の内容を前提に、当たり判定や基本動作の仕様も記載しています。