Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
- Название:Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript краткое содержание
Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.
Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
temp.splice(r,1);
}
}Вместо того, чтобы использовать сценарий клипа или кнопку для обнаружения щелчков мыши, я определю функцию для обработки события onMouseDown.
Сначала она совершает цикл по всем картам в пирамиде и определяет, не совершен ли щелчок по одной из них (18). Цикл начинается с 28 и совершает обратный отсчет. Таким образом, карты наверху рассматриваются сначала, а карты внизу – потом.
Далее мы проверяем, если по карте был совершен щелчок, то программа определяет, закрывают ли данную карту другие карты пирамиды (19). Для этого вызывается функция cardPresentвместе со значениями ряда и колонки двух карт, которые могли бы закрывать карту, по которой был совершен щелчок.
Если локальная переменная cardвсе еще не определена, значит, ни одна карта не была выбрана. Нужно еще проверить, не выбрал ли игрок карту из стопки карт с открытой мастью. Эту колоду представляет клип «stack1» (20).
Если карта была выбрана, а глобальная переменная firstcardвсе еще не определена, значит, не выбрана никакая другая карта. Ссылка на выбранную карту помещается в firstcard (21).
Если другая карта уже выбрана, значения старой и новой карт складываются. Функция cardValueиспользуется для хранения численных значений карт (22). Если сумма равна 13, обе карты удаляются при помощи функции removeCard.
Если, с другой стороны, значение firstcardравно 13, значит, это король, и он может быть удален сам по себе (23).
Если по клипу "stackO" был совершен щелчок, это значит, что игрок решил перенести карту из закрытой колоды в открытую. В этом случае берется последнее значение в массиве deckи используется для изменения кадра клипа «stack1» (24). Массив stackиспользуется для отслеживания карт, которые перемещаются между стопками.
Чтобы выделить выбранную карту, клип "outline" перемещается в то же положение, что и выбранная карта (25).
И наконец, проверяется первая карта пирамиды (26). Если она отсутствует, значит, игрок ее удалил и выиграл игру._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,проверяет в цикле все карты, чтобы определить, существует ли карта в позиции, определенной аргументами вызова данной функции.
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 вариантов подобных игр. Большинство из них требует вытаскивания карт и перекладывания из стопки в стопку. Это делает код гораздо более сложным, но не невозможным для опытного программиста.Глава 16 Аркады
• Космический бой
• Астероиды
• Погоня в лабиринте
• Луноход
• Платформенный скроллер
Большинство людей, думая о компьютерных играх, имеют в виду классические аркады, например «Space invaders» (Космические захватчики), «Asteroids» (Астероиды), «Pac-Man», «Centipede» (Сороконожка) и «Lunar Lander» (Луноход). В этой главе рассматриваются игры именно такого типа. Сначала вы создадите игру космического боя, в которой нужно стрелять по объектам, летящим на ваш корабль. Затем вашему вниманию будет предложена похожая игра, "Space Rocks" (Астероиды). Следующая игра этой главы – погоня по лабиринту, затем игра под названием "Moon Lander" (Луноход). И закончим главу более сложной аркадной игрой под названием "Платформенный скроллер".
Читать дальшеИнтервал:
Закладка: