Web開発など

Java, JS, CSS, HTML, Unity, C# のことなどを書いてます。フリーソフトや二次創作の公開もしています。

テトリス考察:基本動作

Unity 2D でテトリスを制作したときのメモです。

web-dev.hatenablog.com

リンク先の参考文献を元に、基本的な動作について考えた内容です。

当たり判定

テトリスの場合、

「落下中のブロックが、他のブロックや壁に当たるか?」

という判定が必要になります。

処理の流れは、

  • 現在のブロックを消す
  • 移動後や回転後のブロックを構成
  • 他のブロックや壁に当たるか判定

といった感じで、落下・左右移動・回転などの際に必要です。

落下

f:id:mamorums:20200724153732p:plain

上は画面右下の一部で、O字ブロックが落下できるか判定してます。

  • 現在のブロックを消す
  • 軸のブロックを (x, y-1) に移動
  • 軸以外の位置を取得して判定

といった感じです。

他のブロックや壁に当たらなければ、ブロックを落下地点に固定させます。

左右移動

f:id:mamorums:20200724153745p:plain

移動の判定もほぼ同じで、上は右 (x+1, y) に動かす場合です。

壁やブロックに当たって動かせない場合、最後にブロックを元の場所に戻します。

回転

f:id:mamorums:20200724153755p:plain

次の回転パターンを元に判定します。こちらも衝突したら元のパターンに戻します。

動作のきっかけ

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

落下できない場合

ブロックが落下できない(落ちきった)場合は、

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

が必要になります。

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

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