Step 07 of 12
7種類のミノ
I, O, T, S, Z, L, J — テトリスの7種類のミノを定義します。
enum に色とセル配列を持たせる Java らしいパターンで、
衝突判定と描画は「各ミノの各マス」をループして処理します。
About this step
データを持つ enum
Shape は 7つの値 (I, O, T, S, Z, L, J) を持つ enum。
Java の enum はフィールドとコンストラクタを持てます。今回は
各ミノに「色」と「セル配列」を持たせました。
I(Color.CYAN, new int[][]{...}) の書き方は一見不思議ですが、
これが enum の値を定義するときの Java の構文。コンストラクタを裏で呼んでいます。
ミノは 2次元配列
例えば T ミノは 3×3 の int[][]:
{0, 1, 0}
{1, 1, 1}
{0, 0, 0}
1 が「埋まっているセル」、0 が空白。
ミノの左上を (pieceCol, pieceRow) として、
各 (r, c) が埋まっているかをループで見れば、
盤面のどこに描くか・どこに当たるかが計算できます。
canMove と lockPiece の進化
衝突判定と固定処理は、ミノの 各セルに対してループするように拡張しました。
空のセル (== 0) はスキップ、埋まっているセルだけチェック。
ミノのサイズが 2×2 (O) から 4×4 (I) までバラバラでも、
cells.length と cells[r].length を使えば全部同じコードで処理できる
— 配列の長さを聞ける Java らしい書き方です。
次は?
今は I → O → T → S → Z → L → J の順にミノが出てきます。
Step 8 で java.util.Random を使って、ランダム抽選に変えます。