スロットマシンゲームを作る ~Delphiソースコード集
簡単なスロットマシンゲームのWindowsアプリケーションを作成します。
画面設計
Delphi IDEを起動し、「ファイル」⇒「Windows VCLアプリケーション -Delphi」をクリックしてプロジェクトと初期フォームを作成します。
右下ペインにある「パレット」から以下コンポーネントをドラッグ&ドロップします。
- TEdit ×3個
- TButton ×4個
- TTimer ×1個
「Button2」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「プロパティ」タブをクリックして選択します。
「Button2」の[Tag]プロパティを 1 に設定します。
「Button3」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「プロパティ」タブをクリックして選択します。
「Button3」の[Tag]プロパティを 2 に設定します。
「Timer1」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「プロパティ」タブをクリックして選択します。
「Timer1」の[Interval]プロパティを 100 に設定します。
左上の構造ペインの「Form1」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「イベント」タブをクリックして選択します。
「Form1」の[OnCreate]の右側の空欄をダブルクリックします。
以下の赤字の部分のソースコードを入力します。
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); private { Private 宣言 } edit:Array[0..2] of TEdit; btn:Array[0..2] of TButton; num:Array[0..2] of Integer; spin:Array[0..2] of Boolean; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:Integer; begin //乱数生成器を初期化する Randomize(); //TEditを配列に入れる edit[0]:=Edit1; edit[1]:=Edit2; edit[2]:=Edit3; //TButtonを配列に入れる btn[0]:=Button1; btn[1]:=Button2; btn[2]:=Button3; Button4.Caption:='開始'; //配列の分ループする(0~2の3回) for i := Low (num)to High(num) do begin btn[i].Caption:='停止'; //0~9の間の値にランダムに設定する num[i]:=Random(10); edit[i].Text:=num[i].ToString; spin[i]:=False;//停止中にする end; end; end.
左上の構造ペインの「Button1」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「イベント」タブをクリックして選択します。
「Button1」の[Onlick]の右側の空欄をダブルクリックします。
以下の赤字の部分のソースコードを入力します。
procedure TForm1.Button1Click(Sender: TObject); var i:Integer; begin i:=TButton(Sender).Tag; if spin[i] then spin[i]:=False; //3つが停止中になった場合 if (spin[0]=false) and (spin[1]=false) and (spin[2]=false) then begin Timer1.Enabled:=False; if (num[0]=num[1]) and (num[1]=num[2]) then showmessage('あたり'); end; end;
左上の構造ペインの「Button2」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「イベント」タブをクリックして選択します。
「Button2」の[Onlick]の右側の[V]ボタンをクリックして「Button1Click」を選択します。
左上の構造ペインの「Button3」をクリックして選択します。
左下ペインの「オブジェクトインスペクタ」の「イベント」タブをクリックして選択します。
「Button3」の[Onlick]の右側の[V]ボタンをクリックして「Button1Click」を選択します。
「Button4」をダブルクリックして、以下の赤字の部分のソースコードを入力します。
procedure TForm1.Button4Click(Sender: TObject); var i:Integer; begin //3つが停止中の場合は回転を開始する if (spin[0]=false) and (spin[1]=false) and (spin[2]=false) then begin for i := Low(spin) to High(spin) do spin[i]:=True; Timer1.Enabled:=True; end; end;
デザインに切り替えて「Timer1」ダブルクリックして、以下の赤字の部分のソースコードを入力します。
procedure TForm1.Timer1Timer(Sender: TObject); var i:Integer; begin for i := Low(spin) to High(spin) do begin if spin[i] then begin num[i]:=num[i]+1; if num[i]>9 then num[i]:=0; edit[i].Text:=num[i].ToString; end; end; end;
全ソースコードは以下のようになります。
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private 宣言 } edit:Array[0..2] of TEdit; btn:Array[0..2] of TButton; num:Array[0..2] of Integer; spin:Array[0..2] of Boolean; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin i:=TButton(Sender).Tag; if spin[i] then spin[i]:=False; //3つが停止中になった場合 if (spin[0]=false) and (spin[1]=false) and (spin[2]=false) then begin Timer1.Enabled:=False; if (num[0]=num[1]) and (num[1]=num[2]) then showmessage('あたり'); end; end; procedure TForm1.Button4Click(Sender: TObject); var i:Integer; begin //3つが停止中の場合は回転を開始する if (spin[0]=false) and (spin[1]=false) and (spin[2]=false) then begin for i := Low(spin) to High(spin) do spin[i]:=True; Timer1.Enabled:=True; end; end; procedure TForm1.FormCreate(Sender: TObject); var i:Integer; begin //乱数生成器を初期化する Randomize(); //TEditを配列に入れる edit[0]:=Edit1; edit[1]:=Edit2; edit[2]:=Edit3; //TButtonを配列に入れる btn[0]:=Button1; btn[1]:=Button2; btn[2]:=Button3; Button4.Caption:='開始'; //配列の分ループする(0~2の3回) for i := Low (num)to High(num) do begin btn[i].Caption:='停止'; //0~9の間の値にランダムに設定する num[i]:=Random(10); edit[i].Text:=num[i].ToString; spin[i]:=False;//停止中にする end; end; procedure TForm1.Timer1Timer(Sender: TObject); var i:Integer; begin for i := Low(spin) to High(spin) do begin if spin[i] then begin num[i]:=num[i]+1; if num[i]>9 then num[i]:=0; edit[i].Text:=num[i].ToString; end; end; end; end.
実行する
IDEの実行ボタンをクリックして実行します。
作成したアプリケーションがコンパイルされ、実行します。
「開始」ボタンをクリックすると、スロットが動きます。3つの「停止」ボタンを押してスロットを止めます。