Игровой demo-сервер доступен так же в интернете 24/7 в целях ознакомления http://codenjoy.com/codenjoy-contest
Игра с открытым исходным кодом. Для реализации своей игры, исправления ошибок в текущей и внесения других правок необходимо для начала форкнуть проект. В корне репозитория есть описание в файле Readme.md - там описано, что делать дальше.
По возникающим вопросам, пиши в skype:alexander.baglay или на почту apofig@gmail.com
В чем суть игры?
Надо написать своего бота для змейки, который обыграет других ботов по очкам. Каждый игрок играет на своем поле. Змейка может передвигаться по свободным ячейкам во все четыре стороны.
На своем пути змейка может повстречать яблочко, камень, свой хвост и стену. В случае если змейка съест яблочко - она удлиннится на 1. Если же испробует камень - укоротится на 10 клеток. Если ее длинна меньше 10 - съев камень она погибнет. Если змейка попробует на вкус себя или стену - так же погибнет.
За съеденные яблочки игроку начисляются бонусные очки в размере длинны змейки на данный момент за каждое яблоко. За смерть змейки - могут отниматься штрафные очки (по-умолчанию 0, уточни у ведущего мероприятия). Очки суммируются. Побеждает игрок с большим числом очков (до условленного времени). Мертвая змейка тут же пропадает и на поле появляется новая.
Итак, игрок регистрируется на сервере, указывая свой 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=☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼ ☼☼ ☻ ☼☼ ☺☼☼ ▲☼☼ ║☼☼ ║☼☼ ║☼☼ ╙☼☼ ☼☼ ☼☼ ☼☼ ☼☼ ☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼
Длинна строки равна площади поля. Если вставить символ переноса строки каждые sqrt(length(string)) символов, то получится читабельное изображение поля.
☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼ ☼ ☼ ☼ ☻ ☼ ☼ ☺☼ ☼ ▲☼ ☼ ║☼ ☼ ║☼ ☼ ║☼ ☼ ╙☼ ☼ ☼ ☼ ☼ ☼ ☼ ☼ ☼ ☼ ☼ ☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼
Первый символ строки соответствует ячейке расположенной в левом нижнем углу и имеет координату [0, 0]. В этом примере — позиция головы змейки (символ ▲) — [13, 10], а камня (символ ☻) - [7, 12].
Расшифровка символов
Пустое место – по которому может двигаться змейка
NONE(' ')
Cтена
WALL('☼')
Яблоко
APPLE('☺')
Изображения тела змейки
TAIL("╙╘╓╕═║╗╝╔╚")
Голова змейки в зависимости от направления движения
HEAD("◄►▲▼")
Какушка
STONE('☻')
Но если клиент реализован на твоем языке программирования - у тебя будет возможность использовать более высокоуровневое API: Board - инкапсулирующий эту строку с полезными методами для поиска элементов на доске, и YourSolver - пустой класс одним методом - его тебе и предстоит наполнить умной логикой.
Игра пошаговая, каждую секунду сервер посылает твоему клиенту (боту) состояние обновленного поля на текущий момент и ожидает ответа команды змейке. За следующую секунду игрок должен успеть дать команду змейке. Если не успел — змейка движется по инерции (пока не найдет стенку).
Команд несколько: UP, DOWN, LEFT, RIGHT – приводят к повороту головы змейки в заданном направлении. Напомню, что змея движется по инерции.
Для начала заставь змейку слушаться твои команды. Если же клиента для твоего языка нет, то все несколько усложняется - тебе предстоит написать WebSocket клиента. Так ты подготовишься к основной игре. Дальше твоя задача написать бота, который проведет осмысленную игру на поле и победит.