どうやって回転させるか?

目次

自由研究

長男の自由研究。

プログラミングは断念して、
ロケットの研究になりました。
 

スクラッチという言語で、
テトリスというゲームを作りたいということで、
さすがにハードルが高すぎましたか。
 

「誰かが作ったテトリスを調べてみたら?」

ということもやってみたんですが、
これもちょっと難しかったようです。
 

断念はしましたが、
「作りきる」「調べ切る」難しさを
経験してくれていたら嬉しいです。
 

テトリスのプログラム

この、調べているときに、
すごく感動したことがあって、

それを書きたいのですが、
 

たぶん、テトリスを知らない人には伝わりません。

あと、プログラムの処理を書きます。

伝わらないかもしれないと思いながら、
それでも書きたいぐらい感動したんです。
 

 
テトリスは、
4つの正方形で構成された図形(テトリミノといいます)を
隙間なく組み合わせていくゲームです。
 

落下するテトリミノを回転させて隙間なく組み合わせていって、
何列そろえられるか?

揃えたら消えるので、うまい人は延々つづけられるゲームです。

といったゲームなのですが、
 

この、回転をプログラムでどう処理するか?
というところが感動したところです。
 

回転の処理

まず、
テトリミノを4つのX座標、Y座標の集合で表現します。
以下、(X座標、Y座標)と書きます。
 

例えば、
(0,0) (1,0) (-1,0) (0,1)
これは「凸」型のテトリミノになります。

   (0,1)   
(-1,0)(0,0)(1,0)

※これ、うまく表示されるかな?

 

これを右回転するとき、

回転後のX座標=回転前のY座標
回転後のY座標=ー回転前のX座標

と処理されていました。

実際にやってみると
(0,0) →(0,0)
(1,0) →(0,-1)
(-1,0)→(0,1)
(0,1) →(1,0)
 


  (0,1)   
  (0,0)(1,0)
  (0,-1)  

これで右を向いた「凸」が出来上がります。
 

もう一度右回転すると、下向きの「凸」です。

(-1,0)(0,0)(1,0)
   (0,-1)  

さらに回転すると、左向きの「凸」


    (0,1)
(-1,0)(0,0)
    (0,-1)

 

調べてみると、
他の形のテトリミノでも、
ちゃんと回転します。
 

感動ポイント

感動のポイントは

・どの形、どの向きのテトリミノでも共通の処理で実現していること

共通の処理にするため、

・テトリミノを座標の集合で表現し、
・テトリミノの回転を座標の入れ替えで実現している

こういうアイデア、工夫。
 

難しそうなことを、
簡単に実現する。
 

難しそうなことでも、
工夫とアイデアと、ひらめきと

そういう思考と試行で実現できるんです。
 

誰かがやっているんです。
思いつく人はいるんです。

そういうことに感動したんです。