Step 09 of 12
回転
↑ キーで 90° 時計回りに回転させます。 2次元配列の転置 + 行反転が回転の正体。 壁や積みブロックに当たる時は回転をキャンセルするのがポイント。
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° 時計回りに回転