既存クラスの利用
3-3 :ユニットの作成


  Unit1.pas            / 3-1   3-2   3-4   3-5   3-6   3-7  
このユニットでは黒ネコの作成を行っています。

クリックすると『にゃー』と鳴く、機嫌が変動する、ネコの画像を読み込む……。
そういった様々な処理をここに記述しています。

ソースを読み砕いていく必要はありません。
これは 1-3 や、 2-2 で行った作業の発展、応用形として頭に留めておいて下さい。



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, mmsystem;

type
 TCatWork = class(TImage)

 private
  { Private 宣言 }
 public
  { Public 宣言 }
  COMBO :Boolean;

  constructor Create (AOwner: TComponent);override;
  procedure Click; override;

  procedure CatMove; virtual;
  procedure SETCAT;
  procedure GAMEOVER;
  procedure Start;

  procedure UP; virtual;
  procedure DOWN; virtual;
  procedure RIGHTA; virtual;
  procedure RIGHTB; virtual;
  procedure LEFTA; virtual;
  procedure LEFTB; virtual;
end;

var
 CatWork1: TCatWork;   //↓オブジェクトを3つ生成する
 CatWork2: TCatWork;
 CatWork3: TCatWork;

implementation

uses MainUnit;

{$R *.DFM}



//オブジェクト作成時の宣言
constructor TCatWork.Create (AOwner: TComponent);
begin
 inherited
  Create (AOwner);
  Parent := Cat;
  Visible:= False;
  Randomize;
  COMBO := True;
end;



//クリックイベント
procedure TCatWork.Click;
begin
 inherited;

  Cat.LabelHIT.Caption := INTTOSTR(STRTOINT(Cat.LabelHIT.Caption) -1);

  //ネコを触った時のメイン処理
  if COMBO = True then begin
   case Random(3) of
    0: begin
      Cat.PB.Position := Cat.PB.Position + 1;
      SndPlaySound(PChar(Cat.WAVFile + 'se1.wav'),SND_SYNK or SND_NODEFAULT); end;
    1: begin
      Cat.PB.Position := Cat.PB.Position + 1;
      SndPlaySound(PChar(Cat.WAVFile + 'se2.wav'),SND_SYNK or ND_NODEFAULT); end;
    2: begin
      Cat.PB.Position := Cat.PB.Position - 1;
      SndPlaySound(PChar(Cat.WAVFile + 'se3.wav'),SND_SYNK or SND_NODEFAULT); end;
   end;
  end else //連打されたら機嫌を悪くする
   Cat.PB.Position := Cat.PB.Position -1;

  //クリック回数がなくなったらゲームを終了させる
  if Cat.LabelHIT.Caption <= INTTOSTR(0) then
   GAMEOVER;

  //ネコの機嫌が良くなった時の処理
  if Cat.PB.Position = Cat.MAXHIT then begin
   Visible := False;
   SndPlaySound(PChar(Cat.WAVFile + 'se4.wav'),SND_SYNK or SND_NODEFAULT);
   Cat.StopGame;
   Cat.LabelResult.Caption :='GAME CLEAR !!!';
   Cat.SETDLG;
  end;

 COMBO := False;
end;



//残りクリック数、もしくはタイムが0になった時の処理
procedure TCatWork.GAMEOVER;
begin
 if Cat.MD = True then begin
  SndPlaySound(PChar(Cat.WAVFile + 'se5.wav'),SND_SYNK or SND_NODEFAULT);
  Cat.StopGame;
  Cat.LabelResult.Caption :='GAME OVER !!!';
  Cat.SETDLG; //メッセージダイアログを出す

  Visible := False;
 end;
end;



//ネコのvisibleをTrueに
procedure TCatWork.Start;
begin
 CatMove;
 Visible := True;
 SETCAT;
end;



//出現イベント:ランダム使用
procedure TCatWork.CatMove;
begin
 case Random(10) of
  0: UP;
  1: DOWN;
  2: RIGHTA;
  3: LEFTA;
  4: LEFTB;
  5: RIGHTB;

  6: UP;
  7: DOWN;
  8: RIGHTA;
  9: LEFTA;
 end;
end;



//イメージを読み込む為の準備(再描画)
procedure TCatWork.SETCAT;
begin
 Transparent := True;
 Stretch := True;
 AutoSize := True;

 COMBO := True; //連打されないように
end;



//以下、ネコの出現場所処理  ***********************************
procedure TCatWork.UP;
begin
 SETCAT;
 Top := 23;
 Left := 176;
 Picture.LoadFromFile(Cat.BMPFile + 'Cat1.bmp');
end;

procedure TCatWork.DOWN;
begin
 SETCAT;
 Top := 284;
 Left:= 168;
 Picture.LoadFromFile(Cat.BMPFile + 'Cat2.bmp');
end;

procedure TCatWork.RIGHTA;
begin
 SETCAT;
 Top := 260;
 Left := 410;
 Picture.LoadFromFile(Cat.BMPFile + 'Cat2.bmp');
end;

procedure TCatWork.LEFTA;
begin
 SETCAT;
 Top := 216;
 Left := 8;
 Picture.LoadFromFile(Cat.BMPFile + 'Cat3.bmp');
end;

procedure TCatWork.LEFTB;
begin
 SETCAT;
 Top := 246;
 Left := 80;
 Picture.LoadFromFile(Cat.BMPFile + 'Cat3.bmp');
end;

procedure TCatWork.RIGHTB;
begin
 SETCAT;
 Top := 26;
 Left := 360;
 Picture.LoadFromFile(Cat.BMPFile + 'Cat1.bmp');
end;

end.
トップに戻る /  前に戻る /  次へ