Следующий жанр, который будет рассмотрен, восходит к первой видеоигре «Pong». Эта простая игра положила начало революции игровых автоматов в 70-х годах.
В таких играх задействован обычный мяч, отскакивающий от стен, и бита, управляемая пользователем. Игрок пытается не позволить мячу пролететь мимо биты.
В первой игре, которую вы создадите, будет только простая бита и мяч. Во второй игре появится вторая бита, управляемая компьютером, то есть у игрока будет противник, обладающий искусственным интеллектом. В третьей игре, которая описывается в данной главе, игрок будет пытаться выбить блоки с помощью мяча, как в классической игре "Breakout". Последняя игра раздела перенесет действие "Breakout" в трехмерное пространство.Стена и мяч
Исходный файл: Wallball.fla
Первая игра называется "Стена и мяч". В ней имеются бита, управляемая пользователем, и три стены, от которых может отскакивать мяч. Четвертой стены нет (она открыта). Задача игрока состоит в том, чтобы не позволить мячу пролететь мимо биты (рис. 11.1).
Рисунок 11.1.
Задача проекта
Цель данного проекта – создать игру, где двигающийся мяч будет отскакивать от стен и биты. Бита будет перемещаться по вертикали в соответствии с движением мыши. Если мяч пролетает мимо биты и достигает границы экрана, игра заканчивается. При столкновении мяча с битой скорость первого должна немного увеличиваться.
Подход
Самое сложное при создании этой игры – сделать так, чтобы мяч правильно отскакивал от стен. Многие программисты не учитывают ни диаметр мяча, ни его скорость. В результате может случиться, что мяч будет отскакивать не от стены, а от точки, расположенной за ней.
Рассмотрим ситуацию, когда мяч оказывается за стеной. При этом надо выяснить, насколько далеко залетел мяч за пределы игрового поля. Так как мяч перемещается на несколько пикселов в одном кадре, он может легко проскочить за стену на несколько пикселов.
После того как вы узнаете, насколько далеко за стеной оказался мяч, вы можете изменить направление его движения, а затем поместить мяч на соответствующее расстояние с нужной стороны стены. На рис. 11.2 показана диаграмма работы данного алгоритма.
Рисунок 11.2.
Столкновения с битой рассматриваются точно так же, как и столкновения со стеной. Единственное различие – вы должны изначально убедиться, что вертикальное положение биты допускает удар мяча об нее.
Если мяч проходит через горизонтальное положение биты, но ее там нет, нужно присвоить некой переменной значение, указывающее, что мяч был пропущен. Таким образом, у пользователя не будет другого шанса отбить мяч, пока тот летит до границы экрана.
Подготовка ролика
Единственными графическими объектами, необходимыми для этой игры, являются мяч, бита и стены. Изображения стен не используются в коде, так как реальные границы игрового поля определяются с помощью значений определеннных констант.
Создание кода
Для этой игры необходимы лишь три функции (посмотрите исходный файл, Wallball.fla). Все эти три функции будут вызываться в клипе «actions»:onClipEevent(load) {
_root.initGame;
}
onClipEvent(enterFrame) {
_root.moveBall;
_root.movePaddle;
}Функции находятся в основной временной шкале. Первая функция, initGame, хранит положение мяча в переменных x и y. Указаны значения dx и dy, то есть скорость мяча по вертикали и горизонтали (5 пикселов в кадре каждая). Затем функция initGame устанавливает несколько постоянных, определяющих положение каждой стены. Этой функции передается значение радиуса мяча, которое также используется функцией moveBall. Переменной passedPaddle присваивается значение true после того, как игрок пропустит мяч. При этом надо спрятать курсор, чтобы он не отвлекал внимание игрока.