© 1979–2022 Vladimir Igonin
Сайт Владимира Игонина

Пинг-понг

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

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

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

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

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

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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// @description Движение

// Если мяч движется налево, т.е. от AI игрока
if (obj_ball.direction > 90 && obj_ball.direction < 270) {
	// Тормозимся
	if (vspd > 0) {
		vspd = max(0, vspd - acceleration);
	} else if (vspd < 0) {
		vspd = min(0, vspd + acceleration);
	}
} else {
	// Иначе, если мяч движется к AI игроку,
	// движемся за ним по вертикали, меняя вертикальную скорость
	if (y < obj_ball.y) {
		vspd = min(maxspd, vspd + acceleration);
	} else {
		vspd = max(-maxspd, vspd - acceleration);
	}
}

// Увеличиваем вертикальную позицию
// на значение вертикальной скорости
y += vspd;

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// @description Инициализация

// Задаём рандомайзер
randomize();

// Выбираем направление первоначального броска
if (irandom(1)) {
	// Налево верхняя и нижняя часть
	direction = random_range(135, 225);
} else {
	// Направо
	if (irandom(1)) {
		// Направо верхняя часть
		direction = random_range(0, 45);
	} else {
		// Направо нижняя часть
		direction = random_range(315, 359);
	}
}

// Начальная скорость
speed = 1;