->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.