Игровой demo-сервер доступен так же в интернете 24/7 в целях ознакомления http://codenjoy.com/codenjoy-contest
Игра с открытым исходным кодом. Для реализации своей игры, исправления ошибок в текущей и внесения других правок необходимо для начала форкнуть проект. В корне репозитория есть описание в файле Readme.md - там описано, что делать дальше.
По возникающим вопросам, пиши в skype:alexander.baglay или на почту apofig@gmail.com
Проект игры (для написания своего бота) брать ЗДЕСЬ
Читая инструкцию, помните: процессе написания бота Вам необходимо заботится только о логике перемещений вашего бота. Все необходимые вспомогательные вещи уже сделаны за Вас.
В чем суть игры?
Надо написать своего бота для змейки, который обыграет других ботов по очкам. Все играют на одном поле. Змейка может передвигаться по свободным ячейкам во все четыре стороны, но не может возвращаться в предыдущую клетку.
На своем пути змейка может повстречать камень, золото, таблеку ярости, таблетку полёта, яблоко или другую змейку. Если змейка нарвется на камень - уменьшается на 4 единицы. Если змейка меньше двух клеток - погибнет. За золото, яблоки, в случае смерти других змеек, змейка получит бонусные очки. За свою смерть и за камни - штрафные. Очки суммируются.
Побеждает игрок с большим числом очков (до условленного времени). Мертвая змейка тут же появляется на одном из свободных стартовых полей и ждёт начала следующего раунда (события старта).
Итак, игрок регистрируется на сервере, указывая свой 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, его ты можешь получить из адресной строки браузера после регистрации/логина
После подключения клиент будет регулярно (каждую секунду) получать строку символов — с закодированным состоянием поля. Формат таков
Длинна строки равна площади поля. Если вставить символ переноса строки каждые sqrt(length(string)) символов, то получится читабельное изображение поля.
Разбор поля в читабельный вид тоже уже выполнен.
Пример поля:
В текстовом виде
☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼ ☼☼ ☼ ☼☼ $ ☼ ☼☼ @☼ ☼# ▲☼ ☼☼ ║☼ ☼☼ ○ ║☼ ☼# ║☼ ☼☼ ╘═╝☼ ☼☼ % ☼ ☼☼ ×—> ☼ ☼☼ ☼ ☼☼ ● ☼ ☼☼ ☼ ☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼
UI из спрайтов:
Расшифровка символов в файле Elements:

NONE(' ')

WALL('☼')

START_FLOOR('#')

APPLE('○')

STONE('●')

FLYING_PILL('©')

FURY_PILL('®')

GOLD('$')

HEAD_DOWN('▼')

HEAD_LEFT('◄')

HEAD_RIGHT('►')

HEAD_UP('▲')

HEAD_DEAD('☻')

HEAD_EVIL('♥')

HEAD_FLY('♠')

HEAD_SLEEP('&')

TAIL_END_DOWN('╙')

TAIL_END_LEFT('╘')

TAIL_END_UP('╓')

TAIL_END_RIGHT('╕')

TAIL_INACTIVE('~')

BODY_HORIZONTAL('═')

BODY_VERTICAL('║')

BODY_LEFT_DOWN('╗')

BODY_LEFT_UP('╝')

BODY_RIGHT_DOWN('╔')

BODY_RIGHT_UP('╚')

ENEMY_HEAD_DOWN('˅')

ENEMY_HEAD_LEFT('<')

ENEMY_HEAD_RIGHT('>')

ENEMY_HEAD_UP('˄')

ENEMY_HEAD_DEAD('☺')

ENEMY_HEAD_EVIL('♣')

ENEMY_HEAD_FLY('♦')

ENEMY_HEAD_SLEEP('ø')

ENEMY_TAIL_END_DOWN('¤')

ENEMY_TAIL_END_LEFT('×')

ENEMY_TAIL_END_UP('æ')

ENEMY_TAIL_END_RIGHT('ö')

ENEMY_TAIL_INACTIVE('*')

ENEMY_BODY_HORIZONTAL('—')

ENEMY_BODY_VERTICAL('|')

ENEMY_BODY_LEFT_DOWN('┐')

ENEMY_BODY_LEFT_UP('┘')

ENEMY_BODY_RIGHT_DOWN('┌')

ENEMY_BODY_RIGHT_UP('└')
Элементы туловища и хвоста змеек можно посмотреть в файле Elements.
Игра пошаговая, каждую секунду сервер посылает твоему клиенту (боту) состояние обновленного поля на текущий момент и ожидает ответа команды герою. За следующую секунду игрок должен успеть дать команду герою. Если не успел — змейка продолжает движение в прежнем направлении(изначальное направление - направо).
Команд несколько: UP, DOWN, LEFT, RIGHT – приводят к движению героя в заданном направлении на 1 клетку; ACT - оставить камень (если есть съеденые камни). Камень остаётся на месте хвоста змейки. При помощи камней можно строить препядствия и блокировать соперников. Команды движения можно комбинировать с командой ACT, разделяя их через запятую – это значит что за один такт игры будет оставлен камень, а потом движение (LEFT, ACT) или наоборот (ACT, LEFT)
Ваша задача – заставить вашу змейку следовать придуманному алгоритму. Алгоритм змейки должен блокировать (и тем самым уничтожать) змей соперников, используя бонусы. Основная задача – вести осмысленную игру и победить.
Правила борьбы:
Негативные воздействия:
Змейка, врезавшаяся в стену, погибает.
Змейка, врезавшаяся в другую змейку, погибает.
Змейка должна быть не менее 2х клеток длиной, иначе она погибает.
Змейка, съевшая камень, укорачивается на 3 единицы (если становится меньше 2 - погибает).
Позитивные воздействия:
Змейка, съевшая яблоко, увеличивается на 1.
Змейка, съевшая таблетку полёта, в течении 10 ходов летает над камнями и другими змеями.
Змейка, съевшая таблетку ярости, в течении 10 ходов может откусывать куски от других змей, а так же поедать камни без уменьшения длины.
Змейка, съевшая золото, просто получает дополнительные очки.
Особые случаи:
Змеям разрешено откусывать свой собственный хвост. При этом длина змеи уменьшается, больше никаких последствий.
При столкновении змей лоб в лоб, меньшая змея погибает. Большая змея при этом укорачивается на длину меньшей.
(если становится меньше 2, тоже погибает)
При столкновении двух змей, одна из которых под воздействием таблетки полёта, не происходит ничего.
При столкновении двух змей, всегда побеждает змея, находящаяся под воздействием таблетки ярости.
При столкновении двух змей, когда обе под воздействием таблетки ярости, действуют обычные правила столкновений.
Удачи! И пусть победит хитрейший! =)
Подсказки:
Для реализации своего алгоритма можно использовать уже готовый класс DeikstraFindWay и (в частности) метод getShortestWay().
Если не знаете что написать, попробуйте реализовать следующие варианты алгоритмов:
- Перемещение в случайную сторону, если соответствующая клетка свободна.
- Движение на свободную клетку в сторону ближайшего яблока.
- Движение к тому яблоку, добраться до которого можно быстрее других.
- Уклонение от более длинных соперников и от соперников в состоянии ярости.
- Блокировка собой предполагаемых маршрутов соперника.
Максимальное количество игроков определяется количеством стартовых точек на карте.(15 для текущей карты)