トップへ(mam-mam.net/)

スロットマシンゲームを作る ~Delphiソースコード集

検索:

スロットマシンゲームを作る ~Delphiソースコード集

簡単なスロットマシンゲームのWindowsアプリケーションを作成します。

画面設計

Delphi IDEを起動し、「ファイル」⇒「Windows VCLアプリケーション -Delphi」をクリックしてプロジェクトと初期フォームを作成します。
右下ペインにある「パレット」から以下コンポーネントをドラッグ&ドロップします。

「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つの「停止」ボタンを押してスロットを止めます。