fall and fall

ゲーム、プログラミング、二次創作のことなどを書いています。

テトリスの仕様考察 2.当たり判定・落下・左右移動・回転

Unity 2D でテトリスを制作した際に、当たり判定・落下・左右移動・回転の仕様について考えました。これから、その内容について記載していきます。

関連記事

今回の内容の前提になりますので、事前に見ておいて頂けると嬉しいです。

目次

  1. 当たり判定
  2. 落下
  3. 左右移動
  4. 回転
  5. 動作のきっかけ
  6. 落下できない場合の処理

1. 当たり判定

ブロックが以下の動作をする際に、当たり判定が必要になります。

  • 落下
  • 左右移動
  • 回転

判定の内容は「落下中のブロックが、他のブロックや壁に当たるか?」といったものです。

2. 落下

ブロックを落下させる場合、以下の処理を行います。

  1. 現在の位置のブロック消す
  2. 軸を (x, y-1) に移動してブロックを構成
  3. 当たり判定(他のブロックや壁に当たるか?)

他のブロックや壁に当たらなければ、軸の移動を確定させて、新しい位置にブロックを表示します。

他のブロックや壁に当たっていたら、軸を元の位置に戻します。

3. 左右移動

ブロックを左右に移動させる場合も、落下の処理とほぼ同じです。

上の画像は、右 (x+1, y) に動かす場合の例です。右に動かすと壁に当たるので、元の場所に戻します。

4. 回転

回転時の例は以下の通りです。

回転後に衝突する場合は、元の回転パターンに戻します。

5. 動作のきっかけ

落下は「時間経過(フレーム数)」、左右移動と回転は「プレイヤーの入力」で発生させるようにしてます。

下ボタンが押された場合は、落下までの時間(フレーム数)を減らしています。

6. 落下できない場合の処理

ブロックが落下できない(落ちきった)場合は、以下の処理が必要になります。

  • 削除判定
  • 新規ブロック投下
  • ゲームオーバー判定

ブロックが1行以上並んでいる場合は削除します。

新規ブロックを投下して、他のブロックと重なってたらゲームオーバーにします。