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

Snake game in C#

[es] :: .NET :: Snake game in C#

[ Pregleda: 2366 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dacky1984

Član broj: 234888
Poruke: 2
*.dynamic.sbb.rs.



Profil

icon Snake game in C#09.10.2009. u 01:18 - pre 176 meseci
Pozdrav svima. Imam jedno pitanje vise je problem. Ovako, interesuje me, hteo bih da programiram igricu Snake u C# recimo (Java).
E sad, problem je u tome sto ne zelim da ceo kod ispisem u Main() { ...} vec bih zeleo da to malo bolje organizujem pomocu
odgovarajucih klasa tipa Snake, Field, itd... medjutim problem je u tome sto ne znam kako da apstrakujem stvari tj.
kako da formiram pomenute klase mislim koja polja i metode da sadrze itd...

Ako neko zna neka pomaze. Hvala svima !!!
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Snake game in C#09.10.2009. u 09:22 - pre 176 meseci
Pa evo onako iz prve:

Za početak svega glavna srž igre bi ti bila glavna "game" petlja. Ovo možeš izvesti na 2 načina:



1. da napraviš pravu petlju, kojoj je smisao donekle sljedeći:

Code:

while(igra_je_pokrenuta)
{
     Proračunaj logiku igre;
     PodesiParametre;
     Update-uj grafiku;
     Update-uj zvuk;
}

Ovo je samo neki pseudo-kod, ali nadam se da vidiš smisao. E sad, u .NET-u (C#) ovo bi malo bio problem uraditi, jer naravno sve želiš da bude u okviru tvog prozora (hoću da kažem da ćeš vjerovatno koristiti WinForms). Filozofija UI-a ne dopušta da ti se sve uvijek vrti samo u tvojoj petlji, jer onda ne ostaje ništa proc. vremena da se osvježi ekran, itd... Kao efekat bi dobio unresponsive window, i vjerovatno End Task ...
Za rješenje moraš razumjeti jednu stvar oko ove same petlje. Recimo, ona uopšte ne mora da se pali kad god može. Dovoljno je da to bude nekih 10-ak puta u sekundi recimo. Ako se za svako to izvršavanje tijela petlje oduzme 5ms, to znači da ti ostaje 950ms slobodno. Zbog toga, pokušaj konstruisati tu petlju kao nešto:

Code:

DateTime startTime = DateTime.Now;

while(igra_je_pokrenuta)
{
     if ((DateTime.Now - startTime).Miliseconds < 100)
     {
          Application.DoEvents()          <---- ovime rješavaš problem osvježavanja ekrana
          continue;
     }

     Proračunaj logiku igre;
     PodesiParametre;
     Update-uj grafiku;
     Update-uj zvuk;

     startTime = DateTime.Now;
}



I ovo je naravno samo pseudokod, ideja je bitna.



2. da iskoristiš timer; za ovako jednostavnu igru, najbolje Windows.Forms.Timer

U timeru slična logika, svakih x ms odradi logiku igre.



Ostatak igre (objekti) što te muče bi se mogli posložiti ovako:
- klasa Game bi u sebi imala sve globalno važne podatke / metode za igru, recimo grid od n*n polja na kojem bi sve računao, crtao itd... E sad, pošto sve to crtaš na ekran, i taj grid ne bi bila neka bezveze 2D matrica, nego bi bila posebna SnakeGrid custom kontrola, koja bi se znala nacrtati na ekran, a u kojoj bi bila matrica sa podacima itd...
- svako polje u grid-u bi mogao doslovce biti objekat Field, koji bu u sebi sadržavao podatak da li na tome polju ima zid, neki bonus, ili šta već...
- Snake klasa (kao sama zmija) bi sadržavala niz prethodnih "kockica" koje je zauzimala (a ovaj niz bi se konstantno update-ovao na neki način, naravno prema smislu same Snake igre)

itd...

Ovo je sve samo neki orjentirni početak. Za tačno znanje koliko klasa i metoda, i gdje ćeš ih postaviti, morala bi se napisati cijela igra... Jednostavno, kreni korak po korak ...
My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

Dacky1984

Član broj: 234888
Poruke: 2
*.dynamic.sbb.rs.



Profil

icon Re: Snake game in C#09.10.2009. u 13:51 - pre 176 meseci
Hvala puno na brzom i efikasnom odgovoru. Mnogo si mi pomogao, i jos jednom svaka cast za objasnjenje : kratko ali jasno !!!
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Snake game in C#09.10.2009. u 14:05 - pre 176 meseci
Ako ti treba još pojašnjenja, dobar izbor je ili:
- nabavak knjige za game programiranje
- source code neke već napravljene igre (a ovoga imaš hrpu na Internetu - za sva područja)

Možda bi ti bilo zanimljivije da ovu igru pokušaš napraviti u J2ME (Micro Edition za mobitele). Princip je skoro identičan, osim razlika u jeziku / framework. Za grafiku bi imao AWT, a imao bi ujedno i dosta već gotovih funkcionalnosti u javax.microedition.lcdui.game paketu

Prednosti igre za mobitel su naravno jasne :))
My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

[es] :: .NET :: Snake game in C#

[ Pregleda: 2366 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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