Если значение переменной passedPaddleравно true, и мяч находится там, где должна быть левая стена, игра заканчивается (8). Курсор возвращается в исходное положение, и ролик переходит к кадру «game over».
В конце функции
moveBallположение мяча устанавливается в соответствии со значениями
xи
y.
...
Примечание
Оператор *=работает точно так же, как и +=, только он умножает исходное значение переменной на указанное число. То есть если значение 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 очков.
Читать дальше
Конец ознакомительного отрывка
Купить книгу