Реклама
Вы всегда хотели научиться кодировать, но не знали, с чего начать? Узнайте, как управлять Minecraft на Raspberry Pi, используя Python и простую электронику. Вот конечный результат:
Вам понадобится Pi 2 или новее для этого проекта, и хотя вы могли бы выполнить большинство из этих задач через командную строку через Secure Shell (SSH), это руководство будет сосредоточено на кодировании непосредственно на Pi.
Новое в Minecraft? Не волнуйтесь - вот наш Руководство для начинающих Minecraft (Опоздавший) Руководство для начинающих по MinecraftОднако, если вы опоздали на вечеринку, не беспокойтесь - это обширное руководство для начинающих поможет вам. Подробнее .
Введение в Minecraft Pi

Minecraft для Raspberry Pi был разработан для обучения и мастеринга (и это бесплатно). Он поставляется с интерфейсом прикладного программирования (API), который позволяет легко общаться с Minecraft. Это великолепно для обучения кодированию на Python, а также для Начало работы с электроникой Электроника для начинающих: 10 навыков, которые нужно знать
Многие из нас никогда даже не трогали паяльник - но изготовление вещей может невероятно выгодно. Вот десять самых базовых навыков самостоятельной электроники, которые помогут вам начать работу. Подробнее .Что такое Python?
питон это язык программирования. это интерпретированыЭто означает, что когда вы запускаете файл или программу Python, компьютер сначала должен выполнить небольшую работу с файлом. Недостатки в том, что это можно считать медленным по сравнению с скомпилированные языки.
Преимуществами интерпретируемых языков являются скорость кодирования и их удобство. Вам не нужно говорить компьютеру что данные, которые вы хотите хранить, просто, что вы хотите что-то хранить, и компьютер определит, что делать. Конечно, есть исключения, и это несколько упрощенное представление, однако программирование должно быть веселым! Если вы начнете копаться в сложных технических деталях, это может стать немного трудоемким.
Python чувствителен к регистру. Это важно знать, так как Python не будет распознавать объекты даже если они написаны правильно если дело не так. «Dosomething ()» не будет работать, если метод на самом деле называется «DoSomething ()». Python также использует отступ. Другие языки программирования могут не заботиться о том, сколько отступов в вашем коде, тогда как Python делает уход. Отступы используются, чтобы указать Python, где находится код. Другие языки могут использовать «фигурные скобки» ({}) для группировки кода - Python не использует их. Python использует хеш (#) для комментариев, а комментарии используются, чтобы сообщать другим разработчикам или людям, которые смотрят на код, что делает конкретная часть или зачем она нужна. Python игнорирует что-либо после хэша.
Наконец, есть две основные версии Python - Python 2.7.x и Python 3.x. Есть некоторые различия между двумя (какие различия?). Этот урок будет использовать Python 3.
Начальная настройка
Предоставление вашего Пи уже настройка и запуск Raspbian Как установить операционную систему на Raspberry PiВот как установить ОС на Raspberry Pi и как клонировать идеальную настройку для быстрого аварийного восстановления. Подробнее нет необходимости в начальной настройке.
Открытый терминал (Меню> Аксессуары> Терминал) и выполните эту команду. Рекомендуется всегда обновлять список репозиториев, при этом будет загружен последний список программ. (он не загружает сами программы, это помогает Pi знать, какие программы называются и где их найти. их).
sudo apt-get update.
Теперь обновите Pi (это может занять некоторое время):
sudo apt-get upgrade.
Python и Minecraft Pi уже установлены, однако, если Minecraft Pi не установлен по какой-либо причине, это просто установить 5 способов установить программное обеспечение на Raspberry PiЧтобы сделать что-нибудь с Raspberry Pi, вам нужно знать, как установить операционную систему и программное обеспечение для ее запуска. Если вы новичок в Linux, это может быть сложно. Подробнее :
sudo apt-get установить minecraft-pi
Перейдите к документам и создайте новую папку под названием «Minecraft»:
CD документы / mkdir Minecraft
Вы можете просмотреть содержимое этой новой папки:
Ls
Вот совет - если вы начнете печатать и нажмете клавишу TAB, командная строка попытается автоматически завершить оператор для вас.
Вы можете проверить путь к текущему каталогу, используя pwd, что означает Print Working Directory:
PWD
Запустите Minecraft, перейдя в Меню> Игры> Minecraft Pi. Вам понадобится этот бег, но вы вернетесь к нему позже.
Откройте Python 3 от Меню> Программирование> Python 3 (IDLE). Эта программа позволяет вам запускать команды Python и писать программы.
Теперь вы можете набирать здесь команды Python, но это не очень удобно. Перейти к Файл> Новый файл а потом Файл> Сохранить и сохраните это в папке, которую вы создали ранее. (Документы> Майнкрафт). Давайте назовем это «hello_world.py“. Вам не нужно использовать расширение .py, оно будет добавлено автоматически, но это хорошая практика.
Если вы вернетесь к терминалу и перейдете в папку Minecraft, вы увидите файл, который вы только что создали:
cd Minecraft / Ls
Вы можете запустить этот файл так:
python hello_world
Обратите внимание, что «python» все строчные Это должно быть перед именем файла, так как оно сообщает Pi, что следующий файл - это Python, поэтому он должен быть выполнен как таковой.
Вернитесь в редактор Python и введите:
печать "Привет, мир!"
Сохраните этот файл и запустите его снова - вы должны увидеть «Hello, World!» появляются в командной строке - аккуратно! Команда печати просто говорит Python выводить следующий текст в двойных кавычках. Это хорошо, но не очень полезно для Minecraft, давайте скомпонуем это:
из mcpi.minecraft import Minecraft mc = Minecraft.create () mc.postToChat («Привет, мир!»)
Теперь, если вы сохраните и запустите этот файл, вы должны увидеть «Hello, World!» появляются в игре Minecraft. Давайте разберем код:
от mcpi.minecraft импорт Minecraft
Эта строка сообщает Python, что вы хотите использовать код из другого файла. Этот файл mcpi.minecraft был разработан для легкого управления Minecraft.
mc = Minecraft.create ()
Эта линия создает объект под названием «mc» (Minecraft). Вы должны создать это, чтобы разрешить общение с игрой Minecraft - недостаточно просто включить файл.
mc.postToChat («Привет, мир!»)
Наконец, эта строка говорит Minecraft написать текст в чат. Попробуйте изменить «Привет, мир!» что-то еще и посмотреть, что происходит, но не забудьте включить обе двойные кавычки. Если у вас проблемы с программным обеспечением, это некоторые распространенные ошибки Python и Minecraft Pi:
- AttributeError - это опечатка, например, pint или prnt вместо print
- NameError: имя «Minecraft» не определено - не забудьте импортировать нужные вам модули
- NameError: имя «true» не определено - Python чувствителен к регистру, измените на «True»
- socket.error: [Errno 111] Соединение отклонено - убедитесь, что Minecraft работает
проектов
Теперь, когда вы знакомы с основами Python и Minecraft, давайте сделаем несколько классных проектов. Весь код можно скачать с Github.
Автоматизированный мостостроитель

Эта программа будет эффективно строить мост через воду. Когда игрок приближается к водоему, программа преобразует несколько блоков в камень. Поскольку Minecraft использует систему координат, очень легко определить местоположение игрока, а также тип блоков вокруг игрока. Minecraft Pi немного ограничен, поэтому невозможно обновить несколько различных блоков в большом количестве. Однако вы можете легко кодировать это поведение самостоятельно.
Создать новый файл (Файл> Новый файл) и сохраните его как «bridge_builder.py“.
от mcpi.minecraft импорт Minecraft. mc = Minecraft.create () # создать объект Minecraft, в то время как True: x, y, z = mc.player.getPos () # сохранить позицию игрока # сохранить окружающие блоки a = mc.getBlock (x, y - 1, z + 1) б = mc.getBlock (x, y - 1, z - 1) c = mc.getBlock (x - 1, y - 1, z) d = mc.getBlock (x + 1, y - 1, z), если a == 8 или a == 9 или b == 8 или b == 9 или c == 8 или c == 9 или d == 8 или d == 9: # 8 или 9 воды. Установите окружающие блоки на полу в твердое тело (камень), если вода найдена. Mc.setBlocks (x, y - 1, z, x + 1, y - 1, z + 1, 1) mc.setBlocks (x, y - 1, z, x - 1, y - 1, z - 1, 1) mc.setBlocks (x, y - 1, z, x - 1, y - 1, z + 1, 1) mc .setBlocks (x, y - 1, z, x + 1, y - 1, z - 1, 1)
Обратите внимание, как значение y на самом деле смотрит на y - 1. Это уровень пола. Если использовать значение y, скрипт будет искать блоки примерно на уровне колена - он не будет работать очень хорошо! Mc.getBlock () возвращает идентификатор блока для заданных координат. Поскольку x, y и z являются координатами игрока, вы можете сложить или вычесть их, чтобы получить позиции вокруг игрока. Вам не нужно использовать значения x, y и z, вы можете использовать любое число, однако вы можете не знать, как этот конкретный блок относится к игроку - лучше использовать значения относительно игрока. Запустите этот файл из командной строки и посмотрите, что произойдет.
Вы должны увидеть, что небольшой участок земли превращается в камень, когда игрок достигает водоема. Это не здорово - вы можете идти достаточно быстро, чтобы вызвать проблемы. Вы можете решить эту проблему, преобразовав больший объем воды в землю. Последняя часть метода mc.setBlocks () - это идентификатор блока. Одним из них является идентификатор блока для камня. Вы можете изменить это на дерево, траву или что-нибудь еще. Если бы вы хотели, вы могли бы довольно легко превратить это в сложный дизайн - возможно, подвесной мост!
Кнопка супер майнинга

Этот пример сделает короткую работу майнинга. Он состоит из физической кнопки, которая при нажатии будет добывать 10 кубов кубом. Давайте начнем с кнопки. Подобно кнопкам на Arduino, вам понадобится небольшое количество электроники, все из которых должны быть найдены в базовый стартовый комплект Что находится в вашем стартовом наборе Arduino? [Начинающие Arduino]Столкнувшись с коробкой, полной электронных компонентов, легко разбиться. Вот руководство к тому, что именно вы найдете в вашем наборе. Подробнее :
- 1 х макет
- 1 х мгновенный выключатель
- 1 х 220 Ом резистор
- Женский> мужской кабель
- Мужской> Мужской кабель
Вот схема:

Этот резистор называется резистором «опускания». Это помогает гарантировать, что то, что Пи думает, это нажатие кнопки, то есть нажатие кнопки. Вам не нужно использовать это, однако это рекомендуется, так как вы можете найти много шума и ложных показаний без него.
Кнопка подключена к контакту 14 входа общего назначения (GPIO). Вы можете использовать любой вывод GPIO, однако посмотрите на цоколевка Во-первых, поскольку они не все управляемы от Pi, и немного различаются между моделями.
Теперь, когда кнопка подключена, пришло время проверить ее. Создайте новый файл и сохраните его как «button_test.py“. Добавьте этот код, сохраните его и запустите в терминале.
импорт RPi. GPIO как GPIO. время импорта GPIO.setmode (GPIO.BCM) # сообщает Pi, какие заголовки использовать. GPIO.setup (14, GPIO.IN) # сообщает Pi, что этот вывод является входом, в то время как True: если GPIO.input (14) == True: # ищите нажатие кнопки print "BUTTON WORKS!" # log result time.sleep (0.5) # подождите 0,5 секунды.
Нажмите Control + C остановить сценарий Если все работает правильно, вы должны увидеть «КНОПКА РАБОТАЕТ!» в Терминале. Обратите внимание, как и в модуле Minecraft, этот тест использует RPi. GPIO и временные модули. Они позволяют Pi получать доступ к аппаратным выводам и предоставляют полезные функции синхронизации.
Теперь давайте закончим остальную часть кода. Создать новый файл под названием «super_mine.py“. Вот код:
импорт RPi. GPIO как GPIO. время импорта. из mcpi.minecraft import Minecraft mc = Minecraft.create () # создание объекта Minecraft GPIO.setmode (GPIO.BCM) # сообщает Pi, какие заголовки использовать. GPIO.setup (14, GPIO.IN) # сообщает Pi, что этот вывод является входом, в то время как True: если GPIO.input (14) == True: # искать нажатие кнопки x, y, z = mc.player.getPos ( ) # читать плеер position mc.setBlocks (x, y, z, x + 10, y + 10, z + 10, 0) # мои 10 блоков mc.setBlocks (x, y, z, x - 10, y + 10, z - 10, 0) # мои 10 блоков time.sleep (0,5) # ожидание 0,5 секунд.
mc.player.getPos () возвращает текущие координаты игроков, которые затем сохраняются в x, y и z. setBlocks () Метод сообщает Minecraft заполнить все блоки между началом и концом следующим блоком. Ноль - это идентификатор блока для воздуха. Вы можете изменить это на другой идентификатор блока, чтобы полностью заполнить область. Вы также можете изменить координаты на +100 или даже +1000 блоков, однако Пи может начать бороться, если вы слишком взбесились. Обратите внимание, что y + 10 одинаково для обеих строк. Вы можете изменить это на y - 10, если хотите убрать блоки под землей.
телепортации

Еще одно простое использование этой кнопки - «телепортироваться». Minecraft Pi Api предоставляет способ установить положение игрока. Следующий код «телепортирует» игрока в заданное место:
mc.player.setPos (0, 0, 0)
Обратите внимание, что его метод принимает три параметра; x, y и z - так что вы можете установить их на что угодно, чтобы мгновенно телепортировать игрока в это место.
Создать копию файла super_mine (Файл> Сохранить копию как) и измените его, заменив if следующим:
если GPIO.input (14) == True: # искать кнопку, нажать mc.player.setPos (0, 0, 0) # teleport player time.sleep (0.5) # подождать 0,5 секунды.
Этот файл должен теперь выглядеть так:
импорт RPi. GPIO как GPIO. от mcpi.minecraft импорт Minecraft. время импорта GPIO.setup (14, GPIO.IN) # сообщает Pi, что этот вывод является входом, а True: if GPIO.input (14) == True: # ищите нажатие кнопки mc.player.setPos (0, 0, 0) # teleport player time.sleep (0.5) # wait 0.5 секунд.
Сохранить какteleport.pyИ беги.
Вы можете обнаружить, что игрок застревает внутри некоторых блоков при использовании этого, и в этом случае вам нужно будет отрегулируйте координаты до известного открытого пространства (в левом верхнем углу экрана отображается ваш текущий место расположения).
Построить дом

Последнее задание для этой кнопки - построить дом. Как и в примере с быстрым майнингом, он просто заменит блоки, окружающие игрока, чтобы построить дом. Различные идентификаторы блоков будут использоваться для разных материалов (окна, стены и т. Д.). Чтобы упростить кодирование, будет создан сплошной блок, а затем внутренняя часть удалена (установите блок на воздух), это создаст полую оболочку. Вы можете добавить дополнения, такие как кровать или дверь, однако проект Minecraft Pi немного неполон, и хотя эти объекты работают, когда размещаются игроком, они не являются блестящими при использовании Python.
от mcpi.minecraft импорт Minecraft. импорт RPi. GPIO как GPIO. время импорта GPIO.setup (14, GPIO.IN) # сообщает Pi, что этот вывод является входом, а True: if GPIO.input (14) == True: x, y, z = mc.player.getPos () mc.setBlocks ( x + 2, y - 1, z + 2, x + 7, y + 3, z + 8, 5) # make shell mc.setBlocks (x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # удалить внутри mc.setBlocks (x + 2, y, z + 5, x + 2, y + 1, z + 5, 0) # сделать дверной проем mc.setBlocks (x + 4, y + 1, z + 8, x + 5, y + 1, z + 8, 102) # сделать окно 1 mc.setBlocks (x + 4, y + 1, z + 2, x + 5, y + 1, z + 2, 102) # сделать окно 2 mc.setBlocks (x + 7, y + 1, z + 4, x + 7, y + 1, z + 6, 102) # сделать окно 3.
Сохранить это как «house.pyИ беги. Все хорошо, вы должны увидеть небольшой дом (возможно, вам придется повернуться, чтобы найти его). Это очень просто, открытие и несколько окон. Теоретически, нет предела тому, насколько большое или сложное здание вы можете построить.
Сделать мини-игру

Далее давайте сделаем мини-игру! Это будет довольно просто, когда игрок наступит на песчаный блок, через некоторое время он превратится в лаву. Это хорошая игра, так как вы можете создавать свои собственные уровни или изменять их, чтобы усложнить задачу. Вам не понадобится кнопка для этого примера.
Создайте новый файл и сохраните его как «mini_game.py“. Вот код:
от mcpi.minecraft импорт Minecraft. импортировать случайным образом. время импорта mc = Minecraft.create () # создать объект Minecraft, в то время как True: x, y, z = mc.player.getPos () block_under_player = mc.getBlock (x, y - 1, z), если block_under_player == 12: # игрок стоит на песке, запускает таймер random_time = random.uniform (0.1, 2.5) # генерирует случайное число time.sleep (Random_time); # wait mc.setBlock (x, y - 1, z, 11) # превратить его в лаву.
Этот код является хорошим началом случайным образом () функция: random.uiform (0.1, 2.5) сгенерирует случайное число от 0,1 (1/10 секунды) до 2,5 (2,5 секунды). Увеличение этих чисел сделает игру проще.
Попробуйте! Встаньте на кусок песка, и он вскоре превратится в лаву. Это может стать основой более сложной игры.
Сделайте еще одну мини-игру

Суть этой игры проста - не стоять на деревянном полу, когда закончится время. Игрок телепортируется на «арену». Они вынуждены стоять на месте до начала игры. После запуска пол превратится в воду, когда закончится таймер. Игрок должен стоять в безопасной зоне (алмазные блоки), чтобы выжить. Каждый уровень уменьшает таймер на одну секунду. После каждого успешного уровня безопасная зона увеличивается. Проверьте код ниже:
время импорта. импортировать случайным образом. из mcpi.minecraft import Minecraft mc = Minecraft.create () # создать объект Minecraft # очистить область. mc.setBlocks (-10, 1, -10, 25, 5, 25, 0) # создать оболочку арены. mc.setBlocks (0, 0, 0, 25, 10, 25, 17) # полая арена. mc.setBlocks (1, 1, 1, 24, 10, 24, 0) # переместить игрока на арену. mc.player.setPos (14, 25, 20) # телепортирует игрока # заставляет их оставаться на месте. # телепортировать игрока на стартовую позицию каждую 1/10 секунды. # сделайте это в течение 5 секунд, затем начните игру. время сна (2) total_wait = 0. mc.postToChat («Ожидание запуска») в то время как total_wait <5: mc.player.setPos (14, 1, 20) # teleport player time.sleep (0.1) total_wait + = 0.1 mc.postToChat ("BEGIN!") # 10 уровней. для уровня в диапазоне (10): x, y, z = mc.player.getPos () level_time = 10 - level # уменьшить время на 1 секунду для каждого уровня mc.postToChat ("Level -" + str (уровень + 1) + "начало") # этаж сборки mc.setBlocks (0, 0, 0, 25, 0, 25, 17) # сделать безопасную область safe_area_start = random.uniform (0, 22) safe_area_end = random.uniform (0, 22) mc.setBlocks (safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) elapsed_time = 0 в то время как elapsed_time <10: x, y, z = mc.player.getPos () time.sleep (0.25) elapsed_time + = 0.25 # проверить, что игрок все еще на полу, если y <0.75: mc.postToChat ("игра За ") перерыв; иначе: # удалить этаж mc.setBlocks (-10, 0, -10, 25, 0, 25, 8) # вернуть безопасную область обратно mc.setBlocks (safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) time.sleep (2.5) продолжить перерыв.
Сохранить это как «mini_game_2.pyИ беги.
Pi 2 имеет некоторые проблемы с производительностью во время работы Minecraft. График использования центрального процессора (ЦП) (в правом верхнем углу) никогда не показывает большой нагрузки, так что это должно быть связано с плохим дизайном и оптимизацией со стороны разработчиков. Эти проблемы не связаны с запуском кода (поскольку они продолжаются, когда Python не работает), однако они усугубляются этой мини-игрой. Если ваш пи действительно борется, вы можете уменьшить размер арены или разогнать свой пи Не хватает сока? Сожмите свой Raspberry Pi путем разгонаЕсли в 2012 году появилось какое-либо оборудование, в которое вы, вероятно, влюбитесь, то это Raspberry Pi - сладкий как сахар, мини-компьютер, разработанный и изготовленный в Великобритании, который поставляется по всему ... Подробнее .
Алмазный детектор

Давайте сделаем еще одну схему. При этом будет использоваться светодиод (LED), чтобы загораться, когда под ним есть алмазы (в пределах 15 блоков). Вот что вам нужно:
- 1 х макет
- 1 х светодиодный
- 1 х 220 Ом резистор
- Женский> мужской кабель
- Мужской> Мужской кабель
Вот схема:

Подключите анод (длинная ножка) к контакту 14 GPIO. Этот вывод действует как + 5v. Соедините катод (короткую ногу) с землей.
Я использовал дешевую рудную игрушку и модифицировал ее, сняв заднюю крышку и электронику, а затем поместил под нее светодиод. Вы можете легко сделать этот перманент горячим клеем или чем-то подобным.

Сохранить этот код как «diamonds.py“:
импорт RPi. GPIO как GPIO. время импорта. из mcpi.minecraft import Minecraft mc = Minecraft.create () # create Minecraft Object led_pin = 14 # сохранить номер вывода GPIO GPIO.setmode (GPIO.BCM) # сообщить Pi, какие заголовки использовать. GPIO.setup (14, GPIO.OUT) # сообщает Pi, что этот вывод является выводом, в то время как True: # повторяется бесконечно x, y, z = mc.player.getPos () для i в диапазоне (15): # просматривает каждый блок до блок 15 if mc.getBlock (x, y - i, z) == 56: GPIO.output (led_pin, True) # включить светодиод на time.sleep (0,25) # ждать GPIO.output (led_pin, False) # включить светодиод время отключения. (0,25) # Подождите.
Когда под игроком находится блок алмазной руды (в пределах 15 блоков), индикатор будет мигать.
Вы сделали что-нибудь классное с Minecraft Pi? Дайте мне знать в комментариях, что вы сделали или как далеко вы сделали это в играх.
Джо - выпускник факультета компьютерных наук Университета Линкольна, Великобритания. Он профессиональный разработчик программного обеспечения, и когда он не летает на дронах и не пишет музыку, его часто можно встретить, фотографируя или снимая видео.