Web開発など

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

テトリス考察:ブロック

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

web-dev.hatenablog.com

リンク先の参考文献を元に、ブロックについて考えた内容です。

ブロックとセル

テトリスのブロックは、4つのセル(四角形)から構成されています。

f:id:mamorums:20200723003237p:plain

セルの位置は (x, y) で表すことにしています。画面の右に行くと x が増えて、上に行くと y が増えます。

ブロックの実装

ブロックは、

  • 軸の位置
  • 回転パターン
  • 軸以外の相対位置

が分かれば表現できます。例えば、以下の通りです。

O字ブロック

f:id:mamorums:20200720232719j:plain

軸が (0, 0) だと仮定すると、他のセルは、

  • (0, +1)
  • (+1, +1)
  • (+1, 0)

が、軸からの距離になります。

相対的な位置は軸が動いても同じです。他のブロックも続けて書いていきます。

I, S, Z字ブロック

f:id:mamorums:20200720232919p:plain

回転する場合でも、回転パターンに応じた相対位置が分かればブロック全体を表現できます。

J, L, T字ブロック

f:id:mamorums:20200720232929j:plain

2回転のブロックと同じです。相対位置は図の中だけ記載してます。

回転数

ブロックはそれぞれ、

  • 0回転(O字ブロック)
  • 2回転(I, S, Z字ブロック)
  • 4回転(J, L, T字ブロック)

に分けて考えてます。公式の仕様はどうなのか分かりません。

回転の注意点

回転は厳密に回しているわけではなくて、次の相対位置を取得してブロックを再構成する、という感じです。

回転途中にぶつかるブロック(セル)が存在してても、次の相対位置がそれにぶつからなければOK、という実装方法になります。