−トップへ−

スライドパズルを作る
その1 フォームの設計

はじめに

 今回は,スライドパズルを作ってみます。スライドパズルの種類は「15パズル」といわれるもので,1つの空き地を使って15個のピースを順番通りに並べるというものです。

フォームの設計

 今回はフォームの設計を,FormCreateイベントハンドラの中で行いたいと思います。そのため,あらかじめフォームに手を加えることはありません。
 
 FormCreateイベントハンドラでは,最初にフォームの大きさと色を設定した後,16個のイメージコンポーネントを動的に作成します。普通コンポーネントはあらかじめフォーム上に配置(静的生成)しますが,プログラムソースの中でフォーム上に設置(動的生成)することもできます。
 
 具体的には16個のピースの大きさを98ピクセルにしてピースとピースの隙間を2ピクセルにしてみます。そしてその16個のピースをフォーム上に順番に並べていきます。
 プログラムソースは以下の通りです。

{ Private 宣言 }
 img:array[1..16] of Timage; //imageを動的生成するために,これを記入します
public
{ Public 宣言 }
end;
  :
  :
 
 
procedure TForm1.FormCreate(Sender: TObject);
var
 i:integer; //iを整数宣言
begin
 form1.ClientHeight:=402; //フォームの内側の高さを402にする
 form1.ClientWidth:=402; //フォームの内側の幅を402にする
 form1.color:=clblack; //フォームの色を黒にする
 
 for i:=1 to 16 do begin
  img[i]:=Timage.Create(form1); //イメージコンポーネントを作成
  img[i].Parent:=form1; //イメージコンポーネントをform1上に置く
  img[i].Left:=100*((i-1) mod 4)+2; //イメージコンポーネントのx座標を指定
  img[i].Top:=100*((i-1) div 4)+2; //イメージコンポーネントのy座標を指定
  img[i].Width:=98; //イメージコンポーネントの幅を98にする
  img[i].Height:=98; //イメージコンポーネントの高さを98にする
  with img[i].canvas do begin //ここからイメージコンポーネントの色や文字を設定します
   brush.Color:=clwhite; //ブラシの色を白にする
   fillrect(img[i].Canvas.ClipRect); //イメージコンポーネント全体を塗りつぶす
   font.Color:=clMaroon; //文字の色を茶色っぽい色にする
   if i<=15 then begin //イメージコンポーネント15個に順番に数字を描く
    font.Size:=40; //文字のサイズを40にする
    textout((img[i].Width-textwidth(inttostr(i))) div 2,        //イメージコンポーネントの中央に
         (img[i].Width-textheight(inttostr(i))) div 2,inttostr(i)); //数字を描く
   end else begin //それ以外(16個目)
    font.Size:=15; //文字のサイズを15にする
    textout((img[i].Width-textwidth('DELPHI')) div 2,       //イメージコンポー年の中央に
         (img[i].Width-textheight('DELPHI')) div 2,'DELPHI'); //「DELPHI」と描く
   end;
  end;
 end;
end;

 以上のプログラムを実行すると,下図の様なフォームが現れます。
 (デスクトップは「クラシック表示」にしてあります。)
 
 
 右下のピースはいらないのですが,遊びで作ってみました。
 
 次回は,ピースを動かしてみたいと思います。

−トップへ−