->zaciatok unit1.pas:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Hra;
var h: THra;
procedure TForm1.FormCreate(Sender: TObject);
begin
h:=Thra.create(Form1.Image1.Canvas);
DoubleBuffered:=true;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
h.free;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
h.klaves(Key);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
h.tik;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
h.klik(x,y, Shift)
end;
end.
->zaciatok hra.pas:
unit Hra;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TRybka = class
bmp: array[0..1, 0..3, 0..9] of TBitmap;
x, y, dx, dy, faza, zivot, uroven: Integer;
constructor Create(xx, yy: Integer);
procedure kresli(c: TCanvas);
destructor Destroy; override;
end;
TMinca = class
bmp: array [0..2, 0..9] of TBitmap;
x, y, dy, faza, uroven: Integer;
constructor Create(xx, yy: Integer);
procedure kresli(c: TCanvas);
destructor Destroy; override;
end;
TChobotnica = class
bmp: array [0..9] of TBitmap;
x, y, dx, dy, faza: Integer;
constructor Create(xx, yy: Integer);
procedure kresli(c: TCanvas);
destructor Destroy; override;
end;
THra = class
private
c: TCanvas;
body: Integer;
rybky: array of TRybka;
pozadie: TBitmap;
mince: array of TMinca;
hrac: TChobotnica;
public
constructor Create(cc: TCanvas);
function tik: Boolean; // tikanie èasovaèa
procedure klik(X, Y: Integer; Shift:TShiftState); // klikanie mysou
procedure klaves(key: Word); // stláèanie klávesov
destructor Destroy; override;
end;
implementation
//TRybka
constructor TRybka.Create(xx, yy: Integer);
var b : TBitmap; i,j:integer;
begin
dx:=0; dy:=0; zivot:=1300;
x:=xx;
y:=yy;
b := TBitmap.Create;
b.LoadFromFile('rybkaVlavo.bmp');
for i:= 0 to 3 do
for j:=0 to 9 do begin
bmp[0,i,j]:= TBitmap.Create;
bmp[0,i,j].Width:=80;
bmp[0,i,j].Height:=80;
bmp[0,i,j].PixelFormat:=pf24bit;
bmp[0,i,j].Canvas.Draw(-80*j,-80*i,b);
bmp[0,i,j].Transparent:=true;
end;
b.Free;
b := TBitmap.Create;
b.LoadFromFile('rybkaVpravo.bmp');
for i:= 0 to 3 do
for j:=0 to 9 do begin
bmp[1,i,j]:= TBitmap.Create;
bmp[1,i,j].Width:=80;
bmp[1,i,j].Height:=80;
bmp[1,i,j].PixelFormat:=pf24bit;
bmp[1,i,j].Canvas.Draw(-80*j,-80*i,b);
bmp[1,i,j].Transparent:=true;
end;
b.Free;
end;
destructor TRybka.Destroy;
var i,j:integer;
begin
end;
procedure TRybka.kresli(c: TCanvas);
begin
faza := (faza+1) mod 9;
if dx>0 then c.Draw(x, y, bmp[1,uroven,faza]);
if dx<0 then c.Draw(x, y, bmp[0,uroven,faza]);
end;
//TMinca
constructor TMinca.Create(xx, yy: Integer);
var b: TBitmap; i,j:integer;
begin
x:=xx;
y:=yy;
b := TBitmap.Create;
b.LoadFromFile('peniazky.bmp');
for i:= 0 to 2 do
for j:=0 to 9 do begin
bmp[i,j]:= TBitmap.Create;
bmp[i,j].Width:=72;
bmp[i,j].Height:=72;
bmp[i,j].PixelFormat:=pf24bit;
bmp[i,j].Canvas.Draw(-72*j,-72*i,b);
bmp[i,j].Transparent:=true;
end;
b.Free;
end;
destructor TMinca.Destroy;
var i,j:integer;
begin
for i:= 0 to 2 do
for j:=0 to 9 do
bmp[i,j].free;
end;
procedure TMinca.kresli(c: TCanvas);
begin
faza := (faza+1) mod 9;
inc(y); inc(x,random(5)-2);
c.Draw(x, y, bmp[uroven,faza]);
end;
//Tchobotnica
constructor Tchobotnica.Create(xx, yy: Integer);
var b: TBitmap; i:integer;
begin
x:=xx;
y:=yy;
dx:=20;
dy:=20;
b := TBitmap.Create;
b.LoadFromFile('chobotnica.bmp');
for i:= 0 to 9 do begin
bmp[i]:= TBitmap.Create;
bmp[i].Width:=60;
bmp[i].Height:=60;
bmp[i].PixelFormat:=pf24bit;
bmp[i].Canvas.Draw(-60*i,0,b);
bmp[i].Transparent:=true;
end;
b.Free;
end;
destructor Tchobotnica.Destroy;
var i:integer;
begin
for i:= 0 to 9 do
bmp[i].free;
end;
procedure Tchobotnica.kresli(c: TCanvas);
begin
faza := (faza+1) mod 9;
c.Draw(x, y, bmp[faza]);
end;
//THra
constructor THra.Create(cc: TCanvas);
begin
randomize;
c:=cc;
body:=200;
pozadie := TBitmap.Create;
pozadie.Width:= 640;
pozadie.Height:= 480;
pozadie.PixelFormat:=pf24bit;
pozadie.LoadFromFile('akvarium.bmp');
hrac:=TChobotnica.Create(320-30,240-30);
end;
function THra.tik: Boolean; // tikanie èasovaèa
var i:integer;
begin
c.Draw(0,0,pozadie);
for i := 0 to High(rybky) do
begin
if rybky[i].x<0 then rybky[i].dx:=-rybky[i].dx;;
if rybky[i].y<0 then rybky[i].dy:=-rybky[i].dy;;
if rybky[i].x>600 then rybky[i].dx:=-rybky[i].dx;
if rybky[i].y>440 then rybky[i].dy:=-rybky[i].dy;
inc(rybky[i].y,rybky[i].dy);
inc(rybky[i].x,rybky[i].dx);
dec(rybky[i].zivot);
if rybky[i].zivot>1200 then rybky[i].uroven:=0
else if (rybky[i].zivot>800) and (rybky[i].zivot<1201) then rybky[i].uroven:=1
else if (rybky[i].zivot>400) and (rybky[i].zivot<801) then rybky[i].uroven:=2
else if (rybky[i].zivot>0) and (rybky[i].zivot<401) then rybky[i].uroven:=3;
end;
if rybky<> nil then begin
for i:= 0 to High(rybky) do
rybky[i].kresli(c);
end;
if mince<> nil then begin
for i:= 0 to High(mince) do
mince[i].kresli(c);
end;
hrac.kresli(c);
c.Brush.Style:=bsClear;
c.Font.Height := 40;
c.Font.Name := 'Arial';
c.Font.Color := clYellow;
c.TextOut(550,10,IntToStr(body));
end;
procedure THra.klik(X, Y: Integer; Shift:TShiftState); // klikanie mysou
begin
if (body>99) and (shift=[SSleft]) then begin
SetLength(rybky, Length(rybky)+1);
rybky[high(rybky)] := TRybka.Create(x-40,y-40);
rybky[high(rybky)].uroven:=0;
rybky[high(rybky)].dx:=random(3)+1;
rybky[high(rybky)].dy:=random(5);
dec(body,1);
end;
if(shift=[SSright]) then begin
SetLength(mince, Length(mince)+1);
mince[high(mince)] := TMinca.Create(x-36,y-36);
if high(mince)>2 then mince[high(mince)].uroven:=2 else mince[high(mince)].uroven:=high(mince);
end;
end;
procedure THra.klaves(key: Word);
begin
case Key of
vk_left: if hrac.x>0 then dec(hrac.x,hrac.dx);
vk_right: if hrac.x<590 then inc(hrac.x,hrac.dx);
vk_up: if hrac.y>0 then dec(hrac.y,hrac.dy);
vk_down: if hrac.y<420 then inc(hrac.y,hrac.dy);
end;
end;
destructor THra.Destroy;
begin
end;
end.