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

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

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

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

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

Надо написать своего бота для героя, который обыграет других ботов по очкам. Каждый игрок играет на своем поле.

Игрок может отдавать команды ACT(X, Y, N), где X, Y - координаты клетки, а N - предположительное число.

Если игрок угадал число - ему начислятся бонусные +10 очков. Если не угадает - штрафные -10 очков. Игрок может выиграть игру, если отгадает все числа - за это он получит сразу много +1000 бонусных очков. Так же игрок может запросить новую игру командой ACT(0) - в этом случае он получит -500 (штрафных) очков.

Очки суммируются. Побеждает игрок с большим числом очков (до условленного времени).

Итак, игрок регистрируется на сервере, указывая свой 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=☼☼☼☼☼☼☼☼☼☼☼☼☼☼53 ☼ 7 ☼   ☼☼6  ☼195☼   ☼☼ 98☼   ☼ 6 ☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼8  ☼ 6 ☼  3☼☼4  ☼8 3☼  1☼☼7  ☼ 2 ☼  6☼☼☼☼☼☼☼☼☼☼☼☼☼☼☼ 6 ☼   ☼28 ☼☼   ☼419☼  5☼☼   ☼ 8 ☼ 79☼☼☼☼☼☼☼☼☼☼☼☼☼☼

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

☼☼☼☼☼☼☼☼☼☼☼☼☼
☼53 ☼ 7 ☼   ☼
☼6  ☼195☼   ☼
☼ 98☼   ☼ 6 ☼
☼☼☼☼☼☼☼☼☼☼☼☼☼
☼8  ☼ 6 ☼  3☼
☼4  ☼8 3☼  1☼
☼7  ☼ 2 ☼  6☼
☼☼☼☼☼☼☼☼☼☼☼☼☼
☼ 6 ☼   ☼28 ☼
☼   ☼419☼  5☼
☼   ☼ 8 ☼ 79☼
☼☼☼☼☼☼☼☼☼☼☼☼☼

Первый символ строки соответствует ячейке расположенной в левом верхнем углу и имеет координату [0, 0]. Ограждения игнорируются.

 123 456 789
 ☼☼☼☼☼☼☼☼☼☼☼☼☼
1☼   ☼   ☼   ☼
2☼   ☼   ☼   ☼
3☼   ☼   ☼   ☼
 ☼☼☼☼☼☼☼☼☼☼☼☼☼
4☼   ☼   ☼   ☼
5☼   ☼   ☼   ☼
6☼   ☼   ☼   ☼
 ☼☼☼☼☼☼☼☼☼☼☼☼☼
7☼   ☼   ☼   ☼
8☼   ☼   ☼   ☼
9☼   ☼   ☼   ☼
 ☼☼☼☼☼☼☼☼☼☼☼☼☼

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

Пустое место – циферку в котором предстоит отгадать

NONE(' ')

Cтена в которой можно просверлить дырочку слева или справа от героя (в зависимости от того, куда он сейчас смотрит)

BORDER('☼')

Далее исходные правильные циферки, а так же те, которыми походил игрок (возможно ошибочные)

ONE...NINE('1...9')

Если ты походил неправильно, ты можешь переиграть командой ACT(X, Y, M) для другого значения M. Изменять изначально расставленные циферки можно либо указав новую циферку для той же координаты, либо сбросив ее значение командой ACT(X, Y, 0).

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

Команд две ACT(X, Y, N) - поставить циферку N в клеточу X:Y и ACT(0) - обновить игру.

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