Battlecity codenjoy — how to play?

В принципе, игровой сервер доступен сейчас в целях ознакомления http://codenjoy.com/codenjoy-contest

В чем суть игры?

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

За убийство врагов боту игрока начисляются очки. За смерть танка начисляются штрафные очки. Очки суммируются. Побеждает игрок с большим числом очков (до условленного времени). Мертвый танк тут же появляется в random месте на поле.

Итак, игрок регистрируется на сервере, указывая свой email

Далее необходимо подключиться из кода к серверу через вебсокеты. Это Maven проект и подойдет он дял игры на JVM языках. Как его запустить смотри в корне README.txt

Для других языков придется написать свой клиент (а после пошарить с нами на почту: apofig@gmail.com)

Адрес для подключения к игре на сервере http://codenjoy.com:

ws://tetrisj.jvmhost.net:12270/codenjoy-contest/ws?user=email

Адрес для подключения к игре на сервере, развернутом в локальной сети:

ws://server_ip:8080/codenjoy-contest/ws?user=email

Тут email - имейл, указанынй при регистрации на сервере.

После подключения клиент будет регулярно (каждую секунду) получать строку символов — с закодированным состоянием поля. Формат таков

^board=(.*)$

с помощью этого regexp можно выкусить строку доски. Вот пример строки от сервера:

board=☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼             ☼☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼☼ ╬ ╬ ╬ ╬ ╬˅╬ ☼☼ ╬ ╬˂╬ ╬ ╬ ╬ ☼☼ ╬ ╬ ╬ ╬ ╬•╬ ☼☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼☼ ╬ ╬ ╠ ╬ ╬ ╬ ☼☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼☼ ╬▲╬ ╬ ╬ ╬ ╬ ☼☼             ☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼

Длинна строки равна площади поля. Если вставить символ переноса строки каждые sqrt(length(string)) символов, то получится читабельное изображение поля.

☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼
☼             ☼
☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼
☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼
☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼
☼ ╬ ╬ ╬ ╬ ╬˅╬ ☼
☼ ╬ ╬˂╬ ╬ ╬ ╬ ☼
☼ ╬ ╬ ╬ ╬ ╬•╬ ☼
☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼
☼ ╬ ╬ ╠ ╬ ╬ ╬ ☼
☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼
☼ ╬ ╬ ╬ ╬ ╬ ╬ ☼
☼ ╬▲╬ ╬ ╬ ╬ ╬ ☼
☼             ☼
☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼

Первый символ строки соответствует ячейке расположенной в левом верхнем углу и имеет координату [0, 0]. В этом примере — позиция танка (символ ▲) — [12, 3].

Расшифровка символов

Пустое место – по которому может двигаться танк

GROUND(' ')

Неразрушаемая стена

WALL('☼')

Уничтоженный танк игрока (уже в следующую секунду появится новый)

DEAD('Ѡ')

Далее следуют изображения разрушаемых стен. Цифры тут указывают на количество выстрелов, необходимых для разрушения стен полностью. Cтены со временем восстанавливаются.

CONSTRUCTION('╬', 3)
CONSTRUCTION_DESTROYED_DOWN('╩', 2)
CONSTRUCTION_DESTROYED_UP('╦', 2)
CONSTRUCTION_DESTROYED_LEFT('╠', 2)
CONSTRUCTION_DESTROYED_RIGHT('╣', 2),
CONSTRUCTION_DESTROYED_DOWN_TWICE('╨', 1)
CONSTRUCTION_DESTROYED_UP_TWICE('╥', 1)
CONSTRUCTION_DESTROYED_LEFT_TWICE('╞', 1)
CONSTRUCTION_DESTROYED_RIGHT_TWICE('╡', 1)
CONSTRUCTION_DESTROYED_LEFT_RIGHT('│', 1)
CONSTRUCTION_DESTROYED_UP_DOWN('─', 1)
CONSTRUCTION_DESTROYED_UP_LEFT('┌', 1)
CONSTRUCTION_DESTROYED_RIGHT_UP('┐', 1)
CONSTRUCTION_DESTROYED_DOWN_LEFT('└', 1)
CONSTRUCTION_DESTROYED_DOWN_RIGHT('┘', 1)

Это снаряд, как дружественный так и вражеский

BULLET('•')

Танк игрока

TANK_UP('▲')
TANK_RIGHT('►')
TANK_DOWN('▼')
TANK_LEFT('◄')

Вражеский танк (автобот или игрок-соперник)

OTHER_TANK_UP('˄')
OTHER_TANK_RIGHT('˃')
OTHER_TANK_DOWN('˅')
OTHER_TANK_LEFT('˂')

Игра пошаговая, каждую секунду сервер посылает твоему клиенту (боту) состояние обновленного поля на текущий момент и ожидает ответа команды танку. За следующую секунду игрок должен успеть дать команду танку. Если не успел — танк остается на месте.

Команд несколько: UP, DOWN, LEFT, RIGHT – приводят к развороту и передвижению танка в заданном направлении на 1 клетку; ACT - выстрел снаряда. Команды движения можно комбинировать с командами выстрела, разделяя их через запятую – это значит что за один такт игры будет выстрел, а потом движение (LEFT, ACT) или наоборот (ACT, LEFT)

Первая задача – написать websocket клиента, который подключится к серверу. Затем заставить танк слушаться команды. Таким образом, игрок подготовится к завтрашней игре. Вторая задача – вести осмысленную игру и победить.

Игра с открытым исходным кодом. Для реализации своей игры, исправления ошибок в текущей и внесения других правок необходимо для начала форкнуть проект. В корне репозитория есть описание в файле Readme.md - там описано, что делать дальше.

По возникающим вопросам, пиши в skype:alexander.baglay или на почту apofig@gmail.com