Хабрахабр

[Из песочницы] Игра для программистов FuncBall

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

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

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

пример кода FuncBall

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

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

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

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

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»