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

Jos jedna igra - klasicni tetris

[es] :: Pascal / Delphi / Kylix :: Jos jedna igra - klasicni tetris

Strane: 1 2 3 4 5

[ Pregleda: 14989 | Odgovora: 90 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_v!rus_
BGD

Član broj: 40451
Poruke: 313
213.244.208.*



+1 Profil

icon Jos jedna igra - klasicni tetris06.01.2005. u 20:30 - pre 234 meseci
Imate klasu TTetris(tetris.pas) i primer implementacije u TetrisTheGame.dpr
Pravio sam za maturski iz informatike jos davno...
Ideja je bila da se napravi tetris klasa nezavisna od implementacije (tekstualni, graficki, sa misem, tastaturom, dzojstikom, nebitno), vezba enkapsulacije...
Da mi nije trebao Read i Write ne bi koristio ni jedan unit...
Probajte i uzivajte...

Btw., ako vam se svidi i koristite ga preko 15 dana posaljite neki kes... ;)
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: Jos jedna igra - klasicni tetris06.01.2005. u 22:01 - pre 234 meseci
Lepa igra, nema sta :)
Sta mislis da li bi napravili dobru igru ako bi radili zajedno? I mozda jos neko? :)



 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
213.244.208.*



+1 Profil

icon Re: Jos jedna igra - klasicni tetris06.01.2005. u 22:04 - pre 234 meseci
Naravno!!!
Vec duzem vreme razmisljam o pravljenju jump'n'run igre u mariovskom stilu, ali ne polazi mi za rukom da napravim nesto korisno. Prosto me sramota sobzirom da zutaci vec 20-ak godina prosto "stancuju" slicne igre od 8-bitnih dana na ovamo, a ja nikako da maknem sa mrtve tacke...

Kakav bi bio osnovni mehanizam jedne takve igre, Npr.
Level->Timer
->PlayMap ->...
->Player
->NPC[] ->...
Kako implementirati "realnu" fiziku (inerciju, trenje, gravitaciju...) imam neke ideje ali..
Organizovati je kao tilove ili bas pixel-precise...

Svi koji su raspolozeni za cito teoretisnje na ove teme neka postuju ako imaju vremena, ili jos bolje, ako neki iole iskusniji delphijevci bi hteli da naprave nesto sl. drage volje bi se pridruzio...
 
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: Jos jedna igra - klasicni tetris06.01.2005. u 22:20 - pre 234 meseci
Za takvu igru je sasvim dovoljno koristiti tile nego neku precizniju tehniku za detektovanje sudara... mozda bi mogli da se koriste regioni, ne zauzimaju previse memorije, prilicno su brzi i PREEEEEEEEEEEEEETERANO ih je lako koristiti :)

Obozavam da pravim igre... trenutno pokusavam da napravim klon asteroid-a, ali nikako da nadjem vremena za to. Vise volim da citam forume i pomazem drugima :) Pogledaj na mom sajtu (geocities) da vidis kako za sad radi. Trenutno postoji neka da kazemo fizika za brodic i detekcija sudara za asteroide (igrac i dalje prolazi kroz njih i naravno jos uvek ne puca) :) Jedini problem je sto sam to radio u C++-u, a ne u Delphi-u.

Dakle... Mario style igra... tile based, simple phisyc, timer based, pure GDI (mozda GDI+), KeyUp+KeyDown input... mislim da je to sasvim dovoljno. Najteze od svega ce biti dizajniranje nivoa i crtanje :) To mi je uvek najteze :P I, da... uvek treba na pocetku znati sta ce sve moci da se radi u igri, a ne da se na pola puta neko seti "Hej... igrac bi mogao i da leti". Kad pocninjemo... sta pravimo? :P



 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
213.244.208.*



+1 Profil

icon Re: Jos jedna igra - klasicni tetris06.01.2005. u 22:26 - pre 234 meseci
Bas lepo sto hoces da se pridruzis!
Ajde posto mi devojka vec cupka ovde pola sata (oce da me vodi do hrama na spaljivanje badnjaka) napravicu nesto pa cu postovati...
Sto se tice tvog problema sa manjkom vremena, sve mi je jasno...
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
213.244.208.*



