Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Video igre u Delphiu?

[es] :: Pascal / Delphi / Kylix :: Video igre u Delphiu?

Strane: < .. 1 2 3 4

[ Pregleda: 15152 | Odgovora: 63 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.134.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?04.05.2007. u 15:20 - pre 206 meseci
Na events od forme nisam nasao OnIdle event? Nema ga!

 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
212.200.34.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?04.05.2007. u 16:25 - pre 206 meseci
OnIdle je event aplikacije, a ne forme.

Evo... nemam instaliran Delphi, ali mozes da upotrebis ovaj kod koji sam napisao u Lazarus-u:
Code:
unit MainUnit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls;

type

  { TVector2D }
  
  TVector2D = record
    X, Y: Double;
  end;

  { TfrmMain }

  TfrmMain = class(TForm)
    shpCircle: TShape;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: char);
  private
    { private declarations }
    Position2D: TVector2D;
    Speed2D: TVector2D;
    LastTime: Int64;
    procedure AppIdle(Sender: TObject; var Done: Boolean);
    procedure RenderScene(DeltaTime: Double);
  public
    { public declarations }
  end; 

var
  frmMain: TfrmMain;

implementation

uses
  dos;

{ TfrmMain }

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
  
  Position2D.X := ClientWidth / 2;
  Position2D.Y := ClientHeight / 2;
  
  Speed2D.X := Random(100) + 100;
  Speed2D.Y := Random(100) + 100;
  
  LastTime := GetMsCount;

  Application.OnIdle := @AppIdle;
end;

procedure TfrmMain.FormKeyPress(Sender: TObject; var Key: char);
begin
  if Key = #27 then
    Application.Terminate;
end;

procedure TfrmMain.AppIdle(Sender: TObject; var Done: Boolean);
var
  NewTime: Int64;
begin
  NewTime := GetMsCount;
  RenderScene((NewTime - LastTime) / 1000);
  LastTime := NewTime;
  
  Done := False;
end;

procedure TfrmMain.RenderScene(DeltaTime: Double);
begin
  Position2D.X := Position2D.X + Speed2D.X * DeltaTime;
  Position2D.Y := Position2D.Y + Speed2D.Y * DeltaTime;
  
  if Position2D.X > (ClientWidth - shpCircle.Width / 2) then
  begin
    Position2D.X := ClientWidth - shpCircle.Width / 2;
    Speed2D.X := -Random(100) - 100;
  end;

  if Position2D.X < (shpCircle.Width / 2) then
  begin
    Position2D.X := shpCircle.Width / 2;
    Speed2D.X := Random(100) + 100;
  end;

  if Position2D.Y > (ClientHeight - shpCircle.Height / 2) then
  begin
    Position2D.Y := ClientHeight - shpCircle.Height / 2;
    Speed2D.Y := -Random(100) - 100;
  end;

  if Position2D.Y < (shpCircle.Height / 2) then
  begin
    Position2D.Y := shpCircle.Height / 2;
    Speed2D.Y := Random(100) + 100;
  end;
  
  shpCircle.Left := Trunc(Position2D.X - shpCircle.Width / 2);
  shpCircle.Top := Trunc(Position2D.Y - shpCircle.Height / 2);
end;

initialization
  {$I mainunit.lrs}

end.

 
Odgovor na temu

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.179.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?04.05.2007. u 17:55 - pre 206 meseci
Bravo Srki Care!!!!

Hvala ti na kodu!

Samo jedno pitanje kako meni treba da izgleda interfejs i imena komponenti da bi se slagao sa kodom?

Kod mi nije bas najjasniji to ti moram priznati-ja na Delphiu radim tek 3 meseca.
Koliko sam ja shvatio radi se o pomeranju nekog kruga (ispravi me ako gresim).

Tvoj Kod je za mene babaroga!!

Pogledaj moj kod (cisto radi uporedjivanja) za kretanje i sudaranje crvenog objekta sa republickog takmicenja!


Code:

