Step 06 of 12

ブロックの固定

着地したブロックを盤面に書き込み、 新しいブロックを上から出します。2次元配列 int[ROWS][COLS] が 「今どのマスが埋まっているか」の記憶になります。ブロックが積み上がり始めます。

MyTetris.java Read-only · editor is coming
Java runtime を初回読み込み中…
CheerpJ の JRE (数十 MB) をダウンロードしています。2回目以降はキャッシュから瞬時に立ち上がります。
preparing

About this step

盤面は 2 次元配列

int[ROWS][COLS] board は、各マスを int で表現した盤面。 0 が空、1 が埋まっている状態。 新しい配列はゼロで初期化されるので、何も書かなくても空盤面から始まります。

Java の 2次元配列のアクセスは board[row][col]。 縦(row)・横(col)の順です(数学の行列と同じ)。

着地したら固定、新ブロック生成

update() の中で、「1マス下に動けるか」を試します。動ければ blockRow++。 動けなければ 今のマスを盤面に記録して、新しいブロックを上から出す

board[blockRow][blockCol] = 1;
blockRow = 0;
blockCol = COLS / 2 - 1;

これで「落下しては止まる、落下しては止まる」を繰り返し、ブロックが積み上がります。

canMove が 1つ賢くなる

衝突判定に「board[row][col] != 0 なら動けない」を追加。 これで、ブロックは既に固定されたブロックの上にも止まるようになりました。 壁・床・他ブロック、全部同じ仕組みで処理されているのがポイント。

次のステップへ

今はすべて 1×1 の赤いブロックですが、テトリスには 7 種類のミノ (I, O, T, S, Z, L, J)があります。Step 7 で enum を使って 7 種類のミノを定義します。