Step 09 of 12

回転

キーで 90° 時計回りに回転させます。 2次元配列の転置 + 行反転が回転の正体。 壁や積みブロックに当たる時は回転をキャンセルするのがポイント。

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

About this step

回転の数学

2次元配列を時計回りに 90° 回すのは、実はシンプルな変換です:
out[c][n - 1 - r] = in[r][c]

T ミノの例:

元:            回転後:
0 1 0          0 1 0
1 1 1    →    0 1 1
0 0 0          0 1 0

「1列目が一番下の行に、行を逆にしたものになる」というのが転置+反転の意味。 頭の中で試して動きを掴むのが一番。

Try — Validate — Commit パターン

回転のコードはこの3行:

int[][] rotated = rotateCW(currentCells);
if (canMove(rotated, pieceCol, pieceRow)) {
    currentCells = rotated;
}

Try(回してみた結果を作る) → Validate(置けるか判定) → Commit(OK ならコミット、NG なら捨てる)。 移動や衝突判定で何度もやっている「事前チェック」と同じ形。

Shape と currentCells の分離

currentShape は「どの種類か」(色のため)、 currentCells は「今どの向きか」(回った後の配列)を持ちます。 enum の cellsいじらない — 元データは共有の定数として残す、という設計意図。

操作

  • — 左右移動
  • — 1マス下げる
  • — 90° 時計回りに回転