Игра для программистов в футбол
Решил я как-то сделать 2D игру, в которой надо программировать футбольную команду. Такие игры называют играми для программистов. И таки сделал, правда спустя много лет, но всё же сделал.
Для меня странно, что такая интересная, на мой взгляд, идея не была реализована до этого никем в более-менее привлекательном виде. Может я просто не знаю о таких проектах... Знаю о RoboCup 2D симуляторе, но это больше для любителей робототехники. Мне же хотелось игру с более общим уровнем программирования и максимально простым языком. Видел несколько 3D игр в этом направлении, но весьма специфических и мало походящих на футбол.
Хотя футбол или, например, хоккей - не принципиально, т.к. физика взаимодействия игрока с мячом/шайбой не важна и опускается при, скажем так, схематической реализации игры, т.е. когда игроки и спортивный снаряд - точки без какой-либо формы. А важна только тактика игры, и ничего лишнего. Игроки должны завести снаряд в ворота, как в футболе, так и в хоккее. Отличие в том, что в хоккее есть борт, и шайба не уходит за пределы поля. Есть возможность игры с отскоком шайбы от борта, но появляется проблема связанная с блокировкой шайбы в случае, если несколько игроков будут пытаться завладеть ей у борта. В общем, остановился я на футболе с 4 игроками.
И так, суть игры одним предложением: написать команду (код для каждого из 4 игроков), загрузить её на сайт и соревноваться с другими командами.
Код (скрипт) игроков состоит из условий и действий. Писать свои функции нет необходимости. Вы просто выбираете нужные из встроенных. Программирование игроков сводится к указанию, что должен делать игрок в той или иной ситуации. Можно перечислять все условия, но правильней делать сложные разветвлённые алгоритмы с вложенными условиями.
Как видите, всё на русском. Для меня важно, чтобы всё было понятно даже новичкам в программировании. Я также сделал возможность писать код в более привычном для непрограммистов виде:
В языке нет переменных, но есть возможность вычисления выражений и кэширования результатов для подстановки в любое место кода. Пример паса на ход игроку 4:
[X4+50] это увеличенная на 50 координата X игрока 4, а [Y4] - его Y координата.
Пример, если расстояние от игрока до ворот противника менее 150 пикселей, то бить по воротам:
X и Y заменятся на координаты игрока, а D(X,Y,559,188) будет заменено на вычисленное расстояние от этой точки до точки с координатами 559,188 (координаты ворот).
Отправить мяч в случайную точку, проверив открыта ли она:
R(min,max) - это функция, возвращающая случайное число. Как видите, для запоминания значений макросов в их начало добавляется id макроса и символ @. Значение первого макроса записывается в кэш с id 1, а второго c id 2. Потом они извлекаются из кэша макросами [1@] и [2@].
Чтобы не писать код руками, в редакторе можно вставлять нужные функции по клику. А если кликнуть правой кнопкой, то появится справка по интересующей функции.
После того, как команда создана и протестирована, её можно загрузить на сайт игры, после чего она будет участвовать в чемпионате, который будет проводиться несколько раз в месяц. Соревнования - очень важная штука, ведь писать команду просто так не интересно. Соревнования с командами других участников дают понять, насколько ваша команда хороша, и что нужно улучшить, чтобы побеждать. Кроме чемпионата на сайте есть возможность заказывать игры любых команд. Можно загрузить свою команду, выбрать с кем играть, и через несколько минут получить записи игр.
В целом, считаю, что игра получилась очень понятной и гибкой в плане программирования логики поведения игроков. Надеюсь, она будет интересна тем, кто любит игры для программистов. Присоединяйтесь и приглашайте друзей, ведь чем больше команд, тем интересней будут соревнования. И когда команд будет достаточно, возможно введение призового фонда! Жду ваших отзывов и предложений.