Игровой demo-сервер доступен так же в интернете 24/7 в целях ознакомления http://codenjoy.com/codenjoy-contest
Игра с открытым исходным кодом. Для реализации своей игры, исправления ошибок в текущей и внесения других правок необходимо для начала форкнуть проект. В корне репозитория есть описание в файле Readme.md - там описано, что делать дальше.
По возникающим вопросам, пиши в skype:alexander.baglay или на почту apofig@gmail.com
В чем суть игры?
Надо написать своего бота для героя, который обыграет других ботов по очкам. Каждый игрок играет на своем поле. Герой может передвигаться по свободным ячейкам во все четыре стороны.
На своем пути герой может повстречать бомбу. Если герой нарвется на бомбу - погибнет. Герой заведомо не знает, где расположена бомба, а потому может попытаться разминировать участок в заданном направлении. За разминированную бомбу герой получит бонусные очки. За смерть - штрафные. Очки суммируются.
Понять есть ли бомбы вокруг клеточки можно пройдя по ней. Если а ней значится циферка - значит вокруг клеточки соответствующее количество бомб. Если циферки нет - вокруг все тихо.
Побеждает игрок с большим числом очков (до условленного времени). Мертвый герой тут же появляется на новом поле с рендомным расположением бомб.
Итак, игрок регистрируется на сервере, указывая свой 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=☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼*************☼☼*************☼☼*************☼☼*************☼☼*************☼☼*************☼☼*************☼☼*************☼☼*************☼☼**3‼*********☼☼**2☺‼********☼☼111‼*********☼☼ ************☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼
Длинна строки равна площади поля. Если вставить символ переноса строки каждые sqrt(length(string)) символов, то получится читабельное изображение поля.
☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼ ☼*************☼ ☼*************☼ ☼*************☼ ☼*************☼ ☼*************☼ ☼*************☼ ☼*************☼ ☼*************☼ ☼*************☼ ☼**3‼*********☼ ☼**2☺‼********☼ ☼111‼*********☼ ☼ ************☼ ☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼
Первый символ строки соответствует ячейке расположенной в левом верхнем углу и имеет координату [0, 0]. В этом примере — позиция героя (символ ☺) — [4, 11].
Расшифровка символов
Теман - место где еще не бывал сапер. Там может быть бомба
HIDDEN('*')
Индикатор количества мин вокруг
MINES("12345678")
Наш герой
DETECTOR('☺')
Флажок саппера. Если он был выставлен на мину - она тут нейтрализуется и цифры вокруг обновятся. Если нет - штраф.
FLAG('‼')
Трупик героя
BANG('Ѡ')
На секунду после смерти героя поле открывается и можно увидеть где были бомбы
HERE_IS_BOMB('☻')
...а так же какие бомбы удалось нейтрализовать
DESTROYED_BOMB('x')
Мин вокруг клетки нет
NONE(' ')
Границы поля
BORDER('☼')
Игра пошаговая, каждую секунду сервер посылает твоему клиенту (боту) состояние обновленного поля на текущий момент и ожидает ответа команды герою. За следующую секунду игрок должен успеть дать команду герою. Если не успел — герой стоит на месте.
Команд несколько: UP, DOWN, LEFT, RIGHT – приводят к движению героя в заданном направлении на 1 клетку; ACT + UP|DOWN|LEFT|RIGHT - выставить флажок в заданном направлении.
Первая задача – написать websocket клиента, который подключится к серверу. Затем заставить героя слушаться команды. Таким образом, игрок подготовится к основной игре. Основная задача – вести осмысленную игру и победить.