unit HraUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TRybka = class
bmp: array[0..1, 0..3, 0..9] of TBitmap;
x, y, dx, dy, faza,smer,uroven,life: 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,pozx,pozy: Integer;
rybky: array of TRybka;
pozadie: TBitmap;
mince: array of TMinca;
hrac: TChobotnica;
poz: array of record x, y: Integer; end; // zoznam pozícií
public
constructor Create(cc: TCanvas);
function tik: Boolean; // tikanie èasovaèa
procedure klaves(key: Word); // stláèanie klávesov
end;
implementation
{TRybka}
constructor TRybka.Create(xx, yy: Integer);
var
b:Tbitmap;
i,j:integer;
begin
x:=xx;
y:=yy;
dy:=0;
life:=1100;
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].Transparent:=True;
bmp[0,i,j].PixelFormat:=pf24bit;
bmp[0,i,j].Canvas.Draw(j*-80,i*-80,b);
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].Transparent:=True;
bmp[1,i,j].PixelFormat:=pf24bit;
bmp[1,i,j].Canvas.Draw(j*-80,i*-80,b);
end;
b.free;
end;
procedure TRybka.kresli(c: TCanvas);
begin
faza:=(faza+1) mod 9;
if dx<0 then
c.Draw(x,y,bmp[0,uroven,faza]);
if dx>0 then
c.Draw(x,y,bmp[1,uroven,faza]);
end;
destructor TRybka.Destroy;
var i,j:integer;
begin
for i:=0 to 3 do
for j :=0 to 9 do
bmp[0,i,j].free;
for i:=0 to 3 do
for j :=0 to 9 do
bmp[1,i,j].free
end;
{TMinca}
constructor TMinca.Create(xx, yy: Integer);
var
b:Tbitmap;
i,j:integer;
begin
x:=xx;
y:=yy;
dy:=0;
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].Transparent:=True;
bmp[i,j].PixelFormat:=pf24bit;
bmp[i,j].Canvas.Draw(j*-72,i*-72,b);
end;
b.free;
end;
procedure TMinca.kresli(c: TCanvas);
begin
faza:=(faza+1) mod 9;
inc(y);
c.draw(x,y,bmp[uroven,faza]);
end;
destructor TMinca.Destroy;
begin
end;
{TChobnotnica}
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].Transparent:=True;
bmp[i].PixelFormat:=pf24bit;
bmp[i].Canvas.Draw(i*-60,0,b);
end;
b.free;
end;
procedure TCHobotnica.kresli(c: TCanvas);
begin
faza:=(faza+1) mod 9;
c.Draw(x,y,bmp[faza]);
end;
destructor TChobotnica.Destroy;
var i:integer;
begin
for i:=0 to 9 do
bmp[i].free;
end;
{THra}
constructor THra.Create(cc: TCanvas);
var t:textfile;
i:integer;
begin
c:=cc;
body:=400;
pozadie:=Tbitmap.create;
pozadie.LoadFromFile('akvarium.bmp');
hrac:=Tchobotnica.Create(200,200);
AssignFile(t,'pozicie.txt');
reset(t);
while not Eof(t) do
begin
SetLength(poz,length(poz)+1);
read(t,poz[High(poz)].x);
read(t,poz[High(poz)].y);
end;
end;
function Thra.tik: Boolean; // tikanie èasovaèa
var
i,x:integer;
begin
c.Draw(0,0,pozadie);
hrac.kresli(c);
if body > 99 then
begin
SetLength(rybky,length(rybky)+1);
rybky[High(rybky)]:=TRybka.Create(poz[high(rybky)].x,(poz[High(rybky)].y));
rybky[High(rybky)].dx:=Random(4)-2;
rybky[High(rybky)].dy:=Random(4)-2;
rybky[High(rybky)].uroven:=0;
dec(body,100);
end;
if rybky<>nil then
for i:=0 to high(rybky) do
begin
rybky[i].kresli(c);
end;
i:=-1;
if rybky<>nil then
while i < High(rybky) do
begin
inc(i);
if rybky[i].uroven>0 then
if random(100)=0 then begin
SetLength(mince, Length(mince)+1);
mince[high(mince)] := TMinca.Create(rybky[i].x,rybky[i].y);
mince[high(mince)].uroven:= rybky[i].uroven-1;
end;
inc(rybky[i].y,rybky[i].dy);
inc(rybky[i].x,rybky[i].dx);
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>580 then rybky[i].dx:=-rybky[i].dx;
if rybky[i].y>400 then rybky[i].dy:=-rybky[i].dy;
dec(rybky[i].life);
if rybky[i].life>1100 then rybky[i].uroven:=0
else if (rybky[i].life>800) and (rybky[i].life<1000) then rybky[i].uroven:=1
else if (rybky[i].life>400) and (rybky[i].life<801) then rybky[i].uroven:=2
else if (rybky[i].life>0) and (rybky[i].life<401) then rybky[i].uroven:=3
else if (rybky[i].life<1) then begin
rybky[i].free;
rybky[i]:=rybky[high(rybky)];
SetLength(rybky,Length(rybky)-1);
end;
if rybky<>nil then begin
if (ABS(rybky[i].x-hrac.x)<30) and (ABS(rybky[i].y-hrac.y)<30) then
begin
rybky[i]:=rybky[high(rybky)];
SetLength(rybky,Length(rybky)-1);
end;
x:=0;
while x < High(mince)+1 do
begin
if (ABS(mince[x].x-hrac.x) <30) and (ABS(mince[x].y-hrac.y) <30) then
begin
if mince[i].uroven=0 then inc(body,10);
if mince[i].uroven=1 then inc(body,20);
if mince[i].uroven=2 then inc(body,30);
mince[i].free;
mince[i]:=mince[high(mince)];
SetLength(mince,Length(mince)-1);
i:=high(mince)+1;
end else inc(x);
end;
end;
if mince<> nil then begin
for i:= 0 to High(mince) do
mince[i].kresli(c);
end;
c.Font.Height := 20;
c.Font.Color := clYellow;
c.TextOut(550,10,IntToStr(body));
if (body<100) and ((rybky)=nil) then result:=false;
end;
end;
procedure Thra.klaves(key: Word); // stláèanie klávesov
begin
case key of
vk_right:if hrac.x < 580 then inc(hrac.x,hrac.dx);
vk_left:if hrac.x >0 then dec(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;
end.