Многие, как и я, любят футбольные симуляторы и многие увлекаются программированием. Когда-то, в далёком 2004 году, наигравшись в ФИФУ я подумал, что было бы неплохо совместить два моих увлечения в одной игре, в которой игроки управлялись бы не вручную, а написанным для них скриптом. Этакая игра для программистов, а-ля «RoboCup Simulation Soccer», только на свой лад. Я тогда был начинающим программистом и написал уже несколько простеньких игр, но реализовать свою задумку в полной мере не смог, так как не придумал, как написать подходящий интерпретатор языка программирования игроков. Игр для программистов сейчас стало больше, но такую, как я хотел не нашёл, и спустя много лет и тонны написанного кода, я решил вернуться к своей давней задумке.
Игра получилась такой, как я и хотел — funcball.com.
Синтаксис языка традиционный:
Есть форма записи без скобок, более привычная для непрограммистов:
Вот ещё пример:
В данном случае проверяется, что если мяч не у третьего игрока, то бежать в 10-й квадрат поля. Символ доллара производит выход из скрипта.
Вложенность поддерживается и приветствуется:
В этом примере есть условие «игрок3_открыт». Это функция с включением аргумента (3 — номер игрока) в имя, что на мой взгляд понятно и удобочитаемо.
В коде можно использовать так называемые макросы, вместо которых во время выполнения подставляются соответствующие значения. Пример паса на ход игроку 4:
[X4+50] это увеличенная на 50 координата X игрока 4, а [Y4] — его Y координата. Перед выполнением этой команды, макросы в квадратных скобках будут заменены на конкретные значения, и она будет выглядеть, например, так: отправить_мяч:254,190.
В макросах могут использоваться встроенные макросные функции. Пример, если расстояние от игрока до ворот противника менее 150 пикселей, то бить по воротам:
X и Y заменятся на координаты игрока, а D(X,Y,559,188) будет заменено на вычисленное расстояние от этой точки до точки с координатами 559,188 (координаты ворот). Если оно меньше 150, то весть макрос будет заменён на True (Истина), а если нет, то на False (Ложь), и получится: Если(True){бить_по_воротам}.
Поле я решил оставить в привычном горизонтальном виде. Начало координат стандартное — левый верхний угол. При программировании игроков надо считать, что они начинают на левой половине поля. Номера своих игроков 1-4, а чужих 5-8. При игре справа все координаты, номера квадратов, углы и номера игроков отражаются, т.е. команда будет играть точно так же как и на левой половине.
Редактор позволяет не писать весь код руками, а вставлять нужные функции по клику. Для каждой функции есть справка.
Когда команда готова, её можно загрузить на сервер (делается из редактора в игре). После этого она будет участвовать в регулярном чемпионате. Все загруженные команды будут играть между собой, а результаты и записи игр публиковаться на сайте. Как часто будут чемпионаты, зависит от заинтересованности участников. Пока ведётся набор команд для первого чемпионата.
На сайте также можно в любое время заказать матчи с выбранными командами. Команды сразу автоматически отправляются на отдельный сервер, где матчи играются, и обратно высылаются их записи, которые потом можно скачать и посмотреть.
Так что, приглашаю всех желающих поиграть! Думаю, что есть немало людей, кому может быть интересен такой проект, и надеюсь, что эта статья поможет найти их.
Игра получилась такой, как я и хотел — funcball.com.
- Для каждого из 4 игроков пишется код из условий и действий, который выполняется каждые 50 мс.
- Каждый игрок управляет только собой и не имеет доступа к памяти других, но может подавать им сигналы. Память реализуется флагами.
- Все игроки движутся с одинаковой постоянной скоростью, но тот, который с мячом чуть медленнее. Вратарей нет.
- Коды игроков выполняются в случайном порядке. Код вводящего мяч с центра выполняется первым.
- Скорость и продолжительность игры можно менять. Есть возможность записи матчей.
- Язык постарался сделать максимально понятным для новичков. Писать свои функции не требуется, т.к. встроенные позволяют программировать практически любое поведение игрока.
- Есть возможность соревноваться с другими командами на сайте игры.
Синтаксис языка традиционный:
Есть форма записи без скобок, более привычная для непрограммистов:
Вот ещё пример:
В данном случае проверяется, что если мяч не у третьего игрока, то бежать в 10-й квадрат поля. Символ доллара производит выход из скрипта.
Вложенность поддерживается и приветствуется:
В этом примере есть условие «игрок3_открыт». Это функция с включением аргумента (3 — номер игрока) в имя, что на мой взгляд понятно и удобочитаемо.
В коде можно использовать так называемые макросы, вместо которых во время выполнения подставляются соответствующие значения. Пример паса на ход игроку 4:
[X4+50] это увеличенная на 50 координата X игрока 4, а [Y4] — его Y координата. Перед выполнением этой команды, макросы в квадратных скобках будут заменены на конкретные значения, и она будет выглядеть, например, так: отправить_мяч:254,190.
В макросах могут использоваться встроенные макросные функции. Пример, если расстояние от игрока до ворот противника менее 150 пикселей, то бить по воротам:
X и Y заменятся на координаты игрока, а D(X,Y,559,188) будет заменено на вычисленное расстояние от этой точки до точки с координатами 559,188 (координаты ворот). Если оно меньше 150, то весть макрос будет заменён на True (Истина), а если нет, то на False (Ложь), и получится: Если(True){бить_по_воротам}.
Поле я решил оставить в привычном горизонтальном виде. Начало координат стандартное — левый верхний угол. При программировании игроков надо считать, что они начинают на левой половине поля. Номера своих игроков 1-4, а чужих 5-8. При игре справа все координаты, номера квадратов, углы и номера игроков отражаются, т.е. команда будет играть точно так же как и на левой половине.
Редактор позволяет не писать весь код руками, а вставлять нужные функции по клику. Для каждой функции есть справка.
Когда команда готова, её можно загрузить на сервер (делается из редактора в игре). После этого она будет участвовать в регулярном чемпионате. Все загруженные команды будут играть между собой, а результаты и записи игр публиковаться на сайте. Как часто будут чемпионаты, зависит от заинтересованности участников. Пока ведётся набор команд для первого чемпионата.
На сайте также можно в любое время заказать матчи с выбранными командами. Команды сразу автоматически отправляются на отдельный сервер, где матчи играются, и обратно высылаются их записи, которые потом можно скачать и посмотреть.
Так что, приглашаю всех желающих поиграть! Думаю, что есть немало людей, кому может быть интересен такой проект, и надеюсь, что эта статья поможет найти их.