Игра получилась такой, как я и хотел — 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. При игре справа все координаты, номера квадратов, углы и номера игроков отражаются, т.е. команда будет играть точно так же как и на левой половине.
Редактор позволяет не писать весь код руками, а вставлять нужные функции по клику. Для каждой функции есть справка.
Когда команда готова, её можно загрузить на сервер (делается из редактора в игре). После этого она будет участвовать в регулярном чемпионате. Все загруженные команды будут играть между собой, а результаты и записи игр публиковаться на сайте. Как часто будут чемпионаты, зависит от заинтересованности участников. Пока ведётся набор команд для первого чемпионата.
На сайте также можно в любое время заказать матчи с выбранными командами. Команды сразу автоматически отправляются на отдельный сервер, где матчи играются, и обратно высылаются их записи, которые потом можно скачать и посмотреть.
Так что, приглашаю всех желающих поиграть! Думаю, что есть немало людей, кому может быть интересен такой проект, и надеюсь, что эта статья поможет найти их.
Комментарии (12)
CaerDarrow
21.12.2019 18:55Надо API, чтобы можно было нейросети друг с другом стравливать)
FuncBall Автор
21.12.2019 19:28Какое именно API вы имеете в виду? В личном кабинете можно заказать матчи любых команд (взимается небольшая плата).
nzeemin
22.12.2019 00:26+1Свой язык и среда разработки для такой задачи — так себе идея.
Как уже сказали, лучше было выставить API, чтобы код бота-клиента можно было писать на любом языке.
Код закрытый как я понимаю. Так что очень локально и поэтому не интересно.clackx
22.12.2019 01:23Вот только никакого бота-клиента тут нет, а свой язык нужен для того, чтобы описать правила поведения команды на поле с мячом.
Выиграет, как я понимаю, команда или с самым оптимальным/универсальным набором правил, или, наоборот, с самым большим и подробным списком правил для чуть ли не каждого возможного случая.
valergrad
22.12.2019 02:36+3Такая тип игр называется CodeGameChallenge и обычно людям разрешают писать на существующих языках, а не изучать чей-то чужой. Это не так сложно реализовать — чужой код компилируется в dll-ку и все.
FForth
22.12.2019 05:39Одна из программируемых стратегий игр-боёв реального времени
Grobots
P.S. Таблица результатов боёв
NooneAtAll
22.12.2019 16:55Судя по сайту на PHP, онлайн писать код пока нельзя будет? Ок. Сгодится
И, судя по единой ссылке на загрузку с ехе-шником внутри, программа предостовляется только на винду?
Я понимаю, что это ваш выбор, я не сужу. Но можно пожалуйста эту информацию на страничку с ссылкой на загрузку добавить? Предупреждать нас, нубов на линуксе, тоже надо :)FuncBall Автор
22.12.2019 16:56Пока только на винду, а там видно будет. Главное, чтобы интерес у людей к игре был.
fougasse
22.12.2019 19:30Непонятно, зачем было делать самопальный язык, если можно было использовать тот же python + cucumber и получить глобальную кросс-платформенность, расширяемось, загрузку он-лайн и прочее.
DeuterideLitium6
Забавно! А если на команды на английском сделать? Опционально конечно!
FuncBall Автор
Да, в планах добавить возможность писать на обоих языках.