Football codenjoy — как играть?

Игровой demo-сервер доступен так же в интернете 24/7 в целях ознакомления http://codenjoy.com/codenjoy-contest

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

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

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

Надо написать своего бота для героя, который взаимодействует с игроками или ботами своей команды и обыгрывают другую команду по очкам. Все играют на одном поле (администратор может задать ограничени на к-во участников). Герой может передвигаться по свободным ячейкам во все четыре стороны. Герой может ударить мяч в 4-х направлениях с разной силой (к-во ячеек, на которые будет сдвинут мяч после удара. Максимальное значение - 3). После удара мяч движется 3 такта. Первый такт - в соответствии с "приложенной силой", остальные - по одной ячейке

Задача команды - забить гол в ворота соперника. Каждый гол - это + 1 очко всей команде

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

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

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

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

ws://codenjoy.com:80/codenjoy-contest/ws?user=3edq63tw0bq4w4iem7nb&code=12345678901234567890

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

ws://server_ip:8080/codenjoy-contest/ws?user=3edq63tw0bq4w4iem7nb&code=12345678901234567890

Тут 'user' - id игрока, a 'code' - твой security token, его ты можешь получить из адресной строки браузера после регистрации/логина

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

^board=(.*)$

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

board=☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼          $                 ☼☼                            ☼☼   $              $         ☼☼                       $    ☼☼  $                         ☼☼                            ☼☼        ☻x                  ☼☼               ☺            ☼☼        $ x                 ☼☼        $  x                ☼☼                            ☼☼ $         x               $☼☼         x                  ☼☼         x    $             ☼☼         x                  ☼☼    $                       ☼☼                            ☼☼                       $    ☼☼                            ☼☼                            ☼☼                            ☼☼            $               ☼☼                            ☼☼                            ☼☼       $                $   ☼☼                            ☼☼                $           ☼☼                            ☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼

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

☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼
☼☼☼☼☼☼☼☼☼☼☼☼☼┴┴┴┴┴┴┴☼☼☼☼☼☼☼☼☼☼☼☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼               ☺              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼               ∙              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼                              ☼
☼☼☼☼☼☼☼☼☼☼☼☼☼┬┬┬┬┬┬┬☼☼☼☼☼☼☼☼☼☼☼☼
☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼

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

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

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

NONE(' ')

Границы поля, за которые выходить нельзя

WALL('☼')

Наш герой

HERO('☺')

Наш герой, если он с мячем

OTHER_HERO('☻')

Игрок нашей команды

TEAM_MEMBER('♦')

Игрок нашей команды, если он с мячем

TEAM_MEMBER_W_BALL('♥')

Соперник

ENEMY('♣')

Соперник, если он с мячем

ENEMY_W_BALL('♠')

Это мяч, который в движении

BALL('*')

Это мяч, когда он не движется

STOPPED_BALL('∙')

Наши ворота

MY_GOAL('=')

Ворота соперника

ENEMY_GOAL('⌂')

Мяч в воротах

HITED_GOAL('x')

Гол в наши ворота

HITED_MY_GOAL('#')

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

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

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