Aplicație Win 8 în 10 zile – #2 design și logică

Ieri am făcut partea de navigare, am populat prima pagină a aplicației și ne-am jucat puțin cu trimiterea de parametrii când navigăm. Azi vom vorbi despre pagina principală a aplicației noastrea, cea în care utilizatorul va petrece cel mai mult timp:  NewGame.xaml

Best practices

Înainte să ne apucăm de design trebuie să știm cum este cel mai bine să construim o aplicație, unde să avem întrebările și unde să avem variantele de răspuns. Conform imaginii de mai jos (luată de pe msdn), pentru genul de aplicații în care interacționăm, cel mai bine este să avem partea de interacțiune în josul paginii și partea de citit mai sus.31XAMLOcclusion

Astfel că în NewGame.xaml vom împărți gridul/pagina în două părți, partea superioară unde vom adresa întrebarea și partea de jos unde vom avea cele 4 variante de răspuns. La rândul lor, pentru o poziționare mai exactă, am pus fiecare din cele 4 butoane într-un grid și le-am centrat pe centru. Aplicația noastră, până în prezent, arată așa:

screenshot_12092013_193828

Codul XAML din spate este următorul:

În privința sistemului de scor încă nu m-am hotărât și probabil, dacă e ceva de adăugat, va fi adăugat mâine.

Generăm întrebările

Ieri, la metoda OnNavigatedTo am creat metoda care generază întrebările pe care urmează să le folosim, dar nu am populat-o cu nimic. Ca să generăm întrebăril am nevoie de clasa question care arată cam așa:

Pentru fiecare metoda creată în ziua precedentă (GenerateIst(), GenereateGeo() etc.) o să am nevoie să generez cele 40 de întrebări. Întrebările au fost făcute împreună cu echipa MSP din Universitatea Româno-Americană. Template-ul arată așa:

Desigur că în afara blocului ar trebui să declar array-ul meu de tip question care, pentru moment, are 40 de întrebări.

question[40] q = new question[40];

Shuffle la variantele de răspuns

A mai rămas o metodă netrată pe care am început-o în prima zi, GeneratePuzzle(); și răspunsul la eventul de Tap în cazul în care aleg o variantă.

Logica mea este următoarea: am array-ul meu cu cele 40 de întrebări pregătite mai sus, o să am nevoie de un random ca să selectez întrebarea mea și ca să fac un shuffle variantelor de răspuns.

Vom avea nevoie de:

Random rand = new Random();

O să îmi creez o varianta globală vCorect de tip int în care o să stochez varianta corectă a întrebării.

Metoda mea, GeneratePuzzle(), va arăta sub forma următoare:

What does this does?

După fiecare generare de set de întrebări (Istorie, Geografie, IT etc..). Primul random, cel care îi este atribuit lui va fi cel care selectează întrebarea și vCorect-ul îl vom folosi pentru a reține care este răspunsul corect. Am creat de-asemenea un switch cu scopul de a da ceva shuffle variantelor de răspuns. Dacă mai țineți minte, varianta corectă în constructorul nostru este mereu varianta A.

Vom rula aplicația noastră și o să vedem că puzzle-urile se generează foarte bine, dar dacă încercăm să alegem o variantă de răspuns corectă, nu se întâmplă nimic. Chiar mai mult, am descoperit un mic bug: dacă dăm tap pe butonul de back jocul crashuiește. În locul unde avem acel unhadnled error o să punem doar un try-catch pentru a rezolva temporar problema și vom reveni mai târziu cu o soluție completă.

Răspuns corect/greșit

Urmează să adăugăm handle-ul pentru răspunsul corect sau greșit. Pentru a face asta ne ducem la metoda var_tap și îi adăugăm următoarea bucată de cod:

 

Ideea este destul de simplă:
Fac switch ca să văd care buton este de fapt cel care a fost apăsat și daca vCorect (care poate lua valori între 0 și 3) corespunde cu butonul meu (btn 1 cu vCorect=0, btn 2 cu vCorect=1 etc) atunci apelez metoda Corect(), else apelez metode Gresit().

Metodele Corect() și Gresit() o să le lăsăm pentru moment să facă lucruri de simple: Să îmi afișeze un mesaj și să îmi genereze următoarea întrebare.

Nu uitați să îi adăugați using-ul corect în atent:
using Windows.UI.Popups;

Gata aplicația pentru ziua de azi: navigarea e gata, generează întrebări în funcție de categoria mea, face shuffle la cele 4 variante de răspuns și mă atenționează dacă am răspuns corect sau greșit! Mâine urmează să implementăm un sistem care să țină cont de punctajul meu și, eventual, câteva timere pentru a spori dificultatea jocului.




Leave a Comment

Blog

Recent posts