Delphix-4

www.halukbayram.com

                                                    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

     

  

              bilgi@halukbayram.com