{**********************************************************************} {**********************************************************************} {**********************************************************************} { Version 0.2 by: Saku Kukonlehto date: 12.11.1999 comments: "Palaset tehty Tsprite komponentin mukaan Version 0.3 by: Saku Kukonlehto date: 15.11.1999 comments: "palaset laitettu taulukkoon jotta ne saataisiin eri värisiksi." Version 0.4 by: Lasse Lilja date: 15.11.1999 comments: "laitoin spriten auton tilalle" Version 0.5 by: Lasse Lilja date: 22.11.1999 comments: "laitoin kanta_spriten spriten tilalle" } {**********************************************************************} unit KrakSaku; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, laskuri, ExtCtrls, RandomNumberGenerator, pelaaja,enemy, Kanta_Sprite, MPlayer; type TFormKrack = class(TForm) tausta: TPanel; Button1: TButton; RandomNumberGenerator1: TRandomNumberGenerator; Laskuri1: TLaskuri; Label1: TLabel; Label2: TLabel; osuma_aani: TMediaPlayer; tausta_musa: TMediaPlayer; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); private { Private declarations } Kuvat: array of string; palaset : TList; Pallot:TList; Mailat:TList; koord:TVarausTaulukko; varaus:TVarausTaulukko; paikka:integer; PalloLiik:integer; procedure Osuiko(sender:TObject;x,y:integer); procedure Uussprite(x,y:integer;kuva:string); procedure UusPallo; procedure UusMaila; procedure AsetaKuvat(kuva:String); public { Public declarations } end; var FormKrack: TFormKrack; implementation {$R *.DFM} {**********************************************************************} // FORMIN KONSTRUKTORI {**********************************************************************} procedure TFormKrack.FormCreate(Sender: TObject); Var i,j,apu,lkm:integer; mato:array of integer; begin Randomize; button1.Hide; paikka:=0; palaset:=TList.Create; lkm := 5; //erilaisten esteiden lkm pakko antaa!!! PalloLiik:=0; setLength(kuvat,lkm); AsetaKuvat('.\kuvia\esteet.bmp'); AsetaKuvat('.\kuvia\pala2.bmp'); AsetaKuvat('.\kuvia\pala3.bmp'); AsetaKuvat('.\kuvia\pala4.bmp'); AsetaKuvat('.\kuvia\pala2.bmp'); setLength(varaus,16,16);//randomin luku KoordKoko setlength(mato,5); mato[0]:=Random(52)+1; mato[1]:=Random(34)+1; mato[2]:=Random(46)+1; mato[3]:=Random(58)+1; mato[4]:=Random(42)+1; setlength(koord,50,2);//kaikki madot yhteensa eli tas tapaukses 38 apu:=0; koord:=randomnumbergenerator1.coords(mato,varaus); For i:=0 to lkm-1 Do begin apu := apu + mato[0]; for j:= (apu - mato[0]) to apu-1 do begin Uussprite(koord[j][0],koord[j][1],kuvat[i]); end; end; Pallot:=TList.Create; UusPallo; Mailat:=TList.Create; UusMaila; end; {**********************************************************************} // OSUIKO SINUUN SERKKUNI? {**********************************************************************} procedure TFormKrack.Osuiko(sender: TObject; x, y: integer); Var spriteJ,spriteI:TPelaaja; Pallo : TEnemy; j : integer; RectI,RectJ,RectIntr,RectPallo : TRect; osuma : boolean; begin If palaset.Count=0 then Exit; if ( not ( Sender is TEnemy ) ) then exit; Pallo := Sender as TEnemy; if (pallo.Left + pallo.width) >= (clientwidth - 20) then begin pallo.vauhti := 0; if laskuri1.count > 200 then ShowMessage('menihän se jotenkin') else ShowMessage('Oot todella paska'); if laskuri1.count = 800 then showmessage('olet todella loistava!'); button1.Show; end; RectPallo.Left:=x; RectPallo.Top:=y; RectPallo.Right:=x+Pallo.Width; RectPallo.Bottom:=y+Pallo.Height; osuma := false; spriteJ:=Mailat.Items[0]; RectJ.Left:=spriteJ.Left; RectJ.Top:=spriteJ.Top; RectJ.Right:=spriteJ.Left+spriteJ.Width; RectJ.Bottom:=spriteJ.Top+spriteJ.Height; if IntersectRect(RectIntr,RectPallo,RectJ) then begin osuma := true; end; if ( osuma ) then begin Pallo.Suunta := 95+random(170); osuma_aani.play; end; for j:=palaset.Count-1 downto 0 do begin spriteI:=palaset.Items[j]; Recti.Left:=spritei.Left; Recti.Top:=spritei.Top; Recti.Right:=spritei.Left+spritei.Width; Recti.Bottom:=spritei.Top+spritei.Height; if IntersectRect(RectIntr,RectPallo,Recti) then begin palaset.Delete(j); spritei.Free; Laskuri1.Inc(10); Pallo.Suunta := random(360); end; end; end; {**********************************************************************} // UUSI Kanta_SPRITE {**********************************************************************} procedure TFormKrack.Uussprite(x,y:integer;kuva:string); Var Kikke:TKanta_sprite; begin kikke:=TKanta_sprite.Create(Self); palaset.Add(kikke); kikke.Parent:=tausta; kikke.SpritenHORKuva:=kuva; kikke.Left:=kikke.Width*x+40; kikke.Top:=kikke.Height*y+40; kikke.OnspriteMove:=Osuiko; end; {**********************************************************************} // FORMIN DESTRUKTORI {**********************************************************************} procedure TFormKrack.FormDestroy(Sender: TObject); begin if Assigned(palaset) then palaset.Free; If Assigned(Pallot) then Pallot.Free; if Assigned(Mailat) then Mailat.Free; Kuvat:=nil; varaus:=nil; koord:=nil; end; {**********************************************************************} // UUSI PALLO {**********************************************************************} procedure TFormKrack.UusPallo; Var Pallo:TEnemy; begin Pallo:=TEnemy.Create(Self); Pallot.Add(Pallo); Pallo.Parent:=tausta; Pallo.SpritenPALAAKuva:='.\kuvia\ymp.bmp'; Pallo.SpritenKUOLIKuva:='.\kuvia\ymp.bmp'; Pallo.SpritenVERKuva:='.\kuvia\ymp.bmp'; Pallo.SpritenHORKuva:='.\kuvia\ymp.bmp'; Pallo.Left:=clientwidth - 80; if Pallo.left < 0 then Pallo.left := 0; Pallo.Top:=Random(clientHeight-40); Pallo.Vauhti := 25; Pallo.Suunta := 100 + Random(160); Pallo.OnspriteMove := Osuiko; end; {**********************************************************************} // UUSI PALLO {**********************************************************************} procedure TFormKrack.UusMaila; Var Maila:TPelaaja; begin Maila:=TPelaaja.Create(Self); Mailat.Add(Maila); Maila.Parent:=tausta; Maila.SpritenPALAAKuva:='.\kuvia\pala.bmp'; Maila.SpritenKUOLIKuva:='.\kuvia\pala.bmp'; Maila.SpritenVERKuva:='.\kuvia\pala.bmp'; Maila.SpritenHORKuva:='.\kuvia\pala.bmp'; Maila.Left:=clientwidth - 40; Maila.Top:=clientheight - 200; Maila.Vauhti:=0; Maila.Suunta:=0; Maila.OnspriteMove:=Osuiko; end; {**********************************************************************} // NAPPIA KUN ERKKI HAKKAA... {**********************************************************************} procedure TFormKrack.FormKeyPress(Sender: TObject; var Key: Char); var c:String; Ma:TPelaaja; pallo: TEnemy; begin Ma:=Mailat.Items[0]; pallo:=Pallot.Items[0]; c:=AnsiUpperCase(Key); if c = ' ' then begin if PalloLiik <> -1 then begin pallo.vauhti := 15 + random(12); Label1.Hide; PalloLiik := -1; end; end; If c = 'I' then begin Ma.Suunta := 90; Ma.Top:=Ma.Top-27; if ma.top <= 0 then ma.top := 0; end; if c = 'M' then begin Ma.Suunta := 270; Ma.Top:=Ma.Top+27; if Ma.Top >= (clientheight - ma.Height-15) then ma.top := (clientheight-ma.Height); end; end; {**********************************************************************} // PISTELEE KUVIA POSKEEN {**********************************************************************} procedure TFormKrack.AsetaKuvat(kuva:String); begin kuvat[paikka]:=kuva; inc(paikka); end; {**********************************************************************} // BUTTONIN PAINALLUS {**********************************************************************} procedure TFormKrack.Button1Click(Sender: TObject); begin close; end; {**********************************************************************} //FORMIN KOON SÄTEILY {**********************************************************************} procedure TFormKrack.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); begin Resize := false; end; {**********************************************************************} {**********************************************************************} {**********************************************************************} end.