+1 Profil

icon Re: Jos jedna igra - klasicni tetris07.01.2005. u 15:05 - pre 234 meseci
Evo preliminarne (0.0.0.0.0.1:-) verzije engine-a za jump'n'run sa trenjem, inercijom i gravitacijom...
Ako uspem ovo da pojednostavim & poboljsam, sve ostaloce biti lakse.
Feel free to modify & post...
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: Jos jedna igra - klasicni tetris07.01.2005. u 16:26 - pre 234 meseci
Lepa fizikica za karaktera. Sasvim dovoljna za ovakav tip igre. Pad i slicne stvarcice nece biti tako tesko odraditi. Kada igrac "sidje" sa platforme samo postavimo inair na true i jumping na false i on ce poceti da pada, zar ne? :)
Poceo sam da pravim neke klase za tile i world. Za sad su vrlo nekorisne, ali cu ih prosirivati polako. Zanima me da li cemo crtati na Canvasu (forme, panela... slike... bilo cega)? Da li ce igrac biti velicine jednog tile-a ili ce imati proizvolju velicinu? Da li ce moci da se skroluje samo u jednom pravcu (kao u super mario na segi)? Da li treba da se predvidi i vertikalno i horizontalno skrolovanje? I... imao sam jos nesto da pitam, ali sam zaboravio :)
E, da... da li da koristimo property-e ili obicne funkcije za nase klase?



Prikačeni fajlovi
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
213.244.208.*



+1 Profil

icon Re: Jos jedna igra - klasicni tetris07.01.2005. u 17:57 - pre 234 meseci
Srki hvala na prilogu
Mislim da bi trebalo malo teoretisanja oko same mehanike...
Sto se tice koriscenja propertia, mislim da bi to samo komplikovalo stvari sobzirom
da pravimo igru i sve klase koje pravimo koristice se u toj igri, stoga mislim da bi bilo bolje kodirati obicne metode ali nikako direktno pristupati poljima (ali ipak foolproof-ovati metode,npr. provere granica pre upisivanja u matrice...)

Imao sam ideju (pogledaj prikaceni zip i u njemu klasu TWorld) sto se tice levelmape
da u stvari imamo 2 mape- jednu koja ce biti matrica Boolean-a i koja ce oznacavati kuda se igrac moze kretati (maska), a drugu koja ce sadrzati izgled nivoa (tako su su pravili one zidove kroz koje mozes proci, ima ih u svim platformskim igrama:-).

Nego ima jedan problem, prati pazljivo: Igrac se NE KRECE piksel po piksel uvek, nego samo u pocetku, kada ubrza dodje do 2-3 piksela po ticku. Sta se desava kad dodje do zida - odgovor: ne moze dalje da ide, naravno... Ali kako to implementirati?

Ako se koristi mehanizam sa PriorX i PriorY:
Igrac se krece brzinom od 2-3 piksela/tiku. Kad dodje do zida na X = 50 (igracX=48)
vrsi se provera nesto kao:

Code:

if not World.IsAvailable(IgracX + Vx, IgracY) then
  IgracX := PriorX
else
begin
  IgracX := IgracX + Vx;
  PriorX := IgracX;
end;


Sto znaci da ce u tom trenutku (IgracX = 48, Vx = 3) igrac se zakucati na X=48 iako je zid tek na 50! Kada ponovo krene, moci ce da pridje zidu do kraja zato sto se ubrzanje lagano povecava od 0 pa samim tim i IgracX se povecava za po piksel...
Kako ovo resiti?

Vidi attachment za ilustraciju problema...
Prikačeni fajlovi
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
213.244.208.*



+1 Profil

