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

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

Шрифт:

Как и в предыдущей игре, вам нужен один клип под названием "paddle" и еще один с именем "computerPaddle". Поведение второй биты будет запрограммировано с помощью языка ActionScript. Так как бита компьютера будет располагаться справа, необходимо убрать правую стенку. При этом верхняя и нижняя стены останутся.

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

В сценарий предыдущего ролика необходимо внести некоторые изменения. Изменить существующие функции и добавить одну новую. Приведем сценарий клипа «actions», который вызывает новую функцию moveComputerPaddle:

onClipEvent(load) {

_root.startLevel;

}

onClipEvent(enterFrame) {

_root.moveBall;

_root.movePaddle;

_root.moveComputerPaddle;

}

Вместо функции startGame в этой игре используется функция startLevel, которая обладает всеми возможностями функции startGame и в дополнение к ним указывает, что мяч будет двигаться в произвольном направлении. Достичь этого можно, определив, что мяч в 50 % случаев подается вверх, в 50 % случаев – вниз, также в 50 % случаев – влево и в 50 % случаев – вправо. То есть вы получаете четыре возможных направления движения мяча по диагонали.

function startLevel {

// Определяем начальное положение мяча.

x = ball._x;

y = ball._y;

// Указываем начальную скорость и одно из четырех

// произвольных направлений по диагонали.

dx = 5;

dy = 5;

if (Math.random < .5) dx *= -1;

if (Math.random < .5) dy *= -1;

// Прячем курсор.

Mouse.hide;

// Устанавливаем значения констант.

rightWall = 550;

leftWall = 0;

topWall = 0;

bottomWall = 400;

ballRadius = ball._width/2;

passedPaddle = false;

}

Теперь в функцию moveBall включен код для определения, пролетел ли мяч мимо биты компьютера или нет (10) . Он похож на код, обрабатывающий биту игрока (9) , и идентичен соответствующему фрагменту кода предыдущей игры. Когда мяч пролетает с правой (11) или с левой (12)  стороны, обычно игра возвращается к кадру «start level». Однако если не осталось больше мячей, программа переходит к кадру завершения игры, game over. В зависимости от того, кто пропустил мяч, очко записывается либо игроку, либо компьютеру (переменной playerScore или computerScore).

function moveBall {

// Изменяем координаты x и y.

x += dx;

y += dy;

// Проверяем, попал ли мяч в нижнюю стену.

if (y+ballRadius > bottomWall) {

overshoot = (y+ballRadius) – bottomWall;

y -= overshoot*2;

dy *= -1;

}

// Проверяем, попал ли мяч в верхнюю стену.

if (y-ballRadius < topWall) {

overshoot = topWall – (y-ballRadius);

y += overshoot*2;

dy *= -1;

}

(9) → // Находится ли мяч там, где по нему должна ударить бита?

paddleRight = paddle._x+(paddle._width/2);

if ((x-ballRadius < paddleRight) and !passedPaddle) {

// Находится ли там бита?

paddleTop = paddle._y-(paddle._height/2);

paddleBottom = paddle._y+(paddle._height/2);

if ((y > paddleTop) and (y < paddleBottom)) {

// Удар битой.

overshoot = paddleRight – (x-ballRadius);

x += overshoot*2;

dx += -1;

// Увеличиваем скорость мяча.

dx *= 1.05;

dy *= 1.05;

} else {

// Мяч пропущен, больше ничего не проверяем.

passedPaddle = true;

}

}

(10) → // Находится ли мяч там,

// где должен столкнуться с битой компьютера?

paddleLeft = computerPaddle._x-(computerPaddle._width/2);

if ((x+ballRadius > paddleLeft) and !passedPaddle) {

// Находится ли там бита?

paddleTop = computerPaddle._y-(computerPaddle._height/2);

paddleBottom = computerPaddle_>y+

(computeerPaddle._height/2);

if ((y > paddleTop) and (y < paddleBottom)) {

// Удар битой.

oveershoot = (x+ballRadius) – paddleLeft;

x -= overshoot*2;

dx *= -1;

// Увеличиваем скорость мяча.

dx *= 1.05;

dy *= 1.05;

} else {

// Мяч пропущен, ничего больше не проверяем.

passedPaddle = true;

}

}

(11) → // Проверяем, попал ли мяч в левую стену.

if ((x-ballRadius < leftWall) and passedPaddle) {

Mouse.show;

computerScore++;

if (numBalls == 0) {

gotoAndPlay("game over");

} else {

numBalls–;

gotoAndPlay("start level");

}

}

(12) → // Выполняем аналогичную проверку для правой стены.

if ((x+ballRadius > rightWall) and passedPaddle) {

Mouse.show;

playerScore++;

if (numBalls == 0) {

gotoAndPlay("game over");

} else {

numBalls—;

gotoAndPlay("start level");

}

}

// Устанавливаем новое положение мяча.

ball._x = x;

ball._y = y;

}

Функция movePaddle идентична одноименной функции предыдущей игры. Однако необходимо добавить функцию moveComputerPaddle, управляющую правой битой, которая будет перемещать биту только в том случае, если мяч летит вправо. Бита будет перемещаться вверх, если мяч расположен выше нее, и вниз, если ниже. Скорость передвижения биты устанавливается в начале функции. Чем выше это значение, тем быстрее бита будет реагировать на перемещения мяча.

function moveComputerPaddle {

// Устанавливаем скорость биты, управляемой компьютером.

moveAmount = 8;

// Выясняем, движется ли мяч в этом направлении.

if (dx > 0) {

// Перемещаем биту вверх.

if (y < computerPaddle._y-moveAmount) {

computerPaddle._y -= moveAmount;

// Перемещаем биту вниз.

} esle if (y > computerPaddle._y+moveAmount) {

computerPaddle._y += moveAmount;

}

}

}

Еще один важный фрагмент кода входит в кадр «start game» и устанавливает исходные значения количества мячей и очков. Эти переменные не могут быть вставлены в функцию startLevel, так как они должны быть установлены только в начале игры, а не перед тем, как подается мяч.

numBalls = 7;

computerScore = 0;

playerScore = 0;

stop;

К сведению

В дополнение к уже описанным элементам необходимо создать текстовые поля playerScore и computerScore и поместить их на рабочее поле. Они должны быть расположены во всех кадрах, кроме «start game», таким образом, чтобы были видны между подачами мяча и в конце игры.

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

Изменить количество мячей просто: достаточно изменить только одно значение в кадре «start game». Изменяя другие параметры, можно продлить или усложнить игру. Есть и другие варианты усовершенствования игры – например, увеличить скорость биты компьютера, поменяв одно значение в функции moveComputerPaddle.

Также можно сделать компьютер "умнее". Например, написать код, который будет предугадывать место, куда прилетит мяч, и передвигать туда биту вместо того, чтобы просто перемещать ее вслед за мячом. При пересечении границ игрового поля мяч будет ударяться о верхнюю или нижнюю стенку только один раз, так что определить предполагаемое место можно с помощью простых математических расчетов, если вы хорошо владеете математикой.

  • Читать дальше
  • 1
  • ...
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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