_root.onMouseDown = function {
var card = undefined;
(18) →
// Смотрим, был ли щелчок по одной из карт пирамиды.for(var i=27;i>=0;i–) {
if (_root["card"+i].hitTest(_xmouse,_ymouse)) {
var card = _root["card"+i];
break;
}
}
(19) →
// Если был, закрывают ли эту карту другие карты?if (card != undefined) {
if (cardPresent(card.row+1,card.col) or cardPresent(card.row+1,card.col+1)) {
card = undefined;
}
}
(20) →
// Был ли щелчок по стопке карт, лежащих мастью вверх?if (card == undefined) {
if (stack1.hitTest(_xmouse,_ymouse)) {
card = stack1;
}
}
// Проверяем, выбрана ли еще одна карта.
if (card != undefined) {
(21) →
// Первая выбранная карта.if (firstCard == undefined) {
firstCard = card;
// Игнорируем второй щелчок по той же карте.
} else if (firstCard == card) {
(22) →
// Если выбраны две карты и их сумма равна 13.} else if (cardValue(firstCard) + cardValue(card) == 13) {
// Удаляем обе карты.
removeCard(card);
removeCard(firstCard);
firstCard = undefined;
// В противном случае считаем, что это первая выбранная карта.
} else {
firstCard = card;
}
}
(23) →
// Если выбрана одна карта, и это «король».if (cardValue(firstCard) == 13) {
removeCard(firstcard);
firstCard = undefined;
}
(24) →
// Если щелкнули по колоде закрытых карт, переворачиваем очередную карту.if (stack0.hitTest(_xmouse,_ymouse)) {
stack1.value = deck.pop;
stack1.gotoAndStop(stack1.value);
stack.push(stack1.value);
// Когда закрытая колода кончается, удаляем ее.
if (deck.length == 0) {
stack0.removeMovieClip;
}
}
(25) →
// Помещаем рамку около выделенной карты.if (firstCard != undefined) {
outline._x = firstCard._x;
outline._y = firstCard._y;
} else {
outline._x = -1000;
}
(26) →
// Если удалена первая карта в пирамиде, значит игрок выиграл.if (_root["card0"] == undefined) {
gotoAndStop("game over");
}
}Осталось рассмотреть несколько полезных функций. Первая, removeCard,
удаляет карту из колоды открытых карт или из пирамиды. Чтобы удалить карту из открытой колоды, она должна просто отправить клип «stack1» к кадру, который представляет предыдущую карту. Именно в этом месте оказывается полезным массив stack. Каждая карта, положенная мастью вверх, добавляется к stack. Чтобы достать карту опять, вам нужно удалить последнюю карту из массива stack и затем обратиться к последниму члену этого массива. Если карта оказалась из пирамиды, то клип просто удаляется.function removeCard(thisCard) {
if (thisCard == stack1) {
// Удаляем карту из открытой колоды.
stack1.gotoAndStop(1);
stack.pop;
stack1.value = stack[stack.length-1];
stack1.gotoAndStop(stack1.value);
} else {
// Удаляем карту из пирамиды.
thisCard.removeMovieClip;
}
}Следующая функция, cardPresent,
проверяет в цикле все карты, чтобы определить, существует ли карта в позиции, определенной аргументами вызова данной функции.