Стив пишет заклинания на Python. Обучение детей программированию в Minecraft
Я не имею в виду создание и использование модов, это слишком высокий уровень входа. Первые попытки были после знакомства с первым изданием книги Minecraft. Программируй свой мир и удачной настройки сервера Bukkit на домашней машине. На данный момент (начало 2021 г.) есть второе издание, ссылка как раз на него а также несколько похожих книг других авторов. Второе издание хорошо тем, что в нем исправлены ошибки в коде, которые были в первом, а также используется Python3 и более новая версия сервера. Вот тут на Хабре обзор первого издания от издательства Питер.
На странице издательства Wiley есть несколько видео для упрощения, самое первое как раз об установке и настройке сервера Bukkit, отдельно установка Python (не Anaconda, из простого дистрибутива), тьюториал подключения к запущенному серверу и запуска в нем HelloWorld из питоновского IDLE.
Библиотека mcpi была изначально написана для запуска python-скриптов в Майнрафте на Raspberry Pi. Версия Minecraft для Raspberry Pi распространяется бесплатно. Сейчас mcpi работает под Windows. Качать отдельно ее не надо, все входит в состав Bukkit-сервера.
Вертикальные и наклонные столбы
Программируем в мире Minecraft
Хабр, привет! Пока все обсуждают ИИ в мире Pacman, мы начнем делать свой ИИ в Minecraft с фреймворком Malmo от Microsoft Research. Pacman у нас тоже появится. Если вы любите кубический мир, или вам хотелось бы начать изучать искусственный интеллект, или у вас есть дети, с которыми вы не можете найти общие увлечения, или же вас просто заинтересовала тема – прошу под кат.
В этой статье я постараюсь затронуть несколько тем:
Minecraft: моя предыстория
Я познакомилась с игрушкой, будучи уже студенткой. Это не помешало мне в тот же день отложить все свои личные, рабочие и академические цели, и целиком уйти в кубическую вселенную. Отпустило меня тогда только через месяц, но до сих пор я с радостью захожу иногда побегать часок по любимому миру.
Для меня Minecraft стал продолжением любимой игрушки детства – Lego, исправив ее главный недостаток: постоянную нехватку деталей. Аналог Lego с безлимитными деталями, что может быть лучше.
Изучая сабж, я случайно узнала, что мир Minecraft не ограничивается игрой, мерчем, летсплеями и фан артами. В игре снимают целые сериалы, и – неожиданно – они являются довольно популярными. На мой взгляд, это забавно.
Меня очень обрадовала новость о наличии open source фреймворка для программирования в мире Minecraft. Я твердо уверена, что в будущем в подавляющем числе профессий могут понадобиться базовые навыки программирования. Фреймворк на базе любимой игрушки, на мой взгляд, отличный способ показать ребенку захватывающий мир программирования.
Malmo: основная идея
Фреймворк Malmo был создан совместными усилиями нескольких исследователей, главной целью которых было адаптировать интересный мир к экспериментам в области искусственного интеллекта. Алгоритмов ИИ по-прежнему относительно мало, и все они имеют огромный потенциал для более детального изучения и усовершенствования. Мне очень нравится, что Microsoft создает дополнительную мотивацию к изучению неизведанного.
Технические моменты
Установка
Несмотря на четкое следование инструкции, вы можете столкнуться с целым рядом проблем в процессе установки. Мои проблемы в основном были связаны с тем, что некоторые компоненты у меня уже были поставлены, но версия отличалась. Все проблемы лечатся с помощью всем известного сайта.
Поддержка ОС и языков программирования
Несмотря на смелое заявление о поддержке всех трех популярных ОС, мне показалось, что тестирование было как следует проведено лишь для ОС Windows. Победив проблемы с установкой, ваша головная боль на ОС Windows обещает закончиться. На Linux проблемы, скорее всего, продолжатся, так как поднятый сервер периодически падает, не сообщая причин. Если вы продолжите мои эксперименты – обязательно пишите в комментарях о вашем опыте.
Авторы постарались поддержать большое число популярных языков и сделали обвязки для C#, C++, Lua, Python2 и Java. Я выбрала Python.
Как играть программировать в Malmo
Логику для каждого из человечков вы можете реализовать в коде, а также можно управлять персонажем самостоятельно всем знакомыми клавишами AWSD.
Кроме сервака с клиентом и файла с логикой, мы также имеем xml файл с описанием начального состояния мира. Авторы не настаивают на его существовании, и в своих примерах они часто кладут его в строку и хранят в коде, но, на мой взгляд, удобнее сразу сделать его отдельным файлом, добавляя нужные куски по мере необходимости.
Авторы позаботились о нас и сделали внушительное число примеров, добавив к ним описание.
Мой совет: не пытайтесь начинать с нуля, возьмите за базу первый пример. В нем ничего не происходит, мы просто создаем самый простой плоский мир и присоединяемся к персонажу. В цикле while в конце вы можете по своему усмотрению добавить экшена в происходящее. Например, напишите там:
В xml файле вы можете задать режим игры:
Задайте начальное время, позицию персонажа, кастомизируйте мир: сделайте его плоским или приближенным к реальности.
Вот этот код нарисует вам Пакмана, который поедает шарики и уходит в радужный кратер:
Наконец, в xml можно добавить необходимые координаты для добавления обзора персонажу:
По умолчанию у нас нет возможности осмотреться и получить информацию о ближайших блоках. Тем не менее, мы можем сказать, что хотим знать, что находится вокруг нас. Учтите, что в этом случае нам нужно использовать относительные координаты, отсчитываемые от кубика с ногами героя. В результате выполнения подобной строчки:
Мы получим массив со строками. Каждая строка – это текстовое представление типа одного из кубиков.
Таким образом можно создать ИИ, который исследует мир, ищет что-либо и не умирает по глупым причинам. Простейший вариант без использования машинного обучения я реализовала тут.
Фичи для ИИ
Конечно же, первое, что мне захотелось увидеть для реализации алгоритмов ИИ в malmo – это возможность двигаться дискретно. В вопросе ИИ и так хватает сложностей, и не хочется добавлять ко всему прочему постоянную корректировку направления и скорости движения.
Включаем нужное в xml так:
К сожалению, этого будет недостаточно. Чтобы двигаться дискретно, ваше начальное положение должно быть строго в центре кубика:
Целые координаты поставят вас в пересечение кубов, персонаж откажется двигаться с места, никаких предупреждений и ошибок вы не увидите. В туториале об этом также не предупреждают. Я потратила около 4 часов, чтобы осознать суть проблемы и сделать координаты x и z половинчатыми. (y отвечает за высоту и не играет роли в данной истории).
Кроме этого, исследователи добавили несколько приятных фич для решения задачи обучения с подкреплением (Reinforcement Learning). Алгоритмы этого типа подразумевают постоянное награждение или наказание искусственного интеллекта за те или иные действия. Разработчики продумали этот момент и добавили возможность прописать эти действия/события в xml, избавив код от постоянных одинаковых проверок. Вы также можете задать окончание игры по наступлению некоторого события:
Например, тут мы постоянно чуть-чуть наказываем персонажа за каждый шаг, не увенчавшийся победой; сильно награждаем за победу и наказываем за смерть; наконец, завершаем раунд в случае смерти или выигрыша.
Malmo: вывод
Авторы фреймворка подарили нам потрясающую возможность погрузиться в любимый мир с другой стороны. Malmo пока что находится в бете, во многих ситуациях он… заставляет совершенствовать свои навыки в troubleshooting. Тем не менее, его плюсы перевешивают все его минусы, а тот факт того, что исходники лежат в открытом доступе на github, позволяет нам самостоятельно доделать нужное место или создать issue для исправления критических багов.
Авторы проекта по понятным для меня причинам не упоминают ни в одной из статей возможность обучать детей на основе фреймворка: ребенок вряд ли справится с борьбой с мелкими, но частыми багами. Тем не менее, я уверена, что если родитель поможет своему ребенку и будет программировать вместе с ним, это даст отличные результаты и позволит вам провести время с пользой.
Malmo Challenge: история и результаты
Кроме самого фреймворка, Microsoft также проводил соревнование на базе платформы, названной Malmo Challenge. Оно было призвано побудить ученых и исследователей к работе над коллаборативными алгоритмами. Конкурс стартовал примерно полгода назад, а результаты появились 5 июня.
Суть челленджа в следующем: у нас есть плоский мир, забор сложной формы, внутри загона бегает хрюшка и ходит 2 человека. Наша задача – создать ИИ для одного из персонажей, которых сможет взаимодействовать со вторым, чтобы вместе они загнали хрюшку в замкнутое пространство. Второй персонаж может вести себя рандомно, может управляться человеком, другим ИИ, это может быть даже второй экземпляр вашего собственного ИИ.
При этом, вы можете получить максимальное число очков, поймав хрюшку, или же получить небольшое число очков, прыгнув в лужу сбоку. Вы не получите ничего, если ваш напарник решит прыгнуть в лужу, отказавшись от взаимодействия с вами.
Эта задача в общем виде называется Охота на оленя. Она была сформулирована еще в 18 веке Жан Жаком Руссо. Несмотря на внушительный возраст проблемы, до сих пор неясно, какой алгоритм наиболее эффективно решает поставленную задачу.
Я рада поделиться с вами результатами соревнования. Меня очень удивило распределение мест в турнирной таблице.
Первое место занял проект команды из Великобритании. Авторы трезво оценили сильный недостаток времени, поняли, что они вряд ли успеют адаптировать для задачи сложные существующие алгоритмы. Они выбрали Байесовский вывод для определения типа напарника, а также Марковские цепи для непосредственного игрового процесса. И победили.
Участники, занявшие второе место, решили взять самые сложные из существующих решений, они использовали DNN, Reinforcement learning, DQN, A3C model… И это все не помогло им обойти Байеса и Марковские цепи.
Подытожим статью мыслью о том, что нужно быть проще.
Если вам хочется также попробовать создать свой ИИ, присоединяйтесь к нашему русскоязычному чату про нейронные сети в Telegram. Там вы можете задать интересующие вас вопросы, а также поделиться вашими достижениями.
Видео с моим рассказом о Malmo на встрече Петербургского Python митапа уже появилось на моем канале на Youtube. Там также есть записи других моих лекций и прочая болтовня про IT.
Как написать бота для майнкрафт на python
EN English | RU русский | ES Español | FR Français | TR Türkçe | ZH 中文 |
---|
Создавайте ботов Minecraft с помощью мощного, стабильного и высокоуровневого JavaScript API.
Первый раз используете Node.js? Начните с этого.
Узнайте про наши текущие задачи.
Сначало установите nodejs >= 14 из nodejs.org затем выполните:
npm install mineflayer
Ссылка | Описание |
---|---|
Обучение | Знакомство с Node.js и Mineflayer |
FAQ | Появился вопрос? Найдите ответ здесь. |
API | Методы API |
Нестабильное API | Нестабильные методы API |
Обновления | Список изменений в обновлениях |
Примеры | Примеры использования Mineflayer |
Сделать вклад в развитие Mineflayer
Видео
Обучающее видео, объясняющее базовый процесс настройки бота, можно найти здесь
Если Вы хотите узнать больше, посмотрите другие видео здесь, а также посмотреть их исходный код
Перед запуском
Смотрите, что делает бот
Спасибо репозиторию prismarine-viewer, с помощью которого можно увидеть от лица бота, что на данный момент происходит на сервере. Установите prismarine-viewer c помощью npm install prismarine-viewer и добавьте это в Ваш код:
После запуска, вы в прямом эфире сможете наблюдать за происходящим:
Пример | Описание |
---|---|
viewer | Отобразить через браузер вид от лица бота |
pathfinder | Передвижение бота по координатам и не только |
chest | Использование сундуков, печек, раздатчиков и чаровальных столов |
digger | Пример для создания бота-шахтёра |
discord | Создайте Discord бота |
jumper | Научите бота передвигатся, прыгать, использовать средства пережвижения, а также атаковать |
И много других примеров в данной папке
Большая часть разработки происходит внутри небольших пакетов npm, которые используются mineflayer.
Модули, из которых состоит Mineflayer
Модуль | Описание |
---|---|
minecraft-protocol | Парсинг пакетов Minecraft, аутентификация и шифрование |
minecraft-data | Независимый от языка модуль, предоставляющий данные Minecraft для клиента и сервера |
prismarine-physics | Взаимодействие с физикой |
prismarine-chunk | Хранение чанков Minecraft |
node-vec3 | Векторная обработка координат |
prismarine-block | Взаимодействие с блоками и их данными |
prismarine-chat | Парсер чата Minecraft (вырезана из Mineflayer) |
node-yggdrasil | Библиотека для взаимодействия с системой аутентификации Mojang, известная как Yggdrasil |
prismarine-world | Реализация миров для prismarine |
prismarine-windows | Взаимодействие с GUI |
prismarine-item | Взаимодействие с предметами и их данными |
prismarine-nbt | Парсер NBT для node-minecraft-protocol |
prismarine-recipe | Взаимодействие с рецептами крафта |
prismarine-biome | Взаимодействие с биомами |
prismarine-entity | Взаимодействие с сущностями |
Вы можете отлавливать ошибки с помощью переменной окружения DEBUG :
Mineflayer поддерживает сторонние плагины. С помощью них Вы можете добавить новые методы API:
Также Вы можете изучить:
Проекты, созданные с помощью Mineflayer
Настройка перед запуском бота
Чтобы все тесты прошли успешно, вы должны:
Запустите: npm test
Тестирование с определенной версии:
Тестирование конкретного теста
Как написать бота для майнкрафт на python
SpockBot currently supports Minecraft 1.8.8
Minecraft bot framework written in Python, currently under heavy development.
Client could loosely be called «event-driven». By default plugins register handler functions to handle events that may or may not be emitted by other plugins. Everything is a plugin in SpockBot, including the event loop/framework itself, so you can feel free to rip out the entire back end and replace it with your framework or paradigm of choice. As long as you provide the same simple APIs, other plugins won’t know the difference.
We’re only just getting started with documentation so if you’re uncomfortable reading source code this might not be the framework for you. Or, better yet, hop on IRC and help us write some docs!
SpockBot officially supports Python 3.x and Python 2.7.x on *nix operating systems and requires cryptography. It also runs on Windows and under PyPy 2.6.x but that’s not regularly tested and could be broken at any given moment. If you support one of those use cases and SpockBot breaks for you, submit an issue with a stack trace and we’ll try to fix it.
python3 setup.py install
Note: The cryptography library has some extra dependencies to install, you can find detailed instructions here.
Refer to the example bot for instructions on how to write a bot and a plugin that provides some common functionality.
Also see Extra examples and Bat bot for additional examples.
Projects Using SpockBot
Instructions for contributing to SpockBot can be found in CONTRIBUTING
Inspired by remyroy’s COPS, a Minecraft client in Python.
COPS was a service that tracked players on a minecraft server called Civcraft. It looked like this
Protocol implementation based on barneymc.
This project is licensed under the MIT License which can be found in LICENSE
The NBT parser and the original protocol implementation came from other projects, relevant legal information and attribution can be found in LEGAL
About
High level Python framework for building Minecraft clients and bots.
spockbot 0.1.5
pip install spockbot Copy PIP instructions
Released: Apr 25, 2016
High level Python framework for building Minecraft clients and bots
Navigation
Project links
Statistics
View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery
License: MIT License (MIT)
Author: UNKNOWN
Maintainers
Classifiers
Project description
SpockBot currently supports Minecraft 1.8.8
Minecraft bot framework written in Python, currently under heavy development.
Client could loosely be called “event-driven”. By default plugins register handler functions to handle events that may or may not be emitted by other plugins. Everything is a plugin in SpockBot, including the event loop/framework itself, so you can feel free to rip out the entire back end and replace it with your framework or paradigm of choice. As long as you provide the same simple APIs, other plugins won’t know the difference.
We’re only just getting started with documentation so if you’re uncomfortable reading source code this might not be the framework for you. Or, better yet, hop on IRC and help us write some docs!
SpockBot officially supports Python 3.x and Python 2.7.x on *nix operating systems and requires cryptography. It also runs on Windows and under PyPy 2.6.x but that’s not regularly tested and could be broken at any given moment. If you support one of those use cases and SpockBot breaks for you, submit an issue with a stack trace and we’ll try to fix it.
Features
Dependencies
Installation
python3 setup.py install
Note: The cryptography library has some extra dependencies to install, you can find detailed instructions here.
Documentation
Examples
Refer to the example bot for instructions on how to write a bot and a plugin that provides some common functionality.
Also see Extra examples and Bat bot for additional examples.
Projects Using SpockBot
Support
Contributing
Instructions for contributing to SpockBot can be found in CONTRIBUTING
Credits
Inspired by remyroy’s COPS, a Minecraft client in Python.
COPS was a service that tracked players on a minecraft server called Civcraft. It looked like this
Protocol implementation based on barneymc.
Legal
This project is licensed under the MIT License which can be found in LICENSE
The NBT parser and the original protocol implementation came from other projects, relevant legal information and attribution can be found in LEGAL