コラム / テトリスぽいもの / 18



さて、ここからどこを作るかいくつか選択肢があります。
・左右に動かせるようにする
・次が落ちてくるようにする
・ピース形状関連の処理を最適化する
まぁ、しばらく考えたんですが、
左右に動かせる→一個だけじゃつまらない→次が落ちるようになった後
次が落ちてくる→同じ形が落ちてきたらつまらない→ピース定義をしたあと
ピース定義→結果反映が遅い→最初にやるには萎える
と、どれから始めてもイマイチなので、
先につまらないピース定義から実装しましょう。
そのかわし、ちょっと新手法出します
ピースは必ず、4*4に収まる形です。
で、さまざまな種類があります。
でも、4*4に収まるって事は、
3次元配列でうまく整理できる
ってところに注目です。
3次元です。 
俺は2次元にしか興味ないって人も、
今回はついてきてくださいね。
要素数は莫大なものになりますが、
そのうち二次元はピースの形、と考えれば、
「ピースの形が並んでいる配列」
と捉えられます。
そしたら少しは・・・簡単?

sanji.png

さて、上の画像にもありますが、
ピースを二次元目、3次元目を使って二次元情報としてもち、
一次元目はピースの識別番号にしたいと思います。
ここ、書いては消し、書いては消しで、
だいぶ時間かかってしまいましたが、
とりあえずピース情報は根性で実装しようと思います。
Formのpublic変数と、
手続き一つを追加します。
 TForm1 = class(TForm)
   (略)
 private
   { Private 宣言 }
 public
   { Public 宣言 }
   (略)
   PieceShapeTables:Array[0..6,0..3,0..3]of Boolean;
   procedure InitPST;
   (略)
 end;
0から6までで7種類定義します。その後の0..3,0..3は、
先の0..3がy座標、後の0..3がx座標となります。
InitPST手続きってのは、
PieceShapeTablesの略です。
じゃぁ、initPSTを実装します・・・
実装部は一番下にしましょうね。
見るのは今だけにしましょう。
procedure TForm1.InitPST;
begin
   //深呼吸
end;
ちょっとこの中身は次ページにしようやっぱうん