Вход/Регистрация
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
вернуться

Розенцвейг Гэри

Шрифт:

function moveBunny {

// Проверяем, пришло ли время для следующего шага кролика.

if (getTimer > bunny.nextmove) {

// Определенное время кролик двигаться не может.

bunny.nextmove = getTimer + 60 – gameLevel*10;

// Перемещаем кролика, bunny.

bunny._x += bunny.move.x*5;

bunny._y += bunny.move.y*5;

// Выясняем, дошел ли кролик до положения цели.

if (bunny._x == bunny.dest.x and bunny._y ==bunny.dest.y) {

// Создаем массив с координатами

// возможных положений кролика.

possibilities = new Array;

for (i=0; i<berries.length; i++) {

// Определяем расстояние между

// текущим положением кролика и ягодой.

xdiff = Math.abs(berries[i]._x – bunny._x);

ydiff = Math.abs(berries[i]._y – bunny._y);

// Если эта ягода находится рядом…

if ((xdiff == 25 and ydiff == 0) or (xdiff == 0

and ydiff == 25) {

//…тогда ее положение может

// быть положением цели кролика.

possibilities.push(berries[i]);

}

}

// Среди возможных положений цели выбираем произвольное.

do {

r = int(Math.random*possibilities.length);

// Указываем новое положение цели

// и направление движения.

bunny.dest.x = possibilities[r]._x;

bunny.dest.y = possibilities[r]._y;

bunny.move.x = (possibilities[r]._x – bunny._x)/25;

bunny.move.y = (possibilities[r]._y – bunny._y)/25;

// Принимаем выбранные положения, если кролик

// не возвращается назад или если этот

// путь – единственно возможный.

} while ((bunny.dest.x = lastx and bunny.dest.y == lasty) and (possibilities.length > 1));

// Запоминаем координаты предыдущего положения.

lastx = bunny._x;

lasty = bunny._y;

}

}

// Проверяем, находится ли кролик поблизости с лисой.

if (Math.abs(bunny._x – fox._x) <= 10 and Math.abs(bunny._y –

fox._y) <= 10 {

if (lives < 1) {

gotoAndStop("game over");

} else {

lives–;

gotoAndStop("lost life");

}

}

}

К сведению

Не забудьте, что нужно присвоить имена связи клипам лисы, кролика и ягоды. Для каждого кадра, в том числе и в небольших клипах, вам понадобится функция stop.

Другие возможности

Есть множество способов усовершенствовать эту игру. У вас может быть несколько кроликов, специальные ягоды, которые на короткое время будут позволять лисе гоняться за кроликом. Через определенные промежутки времени из центральной области будет выходить новый кролик, а в коридорах лабиринта будут появляться бонусные очки.

Возможно, вам в голову придут и другие идеи, например сделать так, чтобы кролик был более сообразительным: гонялся за лисой соперничал с лисой и поедал ягоды. Можно начислять дополнительные очки в конце каждого уровня в зависимости от того, насколько быстро он был пройден.

Луноход

Исходныйт файл: Moonlander.fla

Вот еше одна классическая игра. Игра "Луноход" была, возможно, второй из когда-то созданных компьютерных игр. Ее первая версия предназначалась для универсальной ЭВМ и была полностью основана на тексте. Каждую секунду компьютер в виде текста выдавал, где в данный момент находится луноход и какова его скорость. По мере снижения лунохода игрок мог вносить коррективы.

С тех пор игра воссоздавалась в различных графических форматах, большинство из которых, как и здесь, использовали вид сбоку (рис. 16.6).

Рисунок 16.6 . Луноход снижается, пытаясь приземлиться на одну из приспособленных для этого площадок

Задача проекта

Цель – создать стандартную игру, в которой корабль должен удачно совершить посадку. Он начинает свое движение вверху экрана, игрок управляет сильным вертикальным ускорителем, расположенным под кораблем, а также более слабыми ускорителями – по бокам корабля.

С течением времени корабль снижается под воздействием гравитации. Игрок не может постоянно пользоваться ускорителями, так как у корабля ограниченный запас горючего.

Задача игрока состоит в том, чтобы корабль в полной сохранности совершил посадку на одну из отведенных для этого площадок. Если он сядет не на площадку или как-то иначе коснется поверхности луны, то произойдет взрыв.

В этой игре несколько уровней. В ролике, который приводится в качестве примера, их три, и в каждом отображается различный рельеф.

Подготовка ролика

Сначала рассмотрим клип «ship». На рис. 16.7 показан полноэкранный вид окна программы Flash в момент, когда выбран клип корабля. В этом клипе несколько кадров с метками: «normal», «up», «left», «right» и «explode».

Рисунок 16.7. Клип «ship» включает следующие кадры: «normal», «up», «left», «right» и «explode»

В первом кадре представлен корабль без включенных ускорителей. Во втором кадре включен главный ускоритель, который поднимает корабль вверх. В третьем и четвертом кадрах отображены боковые ускорители. На рис. 16.7 показан кадр «left». Обратите внимание, что слово «left» означает, что корабль будет двигаться влево, а пламя ускорителя находится справа.

Кадр "explode" представляет собой начало небольшой анимации, в которой луноход взрывается. Эта анимация используется в том случае, когда игрок посадил корабль не на площадку.

В дополнение к клипу "background", который совсем не используется в коде, три других клипа представляют собой рельеф поверхности для трех уровней игры. Эти клипы называются "Ground – level 1", "Ground – level 2" и "Ground – level 3".

Клип "pad" – всего лишь желтый прямоугольник, который показывает, что непосредственно под луноходом находится посадочная площадка.

Основная временная шкала этого ролика действительно сложная. Информация о кадрах и их содержимом приведена в табл. 16.1.

Таблица 16.1. Кадры основной временной шкалы

У вас также будет два простых клипа: «fuel gauge» и «fuel meter». Первый представляет собой пустой прямоугольник, а второй – сплошной. Клип «meter» помещается внутри клипа «gauge». Далее в коде вы укажете, чтобы при сжигании горючего размеры клипа «meter» уменьшались, то есть он будет занимать меньше места в прямоугольнике «gauge».

Создание кода

В трех кадрах «level1», «level2» и «level3» у вас будут клипы «actions», которые вызывают необходимые для игры функции. В начале уровня вызывается только одна функция, а в течение игры постоянно – другая.

onClipEvent(load) {

_root.startLevel;

}

onClipEvent(enterFrame) {

_root.moveShip;

}

Обе эти функции расположены в основной временной шкале первого кадра. Сценарий ролика начинается с функции startGame, которая вызывается, когда в первом кадре игрок щелкает по кнопке Play. Она устанавливает значение переменной gameLevel, отображаемое в текстовом поле в верхнем правом углу экрана. Затем с помощью функции startLevel начинается первый уровень.

function startGame {

gameLevel = 1;

startLevel;

}

Функция startLevel выполняет множество задач. Сначала она переводит ролик к кадру в соответствии со значением переменной gameLevel, затем помещает корабль вверху экрана. Скорость корабля, которая определяется величинами dx и dy, обнуляется. Для увеличения скорости корабля и для того, чтобы он начал двигаться вниз, используется переменная gravity.

В массивах hitPoints и footPoints содержатся координаты некоторых точек относительно центра корабля. Для определения, коснулся ли корабль поверхности луны, используются элементы массива hitPoints. А оба элемента массива footPoints нужны, чтобы определить, находятся ли обе опоры лунохода на посадочной площадке.

В массиве pads хранятся имена трех клипов посадочных площадок. На одном уровне имеется всего лишь две посадочные площадки, но язык ActionScript этого не учитывает.

function startLevel {

gotoAndStop("level"+gameLevel);

// Размещаем клип корабля.

ship._x = 275;

ship._x = 25;

// Корабль не движется.

ship.dx = 0;

ship.dy = 0;

// Инициализируем гравитацию.

gravity = .1;

// Инициализируем индикатор горючего.

fuel = 100;

showFuel;

// Определяем точки корабля, которые могут коснуться поверхности Луны.

hitPoints = new Array;

hitPoints.push({x:-9, y:13});

hitPoints.push({x:9, y:13});

hitPoints.push({x:0, y:-10});

hitPoints.push({x:-9, y:-7});

hitPoints.push({x:8, y:-7});

// Определяем координаты опор лунохода.

footPoints = new Array;

footPoints.push({x:-9, y:13});

footPoints.push({x:9, y:13});

// Создаем массив из клипов "pad" (посадочная площадка).

pads = new Array;

for (i=0; i<3; i++) {

pads.push(_root["pad"+i]);

}

}

  • Читать дальше
  • 1
  • ...
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: