[ Pobierz całość w formacie PDF ]

moved.push({
toX : x, toY : y + gaps[x],
fromX : x, fromY : y,
type : getJewel(x, y)
});
jewels[x][y + gaps[x]] = getJewel(x, y);
}
}
}
}
...
})();
Funkcja ta usuwa klejnoty z planszy i przesuwa w ich miejsce nowe. Poza zmodyfikowaniem planszy
funkcja check() zbiera informacje o usuni tych i przesuni tych kamieniach w dwóch tablicach 
removed i moved. Dane te s wa ne, gdy przydaj si pó niej np. przy animowaniu zmian na ekranie.
Wykorzystuj c zagnie d one p tle, funkcja check() przechodzi przez wszystkie komórki na planszy.
Je li dana komórka zosta a oznaczona na mapie warto ci wi ksz ni 2, informacja o umiejscowie-
niu i typie klejnotu zostaje zapisana w tablicy removed z wykorzystaniem litera u obiektu. Kamie ,
Poleć ksi k
Kup ksi k
ROZDZIA 4. KONSTRUOWANIE GRY 87
który opadnie w nowe miejsce, nadpisze dane o pozycji w pó niejszym etapie, tote na razie nie
trzeba modyfikowa tablicy klejnotów.
Zwró uwag na sposób, w jaki p tla sprawdza wiersze: od do u do góry zamiast z góry na dó . Roz-
wi zanie to pozwoli Ci natychmiastowo przemie ci inne klejnoty w dó planszy. Algorytm ten za-
chowuje licznik ka dej kolumny wewn trz tablicy gaps. Nim zacznie on przetwarza kolejn kolum-
n , ustawia jej licznik na 0. Za ka dym razem gdy usuni ty zostanie klejnot, licznik jest zwi kszany
o 1. Z kolej je eli klejnot pozostaje na swoim miejscu, licznik tablicy gaps okre li, czy powinien on
zosta przesuni ty w dó . Stanie si tak, je eli licznik ma warto dodatni  wtedy klejnot opadnie
w dó o równ mu liczb wierszy. Warto ta jest zapisana w drugiej tablicy  moved  za pomoc
podobnego litera u obiektu, z tym e tym razem zachowane zostan w niej pozycja pocz tkowa i ko co-
wa. W tym momencie nale y uaktualni tablic jewels, poniewa wskazywane przez ni wspó rz dne
uleg y zmianie.
Generowanie nowych klejnotów
Funkcja check() nie zosta a do ko ca opracowana; wci zawiera kilka niedoci gni . Przenosz c
istniej ce klejnoty w dó , wype niasz co prawda luki, lecz tworzysz nowe w górnej cz ci planszy.
Dlatego te po przetworzeniu wszystkich klejnotów w kolumnie nale y stworzy nowe kamienie, które
sp yn z górnej granicy w dó . Listing 4.15 przedstawia modyfikacj odpowiedzialn za ten mechanizm.
Listing 4.15. Dodawanie nowych klejnotów
jewel.board = (function() {
...
function check() {
...
for (var x = 0; x
gaps[x] = 0;
for (var y = rows-1; y >= 0; y--) {
...
}
// Dodaje nowe klejnoty u góry planszy.
for (y = 0; y
jewels[x][y] = randomJewel();
moved.push({
toX : x, toY : y,
fromX : x, fromY : y - gaps[x],
type : jewels[x][y]
});
}
}
}
...
})();
Liczba nowych kamieni, które trzeba wygenerowa w kolumnie, jest równa liczbie wolnych komó-
rek, które si w niej znajduj . Konkretne wspó rz dne, które maj zaj klejnoty, s atwe do obli-
czenia, poniewa nowe kamienie zawsze spadaj na wolne miejsca z góry planszy. Informacje o no-
wych klejnotach s dodawane do tablicy moved poza istniej cymi wcze niej brylantami, które
przeniesiono ni ej. Z uwagi na fakt, e nowe klejnoty nie maj wspó rz dnych pocz tkowych, wpro-
wadzi em nieistniej ce wspó rz dne spoza planszy, tak jakby nowe klejnoty istnia y wcze niej i czeka y
na swoj kolej.
Poleć ksi k
Kup ksi k
88 HTML5. TWORZENIE GIER
Przyznawanie punktów
W funkcji initialize() wprowadzi em zmienn baseScore, na podstawie której b d oblicza liczb
przyznawanych punktów. Listing 4.16 prezentuje kod odpowiedzialny za punktowanie ruchów gracza,
dodany w skrypcie check().
Listing 4.16. Przyznawanie punktów za uformowane a cuchy
jewel.board = (function() {
...
function check() {
...
for (var x = 0; x
gaps[x] = 0;
for (var y = rows-1; y >= 0; y--) {
if (chains[x][y] > 2) {
hadChains = true;
gaps[x]++;
removed.push({
x : x, y : y,
type : getJewel(x, y)
});
// Dodaje punkty do wyniku.
score += baseScore
* Math.pow(2, (chains[x][y] - 3));
} else if (gaps[x] > 0) {
...
}
...
}
}
}
...
})();
Za ka dy sk adowy klejnot a cucha gra dodaje punkty do ogólnego wyniku. Liczba otrzymanych
punktów zale y od d ugo ci a cucha. Ka dy dodatkowy a cuch podwaja wynik. [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • blogostan.opx.pl