このユニットでは黒ネコの作成を行っています。
クリックすると『にゃー』と鳴く、機嫌が変動する、ネコの画像を読み込む……。
そういった様々な処理をここに記述しています。
ソースを読み砕いていく必要はありません。
これは
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.