Перейти к содержимому

AI, Minecraft и Node.js

14/10/2011

Пару месяцев назад я записался на онлайн-курс Artificial Intellingence от Stanford University. И пока курс не начался (он начался только в понедельник 10 октября) пришла ко мне мысль сделать какую нибудь “песочницу” для тестирования разных алгоритмов, которые будут встречаться в курсе. Захотелось сделать такую песочницу из Minecraft.

Вначале я думал о том чтобы просто модифицировать клиент или написать к нему плагин. Но т.к. при модификации пришлось бы работать с декомпилированным (плохо читаемым) Java-кодом, а система плагинов пока оставляет желать лучшего, я переключил своё внимание на сервер. Тут дела были несколько лучше. Для Minecraft есть несколько серверов с открытым исходным кодом на разных языках — C, Java, Python, .NET и т.д. Покопавшись в них, а также покопавшись в nodecraft — заброшенной попытке написать minecraft-сервер на JavaScript, я решил все таки попробовать написать сервер самостоятельно, благо опыт работы с двоичными протоколами после разработки limestone у меня есть, да и во внутренности Minecraft я уже немного забирался (правда с Питоном). Протокол Minecraft описан (пусть даже немного неточно) в Minecraft Coalition wiki.

За первые пару дней я разобрался с последовательностью авторизации клиента и перешёл непосредственно к логину. Для логина сервер должен выслать клиенту местность вокруг места появления и всякие стартовые параметры типа времени сервера, содержимого инвентаря, точки респауна в случае если игрок погибнет и т.д. В IRC на канале #mcdevs меня сразу предупредили что отправка чанков клиенту это довольно сложная часть разработки и многие авторы серверов срезаются именно здесь. В результате двухдневных попыток подбора библиотеки сжатия и экспериментов с порядком пакетов отправить местность всё таки получилось. На следующий день после этого я прикрутил отправку keepalive-пакетов (без этого время пребывания на сервере ограничивалось одной минутой) и добавил респаун мобов и их движение. Теперь осталось только добавить определение столкновений, чтобы делать лабиринты, и можно приступать к заданиям второй главы курса — алгоритмам поиска пути.

Когда доделаю сервер будет видимо отдельный большой пост о протоколе Minecraft, написании сервера и насколько он на самом деле подходит для тестирования AI-алгоритмов. Пока мои наработки можно найти на Github. Сервер я назвал blackstone (на #mcdevs предлагали node-minecraft, но по моему это скорее название для какой нибудь библиотеки утилит).

Комментарии (6)
  1. Круто! Интересно, насколько node подходит для написания подобного рода серверов – с какими граблями столкнешься

    • Ну из того что вижу пока — работа с модулем сжатия асинхронна, это не слишком удобно (хотя потом всё равно будет скрыто системой событий для пакетов). Из тех граблей что предполагаю впоследствии: работа с очень длинными целыми числами (JS для этого не очень подходит). Но в целом пока получается неплохо.

  2. Хотелось бы как-то подключиться к процессу разработки.

    • На [URL=https://github.com/kurokikaze/BlackStone]Github[/URL] можно например.

      • Да не, я знаю как форкать :) Фолловлю там тебя и в твиттере уже давно. И на форему ноды вместе сидим :)
        Хотелось поболтать :) Ты все еще планируешь активно продолжать разработку ? Какие туду, приоритеты, насколько рабочая данная версия и т.д.

        • Вообще я планировал его использовать для визуализации алгоритмов поиска пути. Ну и всяких экпериментов вообще. В планах было выделить мобов в нормальные сущности с функциями движения, и разобраться с гравитацией.

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 496 other followers