Delphix-4 |
![]() |
|
DELPHIX-IV ( Örnek Uygulama )
{$R *.DFM}
Procedure tform1.cicekanimate(no,x,y:integer); begin inc(cicekcount[no]);if cicekcount[no]>10 then begin cicekcount[no]:=0; inc(cicekanim[no]);if cicekanim[no]>37 then cicekanim[no]:=36; end; DGCScreen1.Back.Draw(x,y,DGCScreen1.Images[cicekAnim[no]],True); end;
procedure tform1.yaratikgoster(no,karakterx1,karakterx2,karaktery,baslangic:integer); begin // **no : sprite'ın numarası - her sprite'ın bir numarası olmalıdır // **karakterx1 : oyun ekranında sprite'ın birinci X koordinatı // (Bir blok=16 pixel, oyun ekranı 200 blok genişliğinde // toplam oyun ekranı : 200 X 16 =3200 pixel) // **karakterx2 : oyun ekranında sprite'ın ikinci X koordinatı - // sprite bu iki koordinat arasında gezer // **karaktery : sprite'lar sadece sağa ve sola gittiği için bir tek Y koordinatı yeterlidir // **baslangic : sprite'ın ilk olarak başladığı nokta : karakterx1 ve karakterx2 arasında herhangi bir sayı if not yaratikvar[no] then begin yaratikvar[no]:=true; yaratikx[no]:=baslangic; yaratikyon[no]:=sagyon[no]; end; inc(counter[no]);if counter[no]>3 then //her 3 döngüde bir sprite karesi değiştirlir begin counter[no]:=0; inc(kareno[no]);if kareno[no]=(karesayisi[no] div 2) then kareno[no]:=0; //sprite'ın kare no'su değiştirilerek animasyon yapılır end; inc(yaratikx[no],artis[no]); if (yaratikx[no]<karakterx1) or (yaratikx[no]>karakterx2) then// yaratık verilen koordinat // ların dışına çıkarsa begin donus[no]:=not donus[no]; artis[no]:=-artis[no]; if donus[no]=true then yaratikyon[no]:=solyon[no] else yaratikyon[no]:=sagyon[no]; end; DGCScreen1.Back.Draw(xpos+yaratikx[no],karaktery,DGCScreen1.Images[kareno[no]+yaratikyon[no]],True); end;
procedure TForm1.DGCScreen1Flip(Sender: TObject);// Ana Döngü - bütün ana kontroller burada yapılır begin If ShowTitle then ShowIntro; If GameOver then begin Exit; end; dusebilir:=true; // aksi bir durum olmadığı sürece yaratık aşağı düşer CheckKeyboard; // bir tuşa basılıp basılmadığı kontrol edilir UpdateTrack;// arkaplanın değişimi ayarlanır checkbottom; //karakterin ayağının altı devamlı kontrol edilir DGCScreen1.DrawMap(DGCScreen1.Back,0,0,0,xPos,0,false);//arkaplan yeniden çizilir if speed=0 then anim:=yon+8; // ana karakter duruyorken kare no sabittir cicekanimate(1,xpos+500,188); cicekanimate(2,xpos+800,188); cicekanimate(3,xpos+1200,188); cicekanimate(4,xpos+2000,188); yaratikgoster(1,100,200,200,100); yaratikgoster(2,380,470,120,380); yaratikgoster(3,720,880,200,800); yaratikgoster(4,720,880,200,850); yaratikgoster(5,2140,2275,200,2160); DGCScreen1.Back.Draw(px,py,DGCScreen1.Images[anim],True);// ana karakter burada çiziliyor end; Procedure Tform1.UpdateTrack; begin Inc(xPos,kayma); if xPos < -2880 then xPos := -2880; If xPos > 0 then xPos := 0; If (xPos = 0) or (xPos = -2880) then kayma := 0; end; procedure TForm1.checkup;//ana karakterin kafasının üstünü kontrol eder begin yukari1:=false;yukari2:=false; yukari1:=CheckupTile(px+14,Py+2); yukari2:=CheckupTile(px+4,Py+2); if (yukari1) and (yukari2) then yukselebilir:=true; end; function TForm1.CheckUpTile(X,Y: Integer):boolean; var tile : TDGCMapPos; durum : boolean; begin dur:=false;durum:=false; tile := DGCScreen1.GetTileDrawn(X,Y); case tile.Tile of 0..12,14..19: begin dur:=true; durum:=false; sira1:=27; dusebilir:=true; yukselebilir:=false; yerde:=false; end; 13: begin durum:=true; if (yukaritus=false) and (yerde) then yerde:=false; end; end; checkuptile:=durum; end; procedure TForm1.checkbottom;// ana karakterin ayağının altını kontrol eder begin dusus1:=false;dusus2:=false; dusus1:=CheckBottomTile(px+14,Py+30); dusus2:=CheckBottomTile(px+4,Py+30); if (dusus1) and (dusus2) and (dusebilir) then begin if sira1<53 then inc(sira1); inc(py,yukselis[sira1]); speed:=0; yukselebilir:=false; end; end; function TForm1.CheckBottomTile(X,Y: Integer):boolean; var tile : TDGCMapPos; durum : boolean; begin dur:=false;durum:=false; tile := DGCScreen1.GetTileDrawn(X,Y); case tile.Tile of 0..12,14..19: begin dur:=true; durum:=false; sira:=0;sira1:=27; py:=(y div 16)*16-30; yerde:=true; if yukaritus=false then yukselebilir:=true else yukselebilir:=false; havadadurus:=false; end; 13: begin durum:=true; yerde:=false; end; end; checkbottomtile:=durum; end; procedure TForm1.checkleft; begin dur:=false; durus1:=false;durus2:=false; durus1:=CheckTile(px-2,Py+5 ); durus2:=CheckTile(px-2,Py+18); durus3:=CheckTile(px-2,Py+28); if (durus1) and (durus2) and (durus3) then Inc(xPos,kayma); if xPos < -2880 then xPos := -2880; If xPos > 0 then xPos := 0; If (xPos = 0) or (xPos = -2880) then kayma := 0; end; procedure Tform1.checkright; begin dur:=false; durus1:=false;durus2:=false; durus1:=CheckTile(px+20,Py+5 ); durus2:=CheckTile(px+20,Py+18); durus3:=CheckTile(px+20,Py+28); if (durus1) and (durus2) and (durus3) then Inc(xPos,kayma); if xPos < -2880 then xPos := -2880; If xPos > 0 then xPos := 0; If (xPos = 0) or (xPos = -2880) then kayma := 0; end; Function TForm1.CheckTile(X,Y: Integer):boolean; var tile : TDGCMapPos; begin tile := DGCScreen1.GetTileDrawn(X,Y); case tile.Tile of 01..12,14..19: begin dur:=true; if yukaritus=false then sira:=0; end; end; checktile:=dur; end; procedure TForm1.Animate; begin inc(animcount);if animcount>3 then begin animcount:=0; If Speed <0 then AnimDir := 1; If Speed >0 then AnimDir := -1; inc(anim,AnimDir); If anim < yon then anim := 6+yon; If anim > 6+yon then anim := yon; end; end; Procedure tform1.yuksel(a:integer); begin inc(py,yukselis[a]); end; procedure TForm1.CheckKeyboard; begin kayma:=0; speed:=0; If DGCScreen1.KeyDown(VK_Right) then begin yon:=0; CheckRight; if dur=false then begin inc(px,hiz); if px>250 then begin kayma:=-hiz; px:=250;Speed:=-hiz; if yerde=true then animate; DGCScreen1.DrawMap(DGCScreen1.Back,0,0,0,xPos,0,false); end else begin speed:=-hiz;animate;end; end; end; If DGCScreen1.KeyDown(VK_Left) then begin yon:=11; checkleft; if dur=false then begin dec(px,hiz); if px<50 then begin kayma:=hiz; px:=50;Speed:=hiz; if yerde=true then animate; DGCScreen1.DrawMap(DGCScreen1.Back,0,0,0,xPos,0,false); end else begin speed:=hiz;animate;end; end; end; If DGCScreen1.KeyDown(VK_Up)then begin if yukselebilir then begin if sira<53 then inc(sira); anim:=yon+10;speed:=hiz; yukaritus:=true; dusebilir:=false; yuksel(sira); havada:=true; checkup; end else dusebilir:=true; end else begin yukaritus:=false; if havada then begin if sira>27 then sira1:=sira else sira1:=27; end; havada:=false; end; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin If Key = #27 then begin Quit := True; AnaMenuyeDon; end; if (key<>'') and (ShowTitle) then ShowTitle := Not ShowTitle; end; Kartal Turgut Kartaltr@superonline.com - mr_eagle@hotmail.com
|