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,проверяет в цикле все карты, чтобы определить, существует ли карта в позиции, определенной аргументами вызова данной функции.
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карты равно c9,возвращается число 9.
function cardValue(card) {
// Удаляем первый символ из значения value.
n = card.value;
n = parseInt(n.substr(1,2));
return(n);
}
Последняя функция проходит в цикле по всем картам пирамиды и удаляет все оставшиеся карты. Также она удаляет «stackO» и «stack1». Это очищает рабочее поле для подготовки к следующему раунду.
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 вариантов подобных игр. Большинство из них требует вытаскивания карт и перекладывания из стопки в стопку. Это делает код гораздо более сложным, но не невозможным для опытного программиста.
• Космический бой
• Астероиды
• Погоня в лабиринте
• Луноход
• Платформенный скроллер
Большинство людей, думая о компьютерных играх, имеют в виду классические аркады, например «Space invaders» (Космические захватчики), «Asteroids» (Астероиды), «Pac-Man», «Centipede» (Сороконожка) и «Lunar Lander» (Луноход). В этой главе рассматриваются игры именно такого типа. Сначала вы создадите игру космического боя, в которой нужно стрелять по объектам, летящим на ваш корабль. Затем вашему вниманию будет предложена похожая игра, "Space Rocks" (Астероиды). Следующая игра этой главы – погоня по лабиринту, затем игра под названием "Moon Lander" (Луноход). И закончим главу более сложной аркадной игрой под названием "Платформенный скроллер".
Исходный файл: Spacecombat.fla
Аркады иногда называют играми на реакцию, так как единственные необходимые здесь навыки – умение быстро регировать. Это особенно верно для первой игры, "Космический бой".
На рис. 16.1 показан фрагмент ролика Spacecombat.fla, размещенного на Web-сайте: игрок как бы находится внутри космического корабля, навстречу которому летят астероиды.
Рисунок 16.1. В игре «Космический бой» вы – пилот космического корабля, который пытается пролететь сквозь поле астероидов
Задача проекта
В этой игре можно стрелять по летящим астероидам небольшими пулями. Если пули попадают по объекту, он взрывается, не причиняя вреда кораблю. Однако если астероид не будет сбит, он может столкнуться с кораблем игрока и повредить его.
Читать дальше
Конец ознакомительного отрывка
Купить книгу