procedure TForm1.TredTimer(Sender: TObject);
begin
if game_=true then
begin
   if Sdole1=true then
   begin
      if Fred1.Top <512 then Fred1.Top:=Fred1.Top+1
      else Sdole1:=false;
   end
   else
   begin
    if Fred1.Top >416 then Fred1.top:=Fred1.Top-1
    else  Sdole1:=true;
   end;
               if fred1.visible=true then
               begin
   if (bl1.left+25>Fred1.left) and (bl1.left<Fred1.left+Fred1.Width) and
      (bl1.Top+25>Fred1.Top) and (bl1.top<Fred1.Top+Fred1.Height) then
begin
     bl1.Left:=832;
     bl1.Top:=16;
     live:=live-1;
     bl2.Left:=832;
     bl3.Left:=832;
     bl2.Top:=16;
     bl3.Top:=16;
     bl4.Left:=832;
     bl4.Top:=16;
end;
end;


Hvala na trudu i pisanju koda!
 
Odgovor na temu

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.98.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?04.05.2007. u 21:40 - pre 206 meseci
Srki jos jednom hvala za kod!

Hvala vam svima na pomoci evo napravio sam jedan mali demo igre i uspeo sam da namestim da se tenkic krece na arowkeys preko virtual coda i uspeo sam da namestim i da puca.
Resio sam seckanje tako sto sam ispod stavio panel.

Samo ima jedan problem.
Kada se tenk krece i kada pritisne space i ispali metak onda zastane pa onda mora ponovo da se klikne taster da bi se ponovo kretao.

Kako vam se cini?
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?04.05.2007. u 22:28 - pre 206 meseci
Treba da imas formu i na njoj jedan TShape objekat koji se zove shpCircle. Velicine i pozicoje forme i shpCircle uopste nisu bitne, program ce sam da se pobrine za sve. U Delphi-u jedino ne treba da koristis dos unit, a umesto GetMsCount koristi GetTickCount. Delphi ce sam ukljuciti sve unit-e koji su mu potrebni za kompajliranje programa.

Reci sta ti nije jasno pa cu probati da ti objasnim... kod bi trebalo da je bas jako jednostavan.
 
Odgovor na temu

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.199.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?05.05.2007. u 08:54 - pre 206 meseci
Izvini sto te gnjavim Srki i hvala ti sto hoces da mi objasnis tvoj code.
Mislim da si primetio da ti ovde imas posla sa pocetnikom!

Evo ovaj deo mi uopste nije jasan?

Hvala na saradnji!

Code:


procedure TfrmMain.AppIdle(Sender: TObject; var Done: Boolean);
var
  NewTime: Int64;
begin
  NewTime := GetMsCount;
  RenderScene((NewTime - LastTime) / 1000);
  LastTime := NewTime;
  
  Done := False;
end



Jesi li pogledao onaj fajl "Pucanje" u mojoj prosloj poruci Jer bi znao kako da resis onaj problem sto tenk uvek zastane kad puca?

Thank's for your Help!
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
212.200.34.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?05.05.2007. u 11:02 - pre 206 meseci
Nakuckah ovo nabrzaka na poslu pa vidi kako ide. Kad se vratim kuci, objasnicu ti deo koda koji ti nije jasan.

BTW: program je radjen u Lazarusu, ali ga je lako prevesti na Delphi.
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?05.05.2007. u 12:39 - pre 206 meseci
Citat:
Jesi li pogledao onaj fajl "Pucanje" u mojoj prosloj poruci Jer bi znao kako da resis onaj problem sto tenk uvek zastane kad puca?

Ako zelis da ti neko pomogne oko problema na koji si naisao, izvrsni fajl nista ili vrlo malo znaci onome ko trazi gde si pogresio. Postuj kod programa kao sto ja radim i onda mozemo da vidimo sta radis pogresno.
Code:
procedure TfrmMain.AppIdle(Sender: TObject; var Done: Boolean);
var
  NewTime: Int64;
begin
  NewTime := GetMsCount;
  RenderScene((NewTime - LastTime) / 1000);
  LastTime := NewTime;
  
  Done := False;
end;

