Программа для программирования майнкрафт
В третьем уроке программируем с Майнкрафт настоящий дом. Вы наверняка уже освоились в творческом режиме игры Minecraft. Попробуем написать усложненный код, который в каждом последующем уроке будем менять и постараемся из простого дома сделать шедевр! Данный цикл рассчитан на 3 — 4 занятия по программированию в Майнкрафт и позволит в полной мере освоить логику построения циклов от простого к сложному.
Не забывайте передать черепахе строительные блоки. Вначале переносим их к себе в инвентарь, а потом передаем черепашке!
Чтобы набрать сразу несколько блоков нажимаем на блоке требуемое количество раз левой клавишей мышки!
Программируем команды в Майнкрафт
Первым делом программируем для черепахи команду поднятия вверх — строительные блоки будем ставить под персонажем. Далее предлагаю написать часть кода простыми операторами. Оставьте сверху 1 — 2 строчки про запас! Используем команду вперед и размещаем блок под объектом второй командой. Обратите внимание, что при перетаскивание и размещении строительного блока выпадет дополнительное меню выбора. Нужно выбрать блок со стрелкой вниз. Кнопки и команды, которые мы программируем в майнкрафт с описанием и названием смотрите в материале: Описание команд в Майнкрафт (материал в стадии подготовки).
Вводим в программный код команду цикл: REP … DO …END. Между REP и DO устанавливаем количество повторов = 2 (попробуй поставить 3 и посмотри что получится), условие прописываем как на картинке ниже. Программируем команды для последней стены дома. Добавляем еще один цикл — он будет отвечать за количество слоев (этажей) и разместится на первой строке кода, закрываем цикл командой END в конце программы. Давайте возведем 5 этажей и поэтому пропише 5 повторений подряд.
ДОМАШНЕЕ ЗАДАНИЕ:
Подумай над тем, как построить периметр дома с минимальным использованием простых команд! Может переписать цикл или создать еще один?
Обрати внимание на отличие в количестве простых операторов кода постройки дома на первом и втором рисунках! Почему так сделано?
Запускаем код для исполнения
Программируем черепаху и запускаем ее на выполнение кода. Должно получиться высокое здание без окон и дверей и даже без крыше. Хорошей чертой Майнкрафта является наглядность! Приятно смотреть как все строиться, а когда допускаешь ошибку, то она в прямом смысле слова бросается в глаза.
Первая часть урока по программированию в Майнкрафт подошла к завершению. На следующих занятиях будем улучшать примитивное строение:
Установка Minecraft Education Edition от Microsoft
Перейдя по указанной выше ссылке немного пролистаем вниз страницы до пункта: STEP ONE. Нажимает на скачивание дистрибутива Майнкрафт Эдукейшен, как показано на рисунке ниже. Обратите внимание на размер файла — 317 Мбайт. Для удобства размещаю ссылку на установочные файлы непосредственно с ресурса: Minecraft программирование скачать модуль Education
После завершения загрузки запускаем инсталлятор и убедившись в выборе Русского языка нажимаем Далее, как показано на картинке ниже:
Во втором окне (его показывать не буду, так как ничем не примечательно) так же нажимаем Далее. В третьем установочном окне принимаем лицензионное соглашение и нажимаем Далее. Потом указываем путь для размещения системных файлов программного модуля Minecraft Education Edition и продолжаем установку. На предпоследнем этапе оставляем галочку для размещения ярлыка на Рабочем столе компьютера, после перехода нажимаем на кнопку: Установить и дожидаемся завершения работы инсталлятора Майнкрафт.
По завершении установки появится вот такое окошко.
Нажимает кнопку продолжить, далее принимаем условия лицензионного соглашения и еще раз нажимаем продолжить. В конце установки у вас появится вот такое окно:
Оставляем все галочки и завершаем установку tlauncher и java для работы игры Minecraft. Размер установочного файла составит 42 Мб. Во время установки Java операционная система Windows запросит разрешение на установку программы. Обязательно разрешаем и в следующем всплывшем окне нажимаем Установить
По окончании установки Java нажимаем close и дожидаемся окна с информацией об удачной установке:
Запускаем tlauncher и приступаем к бесплатной игре в Minecraft.
ВНИМАНИЕ:
Для программирования в игре требуется:
- установить версию Minecraft Force 1.7.10 (скачать установочный файл)(204Мб);
- установить mods ComputerCraftPlusComputerCraftEdu1.74 (скачать)
Обзор работы в программе TLauncher
Программирование возможно только в версии force 1.7.10, при наличии нужного модуля. Но вот поиграть в различные релизы можно всегда! Тлаунчер отличный инструмент для ознакомления с Майнкрафтом самых различных релизов. Для установки нужного достаточно его выбрать в списке и нажать Установить. Обратите внимание, что потребуется ввести свое имя. А так же выбрать внешний вид — это окно появится сразу послу нажатия на кнопку Играть, если релиз уже установлен. На картинке представлен беглый пример многообразия версий игры Minecraft в TLauncher:
Обратите внимание, то есть официальная версия и неофициальная, я рекомендую для скачивания неофициальный релиз.
Из меню Лаунчера установка Майнкрафт происходит в один клик. Для запуска установки внизу стартового окна вносим логин и нажимаем кнопку Установить:
Возможно программа попросит вас установить свой скин. Соглашаемся и нажимаем на кнопку OK. Далее остается нажать на кнопку: Войти в игру. Вот таким простым способом можно получить доступ к модулю Education Edition, а так же начать играть в Minecraft без регистрации на официальном сайте проекта и без создания учетной записи Microsoft!
Изучаем программирование на примере Minecraft
После проделанных манипуляций стала доступна только игровая часть Майнкрафт, теперь перейдем к установке дополнения MODS и знакомству с черепашкой — программистом! Для этого потребуется скачать два установочных файла:
После скачивания файлов приступаем к установке. Открываем лаунчер и находим старую версию Force 1.7.10. К сожалению пока я еще не получил более свежую версию плагина для программирования через черепашку. Но как появится я обязательно его выложу и дополню статью!
Устанавливаем эту версию и добавляем скаченный по первой ссылке файл: Computer Craft Plus Computer Craft Edu1.74 в раздел mods:
Чтобы попасть в папку с расположением установочных файлов игры нажимаем на красный квадрат, показанный на рисунке выше! Открываем папку mods и копируем в нее скаченный модуль.
Запускаем Minecraft, не забывая ввести имя аккаунта (может быть любым!). После успешного запуска модуль инициализируется и подключится к игре. Если пробовать в другой версии, то Майнкрафт сообщит о том, что модуль не поддерживается. В итоге должен получиться вот такой результат:
Далее нажимаем на подсвеченную на экране кнопку: MODS и проверяем, что в левой колонке есть подключенные модули. Нажимаем назад и щелкаем по кнопке: Одиночная игра. Даем название новому миру и выбираем Творческий режим.
Надеюсь статья была понятна, если есть вопросы пишите их через страничку во ВКонтакте (перейти и подписаться). Обратите внимание, что это старая, очень старая версия игры и конечно она не впечатляет. Но вы можете попробовать оформить аккаунт для учебного заведения на официальном сайте. А для знакомства подключить демо режим. Как это сделать читайте ниже.
Детское программирование в модуле Computer Craf Edu для Minecraft
При первом запуске игры появится главный персонаж, а вовсе не черепашка. Наверняка покажется, что сделали что-то не так! Но на самом деле все правильно, просто вы еще не добавили своего творца в мир Майнкрафт. Откройте Инвентарь (достаточно нажать латинскую E), перейдите на вторую закладку и нажмите на белый «конвертик» — Computer Craft Edu. Там то и спрятался исполняющий написанный код персонаж:
Разместив черепашку на поле добавьте из инвентаря пульт (на фотографии значок справа). Делается это двукратным нажатием на черепашку выбранным в инвентаре пультом. Ну а дальше остается только писать программу и смотреть на результат, но об этом в бесплатных уроках — ссылка внизу материала!
Программирование на основе Майнкрафт в платной версии от Майкрософт
Свежая версия игры намного интереснее и приятней как для программирования детей, так и для игры. Программисты Майкрософт отлично поработали и довели неплохую идею до отличного результата. После установки официального релиза (инструкцию по установки читай в начале статьи) запускаем программу. Она потребует входа в свою учебную учетную запись (обычный аккаунт скайп или майкрософт не подойдет). Создаем ее — регистрируемся, там же можно войти в Демо-режим. В этой статье я буду показывать как я работал через демо:
Нажимаем начать урок (рекомендую все же зарегистрироваться на ресурсе) и выбираем один из двух доступных демо уроков:
Этот раздел статьи допишу немного попозже …. извините за неудобства!
Бесплатные курсы программирования Майнкрафт от разработчиков Майкрософт
В 2014 году легендарная игра, вместе с остальными продуктами компании Mojang была продана корпорации Microsoft. Такое развитие, на мой взгляд, наилучшее продолжение проекта. Практически сразу появилась одна общая версия игры для всех консолей и систем. В лучшую сторону обновился обучающий модуль. Появилось активное сообщество, которое делится уроками, проектами и подсказывают начинающем педагогам и самим детям. Минусом же является только капитализм и естественно платная версия всего. Теперь за каждое движение надо платить. Но все же — это к лучшему, ведь программисты Mojang уже не справлялись с развитием Minecraft. Для ознакомления со всей этой информацией перейдите на официальном сайте в раздел: Get Training (включите в Chrome перевод на русский язык, онлайн переводчик отлично справляется с задачей)
Но данная страница делится общими возможностями, я же рекомендую сразу перейти в раздел с уроками по детскому программированию в Minecraft (перейти). Как видите разработчики игры постарались не только популизировать игровой продукт среди детей, но и активно его продвигают для обучения ребенка основным принципам написания кода.
Бесплатный уроки детского программирования в Minecraft для школы или кружка
Современный мир, современные дети, современные технологии — именно так должен смотреть на мир учитель информатики или педагог дополнительного образования в области программирования. Delphi, Pascal — это прошлый век, особенно для современных детей! Именно поэтому я выкладываю бесплатный курс детского программирования в Майнкрафт. Полный, годовой цикл обучения детей правильно писать программный код состоят из 4 циклов:
- Играем и учимся в Майнкрафт
- Создаем и творим в Scratch
- Пишем приложения в App Invector 2
- Открываем Web-программирование через WordPress
Но прежде чем запустить курс программирования необходимо провести открытый урок для детей и родителей. С этого момента и начнется бесплатный урок по обучению детей взаимодействию с компьютером через цифру!
Открытый урок бесплатного курса
Программирование на примере Minecraft будет первым уроком, но среда для многих родителей будет ассоциироваться только с игрой и не более. Поэтому рекламный урок по привлечению клиентов и поднятия заинтересованности родителей начнется со Scratch и App Invector 2.
Многие центры, продающие курсы или франшизу (у того же code-class она стоит невероятных 200 тыс. рублей) по детскому программирования предлагают на открытом уроке провести демонстрацию возможностей и максимально насытить занятие рекламной информацией. На мой взгляд не стоит этого делать, гораздо важнее показать родителям процесс обучения и получить уже готовый продукт даже на бесплатном уроке!
Не забываем про оформление урока — подача материала важный момент и продуманность открытого занятия по программированию начинается как и в театре с вешалки! Что я рекомендую подготовить к первому рекламному уроку:
- Резиновые браслеты с наименованием кружка или школы программирования (вручается и надевается ребенку при входи);
- Зона для чая и печений (если что-то пойдет не так, то дети с удовольствием в ней потусят какое-то время);
- Проектор и белый экран (для вывода презентации);
- Отдельный компьютер для каждого ученика (рядом еще один стул для родителя).
Ну а теперь перейдем к конкретике. Текст урока и презентация будут представлены в отдельных файлах для скачивания. В конце статьи выложен открытый видеоурок из частной школы города Москвы для ознакомления. На этом пожалуй все — остается скачать материалы для урока и прочитать две другие статьи с описанием одной из частей бесплатного открытого занятия по детскому программированию:
Вспоминая игру «Ну погоди» в скретче мы не просто обучаем детей писать код сразу на первом занятии, но помогаем родителям вспомнить свое детство и немного понастальгировать. Что станет дополнительным плюсом в общий рейтинг урока! Создание фонарика позволит получить моментальный результат и разрекламировать ваш кружок среди одноклассников побывавшего на уроке ученика — включаем сарафанное радио!
Подписывайтесь на социальные группы в Инстаграм и Вконтакте! Задавайте вопросы через форум! Если есть возможности — постарайтесь отблагодарить автора материала небольшим финансовым переводом по номеру телефона на СберБанк.
Бесплатные уроки курса детского программирования Майнкрафт
Ну а теперь можно ознакомиться со списком следующих уроков по детскому программированию в Майнкрафт относящихся к бесплатному курсу:
- Описание и значение команд в Майнкрафте (в стадии подготовки);
- Урок №1. Знакомство со средой разработки для детей (в стадии подготовки); ; .
В преддверии Нового года я катастрофически не успеваю проработать этот материал. Но до майских праздников будет подготовлен полный бесплатный кур по программированию в Майнкрафт и конечно появятся видео материалы. Пока что вы можете установить официальную и неофициальную версии игры и заняться программированием в Scratch или AppInvector-2. Всех с Новым годом!
Хабр, привет! Пока все обсуждают ИИ в мире Pacman, мы начнем делать свой ИИ в Minecraft с фреймворком Malmo от Microsoft Research. Pacman у нас тоже появится. Если вы любите кубический мир, или вам хотелось бы начать изучать искусственный интеллект, или у вас есть дети, с которыми вы не можете найти общие увлечения, или же вас просто заинтересовала тема – прошу под кат.
В этой статье я постараюсь затронуть несколько тем:
- Выскажу свое мнение о помешательстве детей на кубической игрушке
- Расскажу об основной идее Malmo
- Покажу несколько примеров с кодом и дам понимание, куда можно идти дальше
- Расскажу об идее и результатах Malmo Challenge
Minecraft: моя предыстория
Я познакомилась с игрушкой, будучи уже студенткой. Это не помешало мне в тот же день отложить все свои личные, рабочие и академические цели, и целиком уйти в кубическую вселенную. Отпустило меня тогда только через месяц, но до сих пор я с радостью захожу иногда побегать часок по любимому миру.
Для меня Minecraft стал продолжением любимой игрушки детства – Lego, исправив ее главный недостаток: постоянную нехватку деталей. Аналог Lego с безлимитными деталями, что может быть лучше.
Хочется особо отметить отсутствие жестокости в этой игре. Вы можете убить зомби или разбежавшись, прыгнуть со скалы. Никто не спорит. Но отсутствие крови очень радует, так же как и милая визуализация зарождения новой жизни.
У Minecraft очень размытое понятие финальной цели. Конечно, вы можете прокачаться и убить дракона, с гордостью сказав, что вы прошли игру. Но так никто не делает. Основной кайф мира Minecraft в том, что каждый раз в нем можно придумать свою личную цель: исследовать мир и найти пещеру с тайниками, построить дом своей мечты, изучить основы электричества или зайти на сервер вместе с другом и делать друг другу всевозможные ловушки. Отсутствие цели в игре – на мой взгляд, главное ее преимущество. Minecraft дает огромный простор для творчества, при этом почти не ставит ограничений.
Изучая сабж, я случайно узнала, что мир Minecraft не ограничивается игрой, мерчем, летсплеями и фан артами. В игре снимают целые сериалы, и – неожиданно – они являются довольно популярными. На мой взгляд, это забавно.
Меня очень обрадовала новость о наличии open source фреймворка для программирования в мире Minecraft. Я твердо уверена, что в будущем в подавляющем числе профессий могут понадобиться базовые навыки программирования. Фреймворк на базе любимой игрушки, на мой взгляд, отличный способ показать ребенку захватывающий мир программирования.
Malmo: основная идея
Фреймворк Malmo был создан совместными усилиями нескольких исследователей, главной целью которых было адаптировать интересный мир к экспериментам в области искусственного интеллекта. Алгоритмов ИИ по-прежнему относительно мало, и все они имеют огромный потенциал для более детального изучения и усовершенствования. Мне очень нравится, что Microsoft создает дополнительную мотивацию к изучению неизведанного.
Технические моменты
Установка
Несмотря на четкое следование инструкции, вы можете столкнуться с целым рядом проблем в процессе установки. Мои проблемы в основном были связаны с тем, что некоторые компоненты у меня уже были поставлены, но версия отличалась. Все проблемы лечатся с помощью всем известного сайта.
Поддержка ОС и языков программирования
Несмотря на смелое заявление о поддержке всех трех популярных ОС, мне показалось, что тестирование было как следует проведено лишь для ОС Windows. Победив проблемы с установкой, ваша головная боль на ОС Windows обещает закончиться. На Linux проблемы, скорее всего, продолжатся, так как поднятый сервер периодически падает, не сообщая причин. Если вы продолжите мои эксперименты – обязательно пишите в комментарях о вашем опыте.
Как играть программировать в Malmo
Основной процесс выглядит следующим образом: в одном окошке вам необходимо поднять сервер и клиента. Для этого есть скрипт ./Minecraft/launchClient.* . После того, как сервер поднялся, в другом окне вы можете запустить код с основной логикой для управления персонажем. Как узнать, что сервер поднялся? Все крайне логично: вы увидите запущенный экземпляр Minecraft с начальным меню внутри, а в терминале будет гордо красоваться надпись Building 95% .
Вы можете запустить сколько угодно экземпляров launchClient . В таком случае первый запущенный экземпляр будет являться сервером, а также клиентом, представляющим из себя одного персонажа. Все последующие экземпляры будут подключаться к уже поднятому серверу, добавляя дополнительного персонажа в мир.
Логику для каждого из человечков вы можете реализовать в коде, а также можно управлять персонажем самостоятельно всем знакомыми клавишами AWSD.
Кроме сервака с клиентом и файла с логикой, мы также имеем xml файл с описанием начального состояния мира. Авторы не настаивают на его существовании, и в своих примерах они часто кладут его в строку и хранят в коде, но, на мой взгляд, удобнее сразу сделать его отдельным файлом, добавляя нужные куски по мере необходимости.
Авторы позаботились о нас и сделали внушительное число примеров, добавив к ним описание.
Мой совет: не пытайтесь начинать с нуля, возьмите за базу первый пример. В нем ничего не происходит, мы просто создаем самый простой плоский мир и присоединяемся к персонажу. В цикле while в конце вы можете по своему усмотрению добавить экшена в происходящее. Например, напишите там:
И насладитесь первыми шагами своего героя. Учтите, что по умолчанию используется т.н. ContinuousMovementCommands. Воспринимайте отдаваемые персонажу команды как изменение положения рычага. Говоря "move 1" , вы сделаете не один шаг. Вы будете бежать, пока не дадите команду "move 0" . Такой код на практике не сдвинет человечка с места:
Команды выполнятся за считанные доли секунды. Не забывайте вставлять периодические строчки "time.sleep(X)" . Я уверена, что вы знаете, где брать информацию об остальных командах (хотя, по моему опыту, проще по диагонали просмотреть туториал и затем искать нужное в исходниках).
В 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… И это все не помогло им обойти Байеса и Марковские цепи.
Подытожим статью мыслью о том, что нужно быть проще.
Видео с моим рассказом о Malmo на встрече Петербургского Python митапа уже появилось на моем канале на Youtube. Там также есть записи других моих лекций и прочая болтовня про IT.
Попробуем сделать небольшую демку minecraft в браузере. Пригодятся знания JS и three.js.
Немного условностей. Я не претендую на звание лучшее приложение столетия. Это всего лишь моя реализация для данной задачи. Также есть видео версия для тех кому лень читать(там тот же смысл, но другими словами).
В конце статьи есть все нужные ссылки. Постараюсь как можно меньше воды в тексте. Объяснять работу каждой строки не буду. Вот теперь можно начать.
Для начала чтобы понимать какой будет итог, то вот демка игры.
Разделим статью на несколько частей:
- Структура проекта
- Игровой цикл
- Настройки игры
- Генерация карты
- Камера и управление
Структура проекта
Вот так выглядит структура проекта.
index.html — Расположение канваса, немного интерфейса и подключение стилей, скриптов.
style.css — Стили только для внешнего вида. Самое важное это кастомный курсор для игры который располагается в центре экрана.
texture — Здесь лежат текстуры для курсора и блока земли для игры.
core.js — Основной скрипт где происходит инициализация проекта.
perlin.js — Это библиотека для шума Перлина.
PointerLockControls.js — Камера от three.js.
controls.js — Управление камерой и игроком.
generationMap.js — Генерация мира.
three.module.js — Сам three.js в виде модуля.
settings.js — Настройки проекта.
Игровой цикл
В core.js нужно провести инициализацию three.js, настроить его и добавить все нужные модули от игры + обработчики событий… ну и игровой цикл запустить. В учет того, что все настройки стандартные, то объяснять их нет смысла. Поговорить можно про map (он принимает сцену игры для добавления блоков) и contorls т.к. он принимает несколько параметров. Первый это камера от three.js, сцену для добавления блоков и карту чтобы можно было взаимодействовать с ней. update отвечает за обновление камеры, GameLoop — игровой цикл, render- стандарт от three.js для обновления кадра, событие resize также стандарт для работы с канвасом (это реализация адаптива).
Настройки
В настройки можно было вынести и другие параметры, например, настройки three.js, но я сделал без них и сейчас здесь лишь пара параметров отвечающие за размер блоков.
Генерация карты
В классе Map у нас есть несколько свойство которые отвечают за кеш материалов и параметры для шума Перлина. В методе generation мы загружаем текстуры, создаем геометрию и меш. noise.seed отвечает за стартовое зерно для генерации карты. Можно рандом заменить на статичное значение чтобы карты всегда была одинаковая. В цикле по X и Z координатам начинаем расставлять кубы. Y координата генерируется за счет библиотеки pretlin.js. В конечном итоге мы добавляем куб с нужными координатами на сцену через scene.add( cube );
generationMap.js
Камера и управление
Я уже говорил, что controls принимает параметры в виде камеры, сцены и карты. Также в конструкторе мы добавляем массив keys для клавиш и movingSpeed для скорости. Для мыши у нас есть 3 метода. onClick определяет какая кнопка нажата, а onRightClick и onLeftClick уже отвечают за действия. Правый клик(удаление блока) происходит через raycast и поиска пересеченных элементов. Если их нет, то прекращаем работу, если есть, то удаляем первый элеент. Левый клик работает по схожей системе. Для начала создаем блок. Запускаем рейкаст и если есть блок который пересек луч, то получаем координаты этого блока. Далее определяем с какой стороны произошел клик. Меняем координаты для созданного куба в соответствии со стороной к которой мы добавляем блок. градация в 5 единиц т.к. это размер блока(да здесь можно было использовать свойство из settings).
Как работает управление камерой?! У нас есть три метода inputKeydown, inputKeyup и update. В inputKeydown мы добавляем кнопку в массив keys. inputKeyup отвечает за очистку кнопок из массива которые отжали. В update идет проверка keys и вызывается moveForward у камеры, параметры которые принимает метод это скорость.
Ссылки
Как и обещал. Весь материал который пригодится.
Если есть желание, то на можете добавить свой функционал к проекту на гитхаб.
На дворе осень и сын все чаще остается дома, уткнувшись в телефон или планшет, слабо реагируя на внешние раздражители. Меня это огорчает. Сам я начал программировать, как мне кажется, с того, что к моему первому компьютеру БК 0010-01 игры то на кассетах в комплекте шли, а вот магнитофон не шел. Пока добывали магнитофон с подходящим линейным выходом, я успел попробовать Бейсик, спасибо отцу за первые уроки. Так что, когда смог со скрипом загрузить первую графическую игру, то смотрел на нее уже не как на то, во что наконец буду играть, а очарованно думал, как бы сделать свою не хуже. Сына же, в его 8 лет, давно поглотил мир видеоигр и ютуба, так что начинать программирование с трели на встроенном динамике, похоже, впечатления не произведет.
Мне давно попадались статьи о программировании с Minecraft на питоне и тут я понял, что пора. Minecraft — одна из самых любимых его игр и я подумал, что лучше будет начать именно с этой, хорошо освоенной территории.
Однако, пробежав по имеющейся в свободном доступе информации, я понял, что все очень не просто. Найденные книги "Программируем с Minecraft. Создай свой мир с помощью Python" 2017 года и "Minecraft. Программируй свой мир на Python" 2018 года начинают с установки серверов Spigot и Bukkit соответственно. Оказалось, что мобильные клиенты, которые на android/iphone, они же pocket edition, они же bedrock edition, с этими серверами не работают. Надо покупать клиент под Windows/Mac, что портит всю затею. Во-первых это будет уже не "родная" среда, привычная сыну. Во-вторых, пересаживаться ради программирования в другую среду продемонстрирует слабость, что ли, подхода, мол игры отдельно, программы отдельно. В-третьих, сыну наверное захочется показать свои эксперименты друзьям, а у друзей популярны именно мобильные версии. Так нельзя, решил я, раз эти мобильные игрушки умеют подключаться к серверам, не все потеряно. И я начал искать.
В первый день мой хром был до отказа забит вкладками, а в голове воцарился хаос.
Первым нашелся сервер Nukkit с открытым исходным кодом, к которому игра на моем андроиде подключилась вполне успешно. Единственный момент тут, что нужна актуальная версия игры (1.12 на сегодня), так что понадобилось обновить ее сначала. У сервера много плагинов, но плагина, пригодного для программирования, вроде, описанных в книгах, не нашлось.
Нашелся, правда, PyPlugins, который вроде запускает Jython — версию питона на java. Но, как я понял, jython остановился на версии языка python 2.7. Отложил этот вариант, как неспортивный.
Пойдем с другой стороны, а как авторы книг подразумевали подключение питона к серверам? Пристально изучив дополнительные материалы к книгам, благо они в свободном доступе, нашел плагин RaspberryJuice, заботливо спрятанный в директории plugins (в книге о нем ни слова), он то и открывает сетевой сокет в ожидании команд. А команды отправляет питоновская библиотека mcpi. Спасибо авторам, все с открытым кодом. Немного напрягало, что последний коммит 2-4 года назад.
Но как подключить RaspberryJuice к Nukkit? И тут отыскивается, не смейтесь, Pokkit — плагин к Nukkit для запуска плагинов под Bukkit. Уж не знаю, почему названия таковы, но мне это добавило лишних часов поиска, так как сначала я их путал. Кажется теперь уже все части пазла на месте, но запуск выявляет ошибку: java.lang.NoSuchFieldError: GOLD_SWORD . Обидно, ведь в описании Pokkit-а отмечено, что RaspberryJuice есть в списке поддерживаемых. Оформил баг. На удивление быстро пришел ответ — плагин устарел. "У вас все тут ржавое", вспомнилась фраза из любимого фильма. После уточнений, автор любезно разъяснил, где взять современное API для bukkit, ну а дальше "мы уж как-нибудь сами". Форкнул устаревший плагин, довольно шустро заменил все исчезнувшие в текущей версии API методы, найдя им замену. Получилось что-то вроде world.getBlockTypeIdAt(loc) менялось на world.getBlockAt(loc).getType().getId() . Однако один момент все же существенный: раньше можно было сделать радугу из одинаковых блоков (как в примере, block.WOOL ), раскрашенных в разные цвета. Теперь же блоки перекрашивать нельзя, надо брать изначально разноцветные блоки ( Material.RED_WOOL , Material.BLUE_CARPET ). Оформил pull request и обнаружил, что таких pull request-ов там еще два, оба свежие. В следующий раз стоит сначала это проверить.
Итак, инструкция, как быстро запустить эту пирамиду из Nukkit-Pokkit-RaspberryJuice-mcpi:
- Берем подходящий сервер, до которого есть доступ с ваших мобильных Minecraft-ов. Например, домашний компьютер с открытым портом 19132 (по умолчанию). Мне проще на linux, но подойдет любая ОС, где есть java runtime environment.
- Сервер Nukkit. Скачиваем рекомендованный JAR по ссылке "Downloads" или собираем свой из исходников ( mvn clean package ). Кладем в отдельную директорию и просто запускаем java -jar nukkit-1.0-SNAPSHOT.jar .
- Плагин Pokkit. Скачиваем рекомендованный JAR по ссылке "Download and usage" или собираем свой из исходников ( mvn clean package ). Кладем в директорию plugins , которая образовалась после шага 2. Останавливаем и снова запускаем сервер, как в шаге 2.
- Плагин RaspberryJuice с моим патчем. Скачиваем рекомендованный JAR по ссылке или собираем свой из исходников (ветка pocket-edition , mvn clean package ). Кладем в директорию plugins/Pokkit/bukkitPlugins/ , которая образовалась после шага 3. Останавливаем и снова запускаем сервер.
- Подключаем мобильный minecraft к серверу: Играть — Серверы — Другие серверы — добавить новый или отредактировать имеющийся: "имя сервера" — на ваш вкус, "адрес сервера" — IP адрес сервера из шага 1, "порт" 19132, если не меняли в конфиге. Сохранить и подключиться.
- Устанавливаем python 3 и библиотеку mcpi: pip3 install --user py3minepi . После этого можно запускать примеры из книги 1 и 2, просто введя python3 Adventure3/dice.py .
Можно попробовать и без питона (шага 6), подключившись к плагину обычным netcat-ом: nc localhost 19132 и вводить команды вручную:
- player.getTile() — в ответ придут координаты игрока в формате x,y,z, где ось y направлена в небо, а плоскость xz параллельна земле. У меня вышло 75,-5,-5 ,
- world.setBlock(75,-6,-5,3) — установить блок грязи под игроком,
- world.spawnEntity(75,-4,-5,93) — породить курицу над игроком.
Мои эксперименты можно видеть на начальной картинке этого поста.
Если пошел дождь или настала ночь и плохо видно, введите в консоли сервера команды time set 0 и weather clear .
Вот и все. Здорово, что есть open source и теперь можно вот так просто, поискав в открытом доступе, за несколько вечеров соорудить такую пирамиду работающих программ. Особенно хочется отметить дружелюбность и почти мгновенные ответы в чатах многих проектов.
Еще нашел это замечательное видео о визуализации docker контейнеров сервера в мире Minecraft:
Контейнеры сына заинтересуют навряд-ли, а вот помигать светодиодами в ответ на переключение мультяшных рубильников — самое оно. Буду рад советам, что бы такого необычного еще придумать для обучения программированию.
Читайте также: