おじさんの毎日

おじさんですぅ

テトリスの回転アルゴリズムを考えてみた。

こんにちは、おじさんです。

きょうはテトリスの回転アルゴリズムを考えてみました。

f:id:akkodayo:20211127143253p:plain



とりあえず数学の知識はいらないので

私みたいな猿でもわかると思います

私の語彙力があれば。



まず、ブロックを4x4のデータとして考えます。

f:id:akkodayo:20211127154357p:plain

文字きたな...っていうのは置いといて、

とりあえず横一列をよく見てみましょう。



f:id:akkodayo:20211127155155p:plain


こちらです。

こちらを右に90度回転させると

こうなります。


f:id:akkodayo:20211127155558p:plain


元座標と回転したところの座標を比べてみると...


f:id:akkodayo:20211127161126p:plain


元のy座標が増えると、回転後のx座標が減っています!

だから回転させるには回転後のx座標を4(ブロックのサイズ) - 元のy座標、

回転後のy座標を元のx座標にすればいいわけです。


これをプログラムで表すと...

var rotated_block = [];

まず、回転後のブロックを作成します。

~~~~~~~~~

for(var i = 0; i < 4; i++) {
  for(var n = 0; n < 4; n++) {

  }
}

そしたら、配列を読み込むためにfor文を書きます。

~~~~~~~~~

for(var i = 0; i < 4; i++) {
  rotated_block[i] = [];
  for(var n = 0; n < 4; n++) {
    rotated_block[i][n] = block[n][4 - i - 1];
  }
}

最後に配列にデータを設定したら完成です。

また、なんで一を引いているかというのは説明がめんどくさいので簡単に説明すると

配列の座標は数字-1だからです(語彙力)


ここまでありがとうございました。