Заметки за 2022 год

Пинг-понг

Второй игрой на GMS2 стал пинг-понг. Тоже классика, как и крестики-нолики. За счёт инерции мяча и бит, а также алгоритма поведения компьютера – играть в него очень увлекательно.

Пинг-понг
Пинг-понг

Вы управляете левой битой при помощи курсорных клавиш клавиатуры Вверх ↑ и Вниз ↓. Задача – отбивать все подачи и не пропускать мячи, при этом стараться сделать такую подачу, чтобы компьютер пропустил мяч.

Цикл игры бесконечный счёт не сбрасывается.

Ссылка на загрузку игры: Pong.zip

Код игры в GMS2
Код игры в GMS2

В данной игре я не использовал разбиение кода на скрипты. Вся логика помещена в событиях объектов: obj_player, obj_ai, obj_ball и obj_game. Для примера ниже пара обработчиков.

Код движения биты компьютера:

 1/// @description Движение
 2
 3// Если мяч движется налево, т.е. от AI игрока
 4if (obj_ball.direction > 90 && obj_ball.direction < 270) {
 5	// Тормозимся
 6	if (vspd > 0) {
 7		vspd = max(0, vspd - acceleration);
 8	} else if (vspd < 0) {
 9		vspd = min(0, vspd + acceleration);
10	}
11} else {
12	// Иначе, если мяч движется к AI игроку,
13	// движемся за ним по вертикали, меняя вертикальную скорость
14	if (y < obj_ball.y) {
15		vspd = min(maxspd, vspd + acceleration);
16	} else {
17		vspd = max(-maxspd, vspd - acceleration);
18	}
19}
20
21// Увеличиваем вертикальную позицию
22// на значение вертикальной скорости
23y += vspd;

Код инициализации мяча:

 1/// @description Инициализация
 2
 3// Задаём рандомайзер
 4randomize();
 5
 6// Выбираем направление первоначального броска
 7if (irandom(1)) {
 8	// Налево верхняя и нижняя часть
 9	direction = random_range(135, 225);
10} else {
11	// Направо
12	if (irandom(1)) {
13		// Направо верхняя часть
14		direction = random_range(0, 45);
15	} else {
16		// Направо нижняя часть
17		direction = random_range(315, 359);
18	}
19}
20
21// Начальная скорость
22speed = 1;