Fő tartalom
Programozás
Tantárgy/kurzus: Programozás > 4. témakör
5. lecke: Memóriajáték készítéseMemóriajáték: Pontozás és győzelem
A memóriajátékunk majdnem készen van! Már csak a pontozás hiányzik belőle. A játékszabály szerint:
A játék célja, hogy minden kártya a képével felfelé fordítva legyen előttünk – tehát megtaláljunk minden összetartozó kártyát. A lehető legkevesebb próbálkozásból kell ezt összehoznunk; minél kevesebbszer próbálkozunk, annál magasabb pontszámot kapunk.
Hogyan követhetnénk nyomon, hogy hányszor próbálkoztunk? Egyáltalán, mi is számít próbálkozásnak? Az, ha felfordítunk két lapot, tehát, hogy hányszor léptünk be abba a blokkba, ami ezt a feltételt ellenőrzi:
flippedTiles.length === 2
. Hozzunk létre egy új globális változót, numTries
-t, és inkrementáljuk minden alkalommal, amikor a feltétel igaz.if (flippedTiles.length === 2) {
numTries++;
...
}
Jó lenne azt is tudni, hogy mikor van vége a játéknak (amikor a játékos az összes lapot felfordította). Ezt többféleképpen megoldhatjuk, így elsőre ez a kettő jutott eszembe:
- Végigjárjuk a kártyák tömbjét, és megnézzük az
isMatch
értékét mindre: ha mindtrue
, nyertünk. - Bevezetünk egy globális változót a megtalált párok számának vezetésére, és ezt ellenőrizgetjük: ha eléri az összes pár számát, nyertünk.
Hasonló dilemmával találkoztunk korábban is, és akkor azt az opciót választottuk, amivel nem kellett bejárnunk a teljes tömböt minden ellenőrzésnél. Maradjunk ennél a gyakorlatnál: legyen a második opció a nyerő.
Először inicializáljuk a
numMatches
változót 0 értékkel ott, ahol a játékban szereplő összes többi globális állapotváltozónknak értéket adunk:var numMatches = 0;
Ezután abban az
if
-blokkban, ahol ellenőrizzük, hogy a két felfordított kártya egy pár-e, inkrementáljuk (növeljük 1-el) az előbb inicializált numMatches
változót:if (flippedTiles[0].face === flippedTiles[1].face) {
flippedTiles[0].isMatch = true;
flippedTiles[1].isMatch = true;
flippedTiles.length = 0;
numMatches++;
}
A
draw
függvényünk végén megnézzük, hogy minden párt megtalált-e a játékos: ha igen, kiírhatunk valamilyen gratuláló üzenetet.if (numMatches === tiles.length/2) {
fill(0, 0, 0);
text("You found them all in " + numTries + " tries",
20, 360);
}
Alul kipróbálhatod, de lehet, beletelik egy kis időbe, mire sikerül – nekem sem megy gyorsan!
Gyors tipp a játékjaid teszteléséhez, ha olyan részt vizsgálnál, ahova nehéz eljutni: ne félj átmenetileg módosítani a játékot, hogy könnyebb legyen! Ebben a játékban például érdemes a
NUM_ROWS
és NUM_COLS
változókat kisebb értékűre vennünk, így sokkal gyorsabban végzünk. Próbáld ki ezt alább!Szeretnél részt venni a beszélgetésben?
Még nincs hozzászólás.