Ovako... na pocetku programa u LastTime uzimamo vreme u milisekundama koje cemo koristiti za racunanje proteklog vremena prilikom iscrtavanja. Svaki put kada se pozove AppIdle funkcija uzimamo novo vreme u milisekundama, zatim racunamo razliku izmedju vremena koje smo ranije uzeli i ovog novog. Posto su vremena u milisekundama, kada ih podelimo sa 1000 dobijemo vreme u sekundama. Pozivamo funkciju RenderScene i kao parametar joj dajemo vreme u sekundama koje je proslo od kad smo je poslednji put zvali tako da zna koliko treba da pomeri objekte. Na kraju u LastTime ubacujemo novo vreme jer je sada ono vec staro :)

Nadam se da je bilo jasno.
 
Odgovor na temu

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.237.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?05.05.2007. u 12:57 - pre 206 meseci
Jasno hvala ti.
Code cu ti poslati kada dodjem kuci!
Ovde ga trenutno nemam!

Sta radi RenderScene?
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?05.05.2007. u 13:12 - pre 206 meseci
Pise u kodu sta radi
Code:
procedure TfrmMain.RenderScene(DeltaTime: Double);
begin
  Position2D.X := Position2D.X + Speed2D.X * DeltaTime;
  Position2D.Y := Position2D.Y + Speed2D.Y * DeltaTime;
  
  if Position2D.X > (ClientWidth - shpCircle.Width / 2) then
  begin
    Position2D.X := ClientWidth - shpCircle.Width / 2;
    Speed2D.X := -Random(100) - 100;
  end;

  if Position2D.X < (shpCircle.Width / 2) then
  begin
    Position2D.X := shpCircle.Width / 2;
    Speed2D.X := Random(100) + 100;
  end;

  if Position2D.Y > (ClientHeight - shpCircle.Height / 2) then
  begin
    Position2D.Y := ClientHeight - shpCircle.Height / 2;
    Speed2D.Y := -Random(100) - 100;
  end;

  if Position2D.Y < (shpCircle.Height / 2) then
  begin
    Position2D.Y := shpCircle.Height / 2;
    Speed2D.Y := Random(100) + 100;
  end;
  
  shpCircle.Left := Trunc(Position2D.X - shpCircle.Width / 2);
  shpCircle.Top := Trunc(Position2D.Y - shpCircle.Height / 2);
end;

Pomera shpCircle... samo to i nista vise
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
91.150.120.*



+31 Profil

icon Re: Video igre u Delphiu?05.05.2007. u 13:12 - pre 206 meseci
Iscrtava ti narednu scenu.Novi polozaj tenka metka i.t.d.
 
Odgovor na temu

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.35.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?05.05.2007. u 14:54 - pre 206 meseci
Ovo ti Srki kod (malo je dugacak) ali ti ces se sigurno snaci
Nisam znao koji deo da stavim pa sam ti poslao ceo!

Code:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    gt1: TImage;
    gt2: TImage;
    gt3: TImage;
    gt4: TImage;
    Tgtright: TTimer;
    Tgtup: TTimer;
    Tgtdown: TTimer;
    Tgtleft: TTimer;
    Tbgt1: TTimer;
    Tbgt2: TTimer;
    Tbgt3: TTimer;
    Tbgt4: TTimer;
    gbull: TImage;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);

    procedure Tbgt1Timer(Sender: TObject);
    procedure Tbgt3Timer(Sender: TObject);
    procedure Tbgt2Timer(Sender: TObject);
    procedure Tbgt4Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);


  private
    { Private declarations }
  public
  gtup:boolean;
  gtdown:boolean;
  gtleft:boolean;
  gtright:boolean;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
gt2.Left:=gt1.Left;
gt2.top:=gt1.top;

gt3.Left:=gt1.Left;
gt3.top:=gt1.top;

gt4.Left:=gt1.Left;
gt4.top:=gt1.top;

if key=VK_SPACE then
begin
if gt1.visible=true then
begin
gbull.left:=gt1.left+12;
gbull.top:=gt1.top;
Tbgt1.enabled:=true;
Tbgt2.enabled:=false;
Tbgt3.enabled:=false;
Tbgt4.enabled:=false;
end;

