->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 result:=true; c.Draw(0,0,pozadie); for i := 0 to High(rybky) do begin 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; 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 else if (rybky[i].zivot<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+10) <30) and (ABS(rybky[i].y-hrac.y+10) <40) then { result:=false } begin rybky[i]:=rybky[high(rybky)]; SetLength(rybky,Length(rybky)-1); end; end; end; if rybky<> nil then begin for i:= 0 to High(rybky) do rybky[i].kresli(c); end; if mince<> nil then begin i:=0; while i < Length(mince) do begin if mince[i].y>480 then begin mince[i].free; mince[i]:=mince[high(mince)]; SetLength(mince,Length(mince)-1); i:=length(mince); end else inc(i); end; end; if mince<> nil then begin i:=0; while i < High(mince)+1 do begin if (ABS(mince[i].x-hrac.x) <30) and (ABS(mince[i].y-hrac.y) <30) then { result:=false } 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(i); end; end; for i:= 0 to high(mince) do mince[i].kresli(c); 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)); if (body<100) and ((rybky)=nil) then result:=false; 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,100); 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. ->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 if h.tik=false then begin Timer1.Enabled:=false; ShowMessage('koniec hry, rybka sa utopila :)'); end; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin h.klik(x,y, Shift); end; end. --------------------------------------------------- tie hviezdicky: ->unit2.pas unit Unit2; 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 Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses RobotUnit, RobotGroupUnit; type THviezda = class(TRobot) pada: boolean; vyska: integer; constructor Create(x, y, vv: integer); function urob: boolean; // true, ak uz skonèila padanie procedure zmen; end; { THviezda } constructor THviezda.Create(x, y, vv: integer); begin inherited Create(x, y); PC := clYellow; vyska := vv; pada := false; end; function THviezda.urob: boolean; var i: integer; begin if pada then moveXY(X+random(5)-2, Y+random(10)+3); Result := y > vyska; for i := 1 to 5 do begin fd(15); rt(144); end; PW := PW + 1; if PW > 6 then PW := 1; end; procedure THviezda.zmen; begin pada := true; end; ////////////////////////// const vzdial = 20; var r: TRobotGroup; procedure TForm1.FormCreate(Sender: TObject); begin r := TRobotGroup.Create; cs(clNavy); end; procedure TForm1.FormDestroy(Sender: TObject); begin r.Free; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i: integer; begin for i := 0 to r.num-1 do THviezda(r.r[i]).zmen; r.newRobot(THviezda.Create(X, Y, Image1.Height-10)); end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (shift = [ssLeft]) and (r.num > 0) then if r.r[r.num-1].dist(X, Y) >= vzdial then r.newRobot(THviezda.Create(X, Y, Image1.Height-10)); end; procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin cs(clNavy); for i := 0 to r.num-1 do if THviezda(r.r[i]).urob then r.eraseRobot(i); r.compact; end; end.