If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Gra memory: Zdobywanie punktów

Nasza gra jest już prawie gotowa! Pozostała nam jedna rzecz do zrobienia: system punktów. Przypomnijmy sobie odpowiadającą temu część zasad gry:
Celem gdy jest sprawienie, by wszystkie płytki były odwrócone obrazkiem do góry (tzn. znalezione zostały wszystkie pary) w jak najmniejszej liczbie podejść. Co oznacza, że im mniej prób, tym lepszy wynik.
Jak możemy śledzić liczbę prób? Cóż, "próbą" jest każde odwrócenie dwóch płytek, co odpowiada naszemu blokowi warunkowemu sprawdzającemu flippedTiles.length === 2. Możemy dodać nową zmienną globalną, numTries, która będzie zwiększana podczas wykonywania kodu ograniczonego tym warunkiem.
if (flippedTiles.length === 2) {
  numTries++;
  ...
}
Chcemy wyświetlić wynik, gdy gra się skończy - gdy gracz dopasuje wszystkie płytki. Jak to sprawdzimy? Przychodzą mi do głowy dwa rozwiązania:
  1. Iterujemy poprzez naszą tablicę płytek i sprawdzamy, czy isMatch jest true dla wszystkich.
  2. Używamy zmiennej globalnej, aby śledzić liczbę dopasowań znalezionych przez gracza, a następnie sprawdzić, czy wykonali całkowitą liczbę możliwych dopasowań.
Podobna debata odbyła się wcześniej i wybrałem opcję, w której za każdym razem nie musimy iterować po całej tablicy. Przejdźmy jeszcze raz do opcji nr 2.
Najpierw musimy zainicjować numMatches na 0, w tym samym miejscu, gdzie inicjujemy wszystkie inne globalne zmienne stanu gry:
var numMatches = 0;
Następnie wewnątrz bloku if dla dopasowanych płytek, zwiększamy zmienną numMatches:
if (flippedTiles[0].face === flippedTiles[1].face) {
  flippedTiles[0].isMatch = true;
  flippedTiles[1].isMatch = true;
  flippedTiles.length = 0;
  numMatches++;
}
Pod koniec funkcji draw sprawdzamy, czy gracz znalazł wszystkie dopasowania, a następnie wyświetla użytkownikowi tekst gratulacyjny:
if (numMatches === tiles.length/2) {
  fill(0, 0, 0);
  text("Znalazłeś je wszystkie w " + numTries + " próbie/próbach",
       20, 360);
}
Możecie sprawdzić działanie programu poniżej, ale wygranie może wam chwilę zająć (bez obrazy, mi też zajmie to pewną ilość czasu!).
Mała wskazówka dla was - gdy testujecie części gry do których ciężko się dostać, zmodyfikujcie tymczasowo waszą grę tak, aby łatwiej było użyć danej funkcji programu, którą chcecie przetestować. Na przykład, w tej grze możecie zmienić NUM_ROWS i NUM_COLS na mniejsze wartości, dzięki czemu skończycie grę znacznie szybciej. Teraz wypróbujcie to poniżej!

Chcesz dołączyć do dyskusji?

Na razie brak głosów w dyskusji
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.