Игровой 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 клиента, который подключится к серверу. Затем заставить героя слушаться команды. Таким образом, игрок подготовится к основной игре. Основная задача – вести осмысленную игру и победить.