if gt2.visible=true then
begin
gbull.left:=gt1.left+25;
gbull.top:=gt1.top+12;
Tbgt2.enabled:=true;
Tbgt1.enabled:=false;
Tbgt3.enabled:=false;
Tbgt4.enabled:=false;
end;

if gt3.visible=true then
begin
gbull.left:=gt1.left+12;
gbull.top:=gt1.top+25;
Tbgt3.enabled:=true;
Tbgt2.enabled:=false;
Tbgt1.enabled:=false;
Tbgt4.enabled:=false;
end;

if gt4.visible=true then
begin
gbull.left:=gt1.left;
gbull.top:=gt1.top+12;
Tbgt4.enabled:=true;
Tbgt3.enabled:=false;
Tbgt2.enabled:=false;
Tbgt1.enabled:=false;
end;
end;


if key=VK_UP then
begin
gt1.top:=gt1.Top-4;
gtup:=true;
gtdown:=false;
gtleft:=false;
gtright:=false;
end;
if key=VK_DOWN then
begin
gt1.Top:=gt1.top+4;
gtup:=false;
gtdown:=true;
gtleft:=false;
gtright:=false;
end;
if key=VK_LEFT then
begin
gt1.left:=gt1.left-4;
gtup:=false;
gtdown:=false;
gtleft:=true;
gtright:=false;
  end;
if key=VK_RIGHT then
  begin
  gt1.left:=gt1.left+4;
gtup:=false;
gtdown:=false;
gtleft:=false;
gtright:=true;
  end;
////////////////////////////////////////////////////////////////////////////////
if gtup=true then
begin
gt1.Visible:=true;
gt2.Visible:=false;
gt3.Visible:=false;
gt4.Visible:=false;

end;

if gtleft=true then
begin
gt1.Visible:=false;
gt2.Visible:=false;
gt3.Visible:=false;
gt4.Visible:=true;


end;

if gtdown=true then
begin
gt1.Visible:=false;
gt2.Visible:=false;
gt3.Visible:=true;
gt4.Visible:=false;

end;

if gtright=true then
begin
gt1.Visible:=false;
gt2.Visible:=true;
gt3.Visible:=false;
gt4.Visible:=false;

end;
end;



procedure TForm1.Tbgt1Timer(Sender: TObject);
begin
gbull.top:=gbull.top-6;
gbull.Visible:=true;
end;

procedure TForm1.Tbgt3Timer(Sender: TObject);
begin
gbull.top:=gbull.top+6;
gbull.Visible:=true;
end;

procedure TForm1.Tbgt2Timer(Sender: TObject);
begin
gbull.left:=gbull.left+6;
gbull.Visible:=true;
end;

procedure TForm1.Tbgt4Timer(Sender: TObject);
begin
gbull.left:=gbull.left-6;
gbull.Visible:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
gt1.visible:=true;
gt2.visible:=false;
gt3.visible:=false;
gt4.visible:=false;
gbull.Visible:=false;
end;

end.


U cemu je problem?
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?05.05.2007. u 17:06 - pre 206 meseci
OnKeyDown event se poziva dok drzis taster pritisnut. Dakle... drzis desno... i imas OnKeyDown(desno), OnKeyDown(desno), OnKeyDown(desno), OnKeyDown(desno),... ne pustas desno, ali pritisnes i space OnKeyDown pocinje da se poziva za space OnKeyDown(space), OnKeyDown(space), OnKeyDown(space),... pustis space u dobijes OnKeyUp(space)... ti i dalje drzis desno, ali nema vise OnKeyDown(desno) jer OnKeyDown tj. WM_KEYDOWN poruka tako radi. Cim pustis bilokoji taster nema vise OnKeyDown. Posto se tebi tenk pomera bas u OnKeyDown eventu posle pritiska na space kretanje prestaje jer vise nema OnKeyDown poruke.

Pogledaj kako sam ja to uradio (ni to nije najsrecnije resenje, ali je bolje od tvog) pa ces videti razliku.

BTW da sam na tvom mestu, krenuo bih da pisem program iz pocetka jer si ga iskomplikovao bez potrebe.
 
Odgovor na temu

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.70.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?06.05.2007. u 11:14 - pre 206 meseci
Nisam bas razumeo u cemu sam pogresio problem nije u kretanju nego u pucanju kako da napravim da puca i da se krece u isto vreme.On kad pukne odma prestane sa kretanjem-kako to da popravim?

 
Odgovor na temu

bojan21
Bojan Zukic
Beograd

Član broj: 101113
Poruke: 251
*.cpe.vektor.net.



+6 Profil

icon Re: Video igre u Delphiu?06.05.2007. u 11:53 - pre 206 meseci
Pa Srki ti je upravo to i objasnio! Cim ispalis raketu (znaci, pritisnes SPACE) OnKeyDown za gore (dole, levo, desno) se vise ne poziwa, jer je program primio poruku za OnKeyUp za SPACE! Posto ti pomeras tenkic na taj event, a event se vise ne poziva, nema ni kretanja tenkica! Kako sto je Srki rekao, ne koristi OnKeyDown za kretanje i pucanje! Pozdrav!
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?06.05.2007. u 13:43 - pre 206 meseci
Pogledaj kod koji sam poslao. U OnKeyXXXX eventima samo postavljaj flag koji ce prilikom iscrtavanja novog frejma da kaze programu da li treba da pomeri objekat ili ne. Ovako je dovoljno da dobijes samo jedan OnKeyDown event za npr. gore... onda postavis flag za kretanje na gore, kad crtas frejm vidis da je flag postavljen i pomeris objekat, itd... kad dobijes OnKeyUp za gore skines flag za kretanje i u sledecem iscrtavanju ne pomeras objekat.
 
Odgovor na temu

vladaboy93
Vladimir Makaric
Novi Sad

Član broj: 137777
Poruke: 376
*.73.eunet.yu.

Sajt: vladimirmakaric.110mb.com


Profil

icon Re: Video igre u Delphiu?07.05.2007. u 19:10 - pre 206 meseci
Izvini sto te ovo pitam znam da ce zvucati pocetnicko ali stacu kad sam pocetnik:
Sta je flag (znam da je zastava) ali verovatno ti mislis na nesto drugo?
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?07.05.2007. u 20:58 - pre 206 meseci
Flag... to je promenljiva :)
Uglavnom je to boolean ili integer promenljiva. U ovom slucaju flag treba da ti kaze da li da i gde da pomeras objekat ako treba. Posto moze da ima vise vrednost, tip bi mogao da bude integer. Kada je promenljiva koja ti predstavlja flag postavljena na 0 ti nemoj da pomeras objekat. Kada je postavljen na 1 onda ga pomeraj gore, kada je 2 onda dole i sl... Flag postavljas u OnKeyXXXX eventu. Kada se neki taster pritisne, ti proveris koji je i na osnovu toga postavis flag. Kada se taster otpusti, prvo proveris da li se otpustio taster koji je postavio flag (moguce je da si pritisnuo levo, pa gore, pa pustio levo... objekat i dalje treba da ide gore) i onda resetujes flag na 0. U tajmeru ili gde god vec updatujes objekte proveris u kom stanju se nalazi flag i na osnovu njega oderdjujes sta ces da radis.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Video igre u Delphiu?17.06.2007. u 14:17 - pre 204 meseci
Vlado The Boy, sta se desava sa igrom. Ne javljas se vec duze vreme?
 
Odgovor na temu

bojan21
Bojan Zukic
Beograd

Član broj: 101113
Poruke: 251
194.106.165.*



+6 Profil

icon Re: Video igre u Delphiu?17.06.2007. u 14:46 - pre 204 meseci
Sigurno sprema neshto extra mega giga specijano pa nas drzi u neizvesnosti ;)!
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Video igre u Delphiu?

Strane: < .. 1 2 3 4

[ Pregleda: 15152 | Odgovora: 63 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.