Стена и мяч
Оператор *= работает точно так же, как и +=, только он умножает исходное значение переменной на указанное число. То есть если значение а равно 5, строка а *= 3 изменит это значение на 15. Если же записать а *= – 1, значение переменной а станет равным – 5. Воспользовавшись записью *= – 1 можно быстро изменить знак переменной.
function
moveBall() {
//(1) Изменяем значение переменных х и у.
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
+
=
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 или какое-либо другое. В результате, если величина ballNvun будет превышать 0, вместо кадра "game over" ролик будет переходить к кадру "ball lost". Игрок может нажать любую клавишу и начать игру заново, но при этом значение ballNum.