ビスケットでテトリスがついにできました.つくってみると簡単でしたが,メガネの数は相当多いです.
制作は方眼紙モードで真ん中の荒さにします.
落ちてくるブロックは,方眼紙のマス目を一つの四角の大きさになるように描きます.
この逆Lブロックを一つ描けば90度の回転くらい自動でやって欲しいところですが,このビスケットでは方眼紙モードでの回転はできないので,4つの向きをそれぞれ別の絵として作るしかありません(将来のビスケットではできるようになると思います).
ブロックの他に次のような絵も描いておきます.
画面に四角を並べるのを楽するためにメガネで作ります.
これで緑のバツを一つ置くと横に紫のバツがならんで,それが一つづつが縦に四角を並べます.ボードの大きさを変えたい時も簡単にできます.
最初にこのように絵をおきます.
緑のバツが紫のバツの列に変わって ,
それぞれが四角の列にかわります.
このブロックが下に落ちるメガネは
です.下に空白があれば,ブロックは落ちて,上に空白ができます.
このブロックが落ちて何かに触れると固まります.ここで重要なのはブロックは一つの絵で作られているのに対して,固まった四角はそれぞれが一つの絵でできているという点です.
つまり,メガネの左側は逆Lのブロック1つと固まった四角1つですが,メガネの右側は固まった四角5つでできています.
タッチをつかって,ブロックを左右に動かすメガネはこのようにつくります.
ブロックの左側に空白が並んでいてブロックの左側をタッチしたとき,ブロックは左に動いて,空いた場所に空白ができます.右に動くのも同じです.
ブロックの中心をタッチするとブロックが回転します.
空白の並び方に注意してください.回転した後の形の領域が空白のとき,回転できます.
ここまでお分かりでしょうか.一つの向きに対して6つのメガネが必要でした.後は延々と,4方向全部作ればよいだけです.
全部で26個のメガネになりました.ブロックが横向きのときは固まるチェックが3通り必要な点だけ注意すればよいでしょうか.
最後に,上の緑の三角を押すことで,新たにブロックが生成されます.
このバージョンでは,自動的に降ってくるのではなく,自分でボタンを押さないと新しいブロックが落ちてきません.
この後必要な拡張は,横に1列に並んだ時に消すようにする,いろんな形のブロックを導入する,自動でブロックが落ちてくる,得点計算,などがありますね.
1列に並んだ時に消すのはそれほど難しくありませんが,消えた後1段ずつ落ちてくる部分をつくるときに,ブロックが落ちてくる最中だと変な動きになります.全部落ち切ってから新しいブロックが生成されるようにする必要があります.
まだ1つの形しかつくっていませんが,ここまで作った感想は,同じ作業の繰り返しですが,ちょっと頭を使う必要があったりして,作ることそのものがとても楽しいです.
プログラムはここにあります.
他の言語で作られた例(たとえばこことか)と比べるとビスケットの特徴がよくみえてきます.他の言語ですとデータ構造を考えて,90度の回転や接触して固まるチェックはプログラムで表現しています.プログラムが短くなりますが,アルゴリズムを考えて作らなければなりません.
それに対してビスケットのプログラムはそれほど難しくありません.一つ一つのメガネがやっていることは単純なことだけです.ただ,メガネの数がとても多くなります.メガネの数で複雑なアルゴリズムを表現できない部分をカバーしているとも言えるでしょう.