_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, проверяет в цикле все карты, чтобы определить, существует ли карта в позиции, определенной аргументами вызова данной функции.