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

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

В данной игре я не использовал разбиение кода на скрипты. Вся логика помещена в событиях объектов: 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;