Многие, как и я, любят футбольные симуляторы и многие увлекаются программированием. Когда-то, в далёком 2004 году, наигравшись в ФИФУ я подумал, что было бы неплохо совместить два моих увлечения в одной игре, в которой игроки управлялись бы не вручную, а написанным для них скриптом. Этакая игра для программистов, а-ля «RoboCup Simulation Soccer», только на свой лад. Я тогда был начинающим программистом и написал уже несколько простеньких игр, но реализовать свою задумку в полной мере не смог, так как не придумал, как написать подходящий интерпретатор языка программирования игроков. Игр для программистов сейчас стало больше, но такую, как я хотел не нашёл, и спустя много лет и тонны написанного кода, я решил вернуться к своей давней задумке.

Игра получилась такой, как я и хотел — funcball.com.

игра для программистов FuncBall

  1. Для каждого из 4 игроков пишется код из условий и действий, который выполняется каждые 50 мс.
  2. Каждый игрок управляет только собой и не имеет доступа к памяти других, но может подавать им сигналы. Память реализуется флагами.
  3. Все игроки движутся с одинаковой постоянной скоростью, но тот, который с мячом чуть медленнее. Вратарей нет.
  4. Коды игроков выполняются в случайном порядке. Код вводящего мяч с центра выполняется первым.
  5. Скорость и продолжительность игры можно менять. Есть возможность записи матчей.
  6. Язык постарался сделать максимально понятным для новичков. Писать свои функции не требуется, т.к. встроенные позволяют программировать практически любое поведение игрока.
  7. Есть возможность соревноваться с другими командами на сайте игры.

Синтаксис языка традиционный:

пример кода FuncBall

Есть форма записи без скобок, более привычная для непрограммистов:

пример кода FuncBall

Вот ещё пример:

пример кода FuncBall

В данном случае проверяется, что если мяч не у третьего игрока, то бежать в 10-й квадрат поля. Символ доллара производит выход из скрипта.

Вложенность поддерживается и приветствуется:

пример кода FuncBall

В этом примере есть условие «игрок3_открыт». Это функция с включением аргумента (3 — номер игрока) в имя, что на мой взгляд понятно и удобочитаемо.

В коде можно использовать так называемые макросы, вместо которых во время выполнения подставляются соответствующие значения. Пример паса на ход игроку 4:

пример кода FuncBall

[X4+50] это увеличенная на 50 координата X игрока 4, а [Y4] — его Y координата. Перед выполнением этой команды, макросы в квадратных скобках будут заменены на конкретные значения, и она будет выглядеть, например, так: отправить_мяч:254,190.

В макросах могут использоваться встроенные макросные функции. Пример, если расстояние от игрока до ворот противника менее 150 пикселей, то бить по воротам:

пример кода FuncBall

X и Y заменятся на координаты игрока, а D(X,Y,559,188) будет заменено на вычисленное расстояние от этой точки до точки с координатами 559,188 (координаты ворот). Если оно меньше 150, то весть макрос будет заменён на True (Истина), а если нет, то на False (Ложь), и получится: Если(True){бить_по_воротам}.

Поле я решил оставить в привычном горизонтальном виде. Начало координат стандартное — левый верхний угол. При программировании игроков надо считать, что они начинают на левой половине поля. Номера своих игроков 1-4, а чужих 5-8. При игре справа все координаты, номера квадратов, углы и номера игроков отражаются, т.е. команда будет играть точно так же как и на левой половине.

Редактор позволяет не писать весь код руками, а вставлять нужные функции по клику. Для каждой функции есть справка.

редактор команд FuncBall

Когда команда готова, её можно загрузить на сервер (делается из редактора в игре). После этого она будет участвовать в регулярном чемпионате. Все загруженные команды будут играть между собой, а результаты и записи игр публиковаться на сайте. Как часто будут чемпионаты, зависит от заинтересованности участников. Пока ведётся набор команд для первого чемпионата.
На сайте также можно в любое время заказать матчи с выбранными командами. Команды сразу автоматически отправляются на отдельный сервер, где матчи играются, и обратно высылаются их записи, которые потом можно скачать и посмотреть.

Так что, приглашаю всех желающих поиграть! Думаю, что есть немало людей, кому может быть интересен такой проект, и надеюсь, что эта статья поможет найти их.

Комментарии (12)


  1. DeuterideLitium6
    21.12.2019 16:16

    Забавно! А если на команды на английском сделать? Опционально конечно!


    1. FuncBall Автор
      21.12.2019 19:25

      Да, в планах добавить возможность писать на обоих языках.


  1. CaerDarrow
    21.12.2019 18:55

    Надо API, чтобы можно было нейросети друг с другом стравливать)


    1. FuncBall Автор
      21.12.2019 19:28

      Какое именно API вы имеете в виду? В личном кабинете можно заказать матчи любых команд (взимается небольшая плата).


  1. nzeemin
    22.12.2019 00:26
    +1

    Свой язык и среда разработки для такой задачи — так себе идея.
    Как уже сказали, лучше было выставить API, чтобы код бота-клиента можно было писать на любом языке.
    Код закрытый как я понимаю. Так что очень локально и поэтому не интересно.


    1. clackx
      22.12.2019 01:23

      Вот только никакого бота-клиента тут нет, а свой язык нужен для того, чтобы описать правила поведения команды на поле с мячом.
      Выиграет, как я понимаю, команда или с самым оптимальным/универсальным набором правил, или, наоборот, с самым большим и подробным списком правил для чуть ли не каждого возможного случая.


  1. valergrad
    22.12.2019 02:36
    +3

    Такая тип игр называется CodeGameChallenge и обычно людям разрешают писать на существующих языках, а не изучать чей-то чужой. Это не так сложно реализовать — чужой код компилируется в dll-ку и все.


  1. FForth
    22.12.2019 05:39

    Одна из программируемых стратегий игр-боёв реального времени
    Grobots

    P.S. Таблица результатов боёв



  1. NooneAtAll
    22.12.2019 16:55

    Судя по сайту на PHP, онлайн писать код пока нельзя будет? Ок. Сгодится

    И, судя по единой ссылке на загрузку с ехе-шником внутри, программа предостовляется только на винду?
    Я понимаю, что это ваш выбор, я не сужу. Но можно пожалуйста эту информацию на страничку с ссылкой на загрузку добавить? Предупреждать нас, нубов на линуксе, тоже надо :)


    1. FuncBall Автор
      22.12.2019 16:56

      Пока только на винду, а там видно будет. Главное, чтобы интерес у людей к игре был.


  1. fougasse
    22.12.2019 19:30

    Непонятно, зачем было делать самопальный язык, если можно было использовать тот же python + cucumber и получить глобальную кросс-платформенность, расширяемось, загрузку он-лайн и прочее.