Пасьянс "Пирамида"
Осталось рассмотреть несколько полезных функций. Первая, removeCard, удаляет карту из колоды открытых карт или из пирамиды. Чтобы удалить карту из открытой колоды, она должна просто отправить клип "stack1" к кадру, который представляет предыдущую карту. Именно в этом месте оказывается полезным массив stack. Каждая карта, положенная мастью вверх, добавляется к stack. Чтобы достать карту опять, вам нужно удалить последнюю карту из массива stack и затем обратиться к последнему члену этого массива. Если карта оказалась из пирамиды, то клип просто удаляется.
function
rernoveCard(thisCard) {
if
(thisCard
=
=
stack1) {
// Удаляем карту из открытой колоды,
stack1.gotoAndStop(
1
);
stack.pop();
stack1.value
=
stack[stack.length
-
1
];
stack1.gotoAndStop(stackl.value);
}
else
{
// Удаляем карту из пирамиды.
thisCard.removeMovieClip();
}
}
Следующая функция, cardPresent, проверяет в цикле все карты, чтобы определить, существует ли карта в позиции, определенной аргументам вызова данной функции.
function
cardPresent(row, col) {
// Проверяем, существует ли в пирамиде данная карта.
for
(
var
i
=
0
; i
<
28
; i
+
+
) {
thisCard
=
_root[
"card"
+
i];
if
((thisCard.row
=
=
row) and (thisCard.col
=
=
col)) {
return
(
true
);
}
}
return
(
false
);
}
Функция cardvalue берет свойство value клипа карты, отбрасывает первый символ и возвращает численное значение. Например, если значение value карты равно с9, возвращается число 9.
function
cardValue(card) {
// Удаляем первый символ из значения value.
n
=
card.value;
n
=
parselnt(n.substr(
1
,
2
));
return
(n);
}
Последняя функция проходит в цикле по всем картам пирамиды и удаляет все оставшиеся карты. Также она удаляет "stack0" и "stackl". Это очищает рабочее поле для подготовки к следующему раунду.
function
clearGame() {
// Удаляем карты из пирамиды.
for
(
var
i
=
0
; i
<
28
; i
+
+
) {
_root[
"card"
+
i].removeMovieClip();
}
// Удаляем обе колоды
stack0.removeMovieClip();
stack1.removeMovieClip();
}
К сведению
Кнопка New на экране имеет простой сценарий и сначала вызывает clearGame, а потом startGame. Это перезапускает игру в любой удобный пользователю момент.
on
(press) {
clearGame();
startGame();
}
Другие возможности
Игру можно сделать значительно проще, если вы разрешите игроку переворачивать колоду уже открытых карт и смотреть карты столько раз, сколько он захочет. Вы можете сделать это, опознавая, когда массив deck пуст, и помещая каждую карту из массива stack обратно в массив deck.
Кроме этого пасьянса вы можете создать много других. В моей коллекции более 200 вариантов подобных игр. Большинство из них требует вытаскивания карт и перекладывания из стопки в стопку. Это делает код гораздо более сложным, но не невозможным для опытного программиста.