icon Re: Jos jedna igra - klasicni tetris07.01.2005. u 18:49 - pre 234 meseci
Imam resenje i problem:
Resenje: Koristiti 2 tajmera - jedan (brzi) za Tick a drugi (sporiji , 10ms) za iscrtavanje. U stvari interval drugog tajmera bi bio (1000/RefreshRate monitora) za najcistiji screen update + Doublebuffer;
Korisenjem brzeg tajmera za tick mogao bih da zadam MaxVel na 1 i time bi resio problem...
Jedino sto Delphijevi interni tajmeri nisu dovoljno precizni pri frekvenciji <10ms
(nisu nista brzi na <10 nego na 10)...
Negde sam video neke TThreadTimer-e, probacu da ih nadjem na netu pa cu probati sa njima. Cak i za 386 procesor vreme od 10ms je DUUUGO
(16MHz = ~16 000 000 instr/sec = 16 000 instr/1 ms, mnogo brate, pa i da sam pogresio 10x...) tako da verujem da cu naci precizniji timer...
 
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: Jos jedna igra - klasicni tetris07.01.2005. u 21:59 - pre 234 meseci
Ako budemo radili sa tile-ovima, a ne sa pixel-ima onda nema problema. Kada vidis da je igrac usao u tile koji sadrzi nesto kroz cega ne moze da se prodje samo postavis X igraca na levu ivicu, odnosno desnu tog tile-a (u zavisnosti sa koje strane je igrac usao u tile) ili Y na gornju odnosno donju ivicu i to je to. Tako cu uraditi cim budem nasao malo vremena.



 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.verat.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Jos jedna igra - klasicni tetris08.01.2005. u 18:49 - pre 234 meseci
evo mozda vam pomogne i ovo :)

Code:

//proverava da li je tacka unutar poligona
function PointInPolygon (const x,y : integer; aPolygon: array of TPoint): boolean;
var
  PolyHandle: hRgn;
begin
  PolyHandle := CreatePolygonRgn(aPolygon[0], Length(aPolygon), Winding);
  result     := PtInRegion(PolyHandle,X,Y);
  DeleteObject(PolyHandle);
end;


imao sam i funkciju koja proverava da li se dve linije presecaju i daje tacku gde je taj presek. Ceo dan je trazim, nikako da nadjem - ako nadjem, saljem!
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.verat.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Jos jedna igra - klasicni tetris08.01.2005. u 18:53 - pre 234 meseci
mozda pomogne (attach)

p.s. 'ocu credit :P
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Prikačeni fajlovi
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.verat.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Jos jedna igra - klasicni tetris08.01.2005. u 19:08 - pre 234 meseci
evo jos malo :)



:: ovaj kod odredjuje da li se linije presecaju ::
Code:

function Intersect(const x1,y1,x2,y2,x3,y3,x4,y4:Double):Boolean;
var UpperX,UpperY : Double;
    LowerX,LowerY : Double;
    Ax,Bx,Cx      : Double;
    Ay,By,Cy      : Double;
    D,F,E         : Double;
begin

Result := false;

Ax := x2 - x1;
Bx := x3 - x4;

if Ax < 0.0 then
begin
  LowerX := x2;
  UpperX := x1;
end
else
begin
  UpperX := x2;
  LowerX := x1;
end;

if Bx > 0.0 then
begin
   if (UpperX < x4) or (x3 < LowerX) then
    Exit;
end
else if (Upperx < x3) or (x4 < LowerX) then
   Exit;

Ay := y2 - y1;
By := y3 - y4;

if Ay < 0.0 then
begin
  LowerY := y2;
  UpperY := y1;
end
else
begin
  UpperY := y2;
  LowerY := y1;
end;

if By > 0.0 then
begin
   if (UpperY < y4) or (y3 < LowerY) then
     Exit;
end
else if (UpperY < y3) or (y4 < LowerY) then
   Exit;

Cx := x1 - x3;
Cy := y1 - y3;
d  := (By * Cx) - (Bx * Cy);
f  := (Ay * Bx) - (Ax * By);

if f > 0.0 then
begin
   if (d < 0.0) or (d > f) then
     Exit;
end
else if (d > 0.0) or  (d < f) then
   Exit;

e := (Ax * Cy) - (Ay * Cx);

if f > 0.0 then
begin
  if (e < 0.0) or (e > f) then
    Exit;
end
else if(e > 0.0) or (e < f) then
   Exit;

Result := true;

(*
//Simple method, yet not so accurate for certain situations:
Result := (Orientation(x1,y1,x2,y2,x3,y3) <> Orientation(x1,y1,x2,y2,x4,y4)) 
and
           (Orientation(x3,y3,x4,y4,x1,y1) <> 
Orientation(x3,y3,x4,y4,x2,y2));
*)

end;
(* End Of SegmentIntersect *)
 



:: ovaj kod odredjuje gde se presecaju (a samim tim i da li se presecaju) ::
Code:

Procedure IntersectPoint(x1,y1,x2,y2,x3,y3,x4,y4:Double; Var Nx,Ny:Double);
Var R           : Double;
    dx1,dx2,dx3 : Double;
    dy1,dy2,dy3 : Double;
Begin
 dx1 := x2 - x1;
 dx2 := x4 - x3;
 dx3 := x1 - x3;

 dy1 := y2 - y1;
 dy2 := y1 - y3;
 dy3 := y4 - y3;

 R:= dx1*dy3 - dy1*dx2;

 If R <> 0 Then
  Begin
   R  := (dy2*(x4-x3)-dx3*dy3)/R;
   Nx := x1 + R*dx1;
   Ny := y1 + R*dy1;
  End
  Else
   Begin
    If Collinear(x1,y1,x2,y2,x3,y3) Then
     Begin
      Nx := x3;
      Ny := y3;
     End
     Else
      Begin
       Nx := x4;
       Ny := y4;
      End;
   End;

End; 


Function Collinear(x1,y1,x2,y2,x3,y3:Double):Boolean;
Begin
 Result := (((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))=0);
End;
(* End Of Collinear *)


izvor: Google :P

i jos ovo (mrzi me da se regujem): http://codecentral.borland.com...ral/ccweb.exe/listing?id=18220

p.s. tip: http://www.delphipages.com/tips/index.cfm kao i http://www.delphiforfun.org/

p.p.s. Geometry Junkyard (trebalo bi pogledati, mada ja nisam :() - http://www.ics.uci.edu/~eppstein/junkyard/
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.verat.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Jos jedna igra - klasicni tetris08.01.2005. u 19:18 - pre 234 meseci
Citat:
_v!rus_: Imam resenje i problem:
Resenje: Koristiti 2 tajmera - jedan (brzi) za Tick a drugi (sporiji , 10ms) za iscrtavanje. U stvari interval drugog tajmera bi bio (1000/RefreshRate monitora) za najcistiji screen update + Doublebuffer;
Korisenjem brzeg tajmera za tick mogao bih da zadam MaxVel na 1 i time bi resio problem...
Jedino sto Delphijevi interni tajmeri nisu dovoljno precizni pri frekvenciji <10ms
(nisu nista brzi na <10 nego na 10)...
Negde sam video neke TThreadTimer-e, probacu da ih nadjem na netu pa cu probati sa njima. Cak i za 386 procesor vreme od 10ms je DUUUGO
(16MHz = ~16 000 000 instr/sec = 16 000 instr/1 ms, mnogo brate, pa i da sam pogresio 10x...) tako da verujem da cu naci precizniji timer...


Evo resenja! :)

Code:

procedure TForm1.Button1Click(Sender: TObject);
var atimer: THandle;
    alargeint: Int64;
begin
  atimer := CreateWaitableTimer(nil, false, 'MyTimer');
  if atimer <> 0 then begin
    try  // vreme ide u 100 ns intervalima (10000000 = 1 sekunda)
      // minus znaci relativno vreme ('od sad')
      alargeint := -(StrToInt64(Edit1.Text)); 
      SetWaitableTimer(atimer, alargeint, 0, nil, nil, false);
      WaitForSingleObject(atimer, infinite);
    finally
      CloseHandle(atimer);
    end;
    ShowMessage('Zavrsio je');
  end;
end;


inace, gornju proceduru sam nasao na http://www.elitesecurity.org/tema/58535
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.verat.net.



+1 Profil

icon Re: Jos jedna igra - klasicni tetris08.01.2005. u 19:57 - pre 234 meseci
Hvala JaHvramu za f-je (bices u Credits:-)...
Ionako sam uvek imao 2 iz matematike...

Update:
HvalaHvalaHvala i za Timer code, postovo si dok sam pisao ovo

E sad, sledi novi update src-a...
-Realnija fizika (JumpImpulse)
-(dzabe odradjeni) pixel-precise collision detect. & handling
-debug u glavnoj formi (kakav fancy naziv za obicnu glupost, ali ipak korisno, svi parametri TCharacter klase prikazani pomocu TLabels:-)

@Srki-Igrac moze da leti (genericki podrzano u kodu, 2 reda izmene)!
Pogledaj src(TCharacter) i komentare

TODO:
-!!!Mogucnost prekida skoka pustanjem jump tastera (za sada uvek skace svoj maximum). Kao i u skoro svim drugim platformama, iako jaaako nerealno, kao da ce neko u vazduhu "hej, dosta sam gore, hocu dole!", ali sta ces, tradicija je tradicija...
-Pisanje osnovnih tile-handling rutina, za sada samo za provere kolizije, bez grafike i sl., mozda neko kasnije baci neki IOLE KORISNI && FOOLPROOF && JEDNOSTAVNI DirectX wrapper, pa onda ni svemir nije granica...
-Sve ostalo :-(
Prikačeni fajlovi
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.verat.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Jos jedna igra - klasicni tetris08.01.2005. u 20:30 - pre 234 meseci
za tetris: Dodao sam ovo u tetristimer, kako bi loop-ovao 'ziku, medjutim malo zakoci (tj. pojavi se sat kod misa, ne znam da li zakoci igra):

Code:

 if MP.Mode <> mpPlaying then
 begin
   MP.Rewind;
   MP.Play;
 end;


A sad za engine: Meni se vise svidjalo u starom "engine"-u kad malo stisnes taster da malo skoci, ovako samo pipnes on se vine u visine... hm... ostalo jos nisam video

adiJos, za sad
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
213.244.208.*



+1 Profil

icon Re: Jos jedna igra - klasicni tetris09.01.2005. u 01:43 - pre 234 meseci
Videcemo vec nekako da sredimo taj jump...
Posle 2 sata cupanja slika iz emulatora, evo quick'n'dirty implementacije grafike glavnog lika! Po meni izgleda VEOMA interesantno && lepo se uklapa u fizicki model.
 
Odgovor na temu

Goran Nikolovski
Subotica

Član broj: 15308
Poruke: 247
*.suonline.net.

Sajt: goran-nikolovski.blogspot..


+1 Profil

icon Re: Jos jedna igra - klasicni tetris09.01.2005. u 17:13 - pre 234 meseci
Svakako je skok u prvom "enginu" realniji, ako malo stisnes malo skocis, ako jako stisnes taster jako i skocis.

Nadam se da ce biti nesto od ove igre ... bar jedan nivo. Mislim da bi bilo bolje, da ako igru ne pravite da bi zaradili lovu, otvorite novu temu, posto ime ove teme ne odgovara igri, i preko foruma objavljute napredak u pravljenu igrice. Ako zaglavite, neko ce se vec naci da Vam pomogne.

____________________________________________
PLADEON - Konvertor valuta
http://www.suonline.net/~nikolovski
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.verat.net.



+1 Profil

icon Re: Jos jedna igra - klasicni tetris09.01.2005. u 18:31 - pre 234 meseci
Hmmm, u pravu si.
Bilo bi lepo kad bi neko od administratora ES-a premestio sve (sem prvih par postova) u novu temu... Verovatno bi trebalo nakom da se obratim za ovo ali ne znam ni kome ni gde, od jako skoro sam na ES i forumima uopste. A sto se para tice pare nisu problem - para nema!

@Srki: Pominjao si ranije regione, zanima me ukratko sta su i kako se koriste?
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.verat.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Jos jedna igra - klasicni tetris09.01.2005. u 22:14 - pre 234 meseci
Obrati se Gojku :P

Regioni, ummmmmm... pa dao sam ja onu f-ju da se vidi da li je tacka u regionu... tako se koriste. A oni su neke oblasti :P
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Jos jedna igra - klasicni tetris

Strane: 1 2 3 4 5

[ Pregleda: 14989 | Odgovora: 90 ] > FB > Twit

Postavi temu Odgovori

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