スロットマシンゲームを作る ~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つの「停止」ボタンを押してスロットを止めます。
