Чтение онлайн

на главную - закладки

Жанры

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

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

Шрифт:
...

Примечание

Оператор *= работает точно так же, как и += , только он умножает исходное значение переменной на указанное число. То есть если значение a равно 5, строка a *= 3 изменит это значение на 15. Если же записать a *= -1, значение переменной a станет равным -5. Воспользовавшись записью *= – 1 можно быстро изменить знак переменной.

function moveBall {

(1) → // Изменяем значение переменных x и у.

x += dx;

y += dy;

(2) → // Проверяем, достиг ли мяч правой стены.

if (x+ballRadius > rightWall) {

overshoot = (x+ballRadius) – rightWall;

x -= overshoot*2;

dx *= -1;

}

(3) → //

Проверяем, достиг ли мяч нижней стены.

if (y+ballRadius > bottomWall) {

overshoot = (y+ballRadius) – bottomWall;

y -= overshoot*2;

dy *= -1;

}

(4) → // Проверяем, достиг ли мяч верхней стены.

if (y-ballRadius < topWall) {

overshoot = topWall – (y-ballRadius);

y += overshoot*2;

dy *= -1;

}

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

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

if ((x-ballRaduis < paddleRight) and passedPaddle) {

(6) → // Находится ли там бита?

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;

(7) → // Увеличиваем скорость.

dx *= 1.05;

dy *= 1.05;

} else {

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

passedPaddle = true;

}

}

(8) → // Проверяем, находится ли мяч у левой стены.

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

Mouse.show;

GotoAndPLay("game over");

}

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

ball._x = x;

ball._y = y;

}

По сравнению с функцией moveBall функция movePaddle поразительно короткая. Все, что необходимо сделать, – присвоить вертикальному положению биты значение вертикальной координаты курсора.

function movePaddle {

// положение биты меняется в соответствии с курсором

paddle._y = _ymouse;

}

К сведению

Убедитесь, что экземпляру клипа с мячом присвоено имя «ball», а экземпляру клипа с битой – «paddle». Если стены расположены не так, как в исходном ролике, проверьте, правильно ли указаны константы в функции initGame.

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

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

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

Осуществить это можно, присвоив, например, в начале игры переменной ballNum значение 3 или какое-либо другое. В результате, если величина ballNum будет превышать 0, вместо кадра «game over» ролик будет переходить к кадру «ball lost». Игрок может нажать любую клавишу и начать игру заново, но при этом значение ballNum будет уменьшено на единицу.

Мяч и бита

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

Хотя предыдущая игра веселая, у нее есть один недостаток: нет никакой возможности выиграть. Вы просто играете до тех пор, пока не надоест или пока не проиграете.

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

На рис. 11.3 показан кадр из игры. Игрок управляет левой битой, а компьютер – правой.

Рисунок 11.3. В

игре «Мяч и бита» мяч отбивается как битой игрока, так и битой компьютера

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

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

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

Когда мяч пролетает мимо одной из бит игроков, игра приостанавливается до тех пор, пока пользователь не щелкнет по кнопке serve. оатем мяч снова появится в середине экрана. Счет игры сохранится. Игра заканчивается в том случае, если один из игроков наберет 7 очков.

Подход

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

Лучше, если бита компьютера будет медленно двигаться в направлении мяча. Если мяч будет лететь слишком быстро, компьютер может не успеть переместить биту в правильное положение. Кроме того, бита будет двигаться только тогда, когда мяч летит в искусственного противника.

...

Примечание

Словосочетание "искусственный интеллект" звучит таинственно. Однако для игр не так важно, чтобы противник был умным. Компьютер должен только способствовать захватывающей игре. Конечно, в большинстве игр гораздо проще создать безупречного противника. Однако в таком случае игра для компьютера становится беспроигрышной, что не интересно для игрока. Трудность состоит в том, чтобы создать противника, обладающего некими навыками (это сделает игру непростой), но чтобы имеющихся навыков не хватало для беспроигрышной игры.

Для того чтобы счет игры был сохранен, нужны несколько переменных. Однако создать паузу в игре между подачами мяча довольно сложно, поэтому в игре будет два кадра: в первом программа ждет, когда игрок щелкнет по кнопке «serve», а во втором разворачивается само действие игры. Этот второй кадр начинается с установки произвольного начального положения мяча.

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

В общих чертах ролик аналогичен предыдущему. Вместо трех кадров вам понадобятся четыре: «start game», «start level», «play» и «game over». Перед каждой подачей мяча будет виден кадр «start level». Кадр же «game over» станет отображаться только тогда, когда будет пропущен последний мяч.

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

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

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

onClipEvent(load) {

_root.startLevel;

}

onClipEvent(enterFrame) {

_root.moveBall;

_root.movePaddle;

_root.moveComputerPaddle;

}

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

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

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Бальмануг. Студентка

Лашина Полина
2. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Бальмануг. Студентка

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Теневой путь. Шаг в тень

Мазуров Дмитрий
1. Теневой путь
Фантастика:
фэнтези
6.71
рейтинг книги
Теневой путь. Шаг в тень

Защитник

Астахов Евгений Евгеньевич
7. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Защитник

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Проклятый Лекарь IV

Скабер Артемий
4. Каратель
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь IV

Жандарм 4

Семин Никита
4. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 4

Тринадцатый V

NikL
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый V

Кодекс Охотника. Книга IV

Винокуров Юрий
4. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга IV

Энфис 2

Кронос Александр
2. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 2