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 ...