Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров8.9K
Многие, как и я, любят футбольные симуляторы и многие увлекаются программированием. Когда-то, в далёком 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

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

Так что, приглашаю всех желающих поиграть! Думаю, что есть немало людей, кому может быть интересен такой проект, и надеюсь, что эта статья поможет найти их.
Теги:
Хабы:
Всего голосов 26: ↑21 и ↓5+26
Комментарии12

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань