Взлом Minecraft на Raspberry Pi
Raspberry Pi 2 — удивительно мощное устройство, учитывая его цену менее 30 фунтов стерлингов. Он поставляется с предустановленной версией Minecraft, а также API, который позволяет писать код для запуска в виртуальном мире. Вы делаете это на Python, который легко изучить. Сочетание Pi, Python и Minecraft дает прекрасную возможность начать изучать возможности программирования. И радость от наблюдения за тем, как дом строится на виртуальном ландшафте, понравится не только детям.
Скрипты в Майнкрафте
Minecraft — это игра с открытой песочницей, в которой нет сюжетной линии. Иногда его называют «виртуальным Лего», поскольку игрок может построить любую структуру, используя имеющиеся в его распоряжении блоки. Версия, поставляемая с Raspberry Pi, имеет ограниченный набор функций, подходящий для ее образовательной роли, поэтому вам не нужно беспокоиться, например, о том, что вас преследуют зомби. Взаимодействие с этим миром не требует специальной настройки, только недавняя сборка ОС Raspbian плюс среда программирования. Я бы выбрал Geany, который можно установить, открыв LXTerminal и набрав:
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
sudo apt-get установить Geany
Давайте начнем с создания сценария строительства дома на глазах у игрока – но вместо того, чтобы просто поставить его на место, мы собираемся анимировать его. Мы также собираемся встроить различные настраиваемые параметры, которые позволят игроку экспериментировать с различными размерами и материалами. Это также сделает программу модульной, что позволит использовать ее в качестве основы для создания более сложных колодцев.
Чтобы код работал, загрузите его в Geany, затем запустите Minecraft и создайте новый мир. Нажмите клавишу Tab, чтобы отпустить курсор из окна Minecraft, и щелкните значок шестеренки в Geany (или нажмите F5), чтобы запустить скрипт. Вы должны увидеть, как дом волшебным образом собирается сам. Если нет, попробуйте развернуться – он может быть позади вас! Вы можете увидеть скрипт в действии здесь. Так как же работает сценарий? Ну, сначала открывается ссылка на Майнкрафт:
импортируйте mcpi.minecraft как minecraft, время mc=minecraft.Minecraft.create()
В Python важно уделять внимание отступам, поскольку именно так код делится на блоки. В этом случае обе строки находятся на одном уровне с левым полем: первая строка импортирует библиотеки Minecraft и Time, а вторая создает объект Minecraft, который мы можем использовать повсюду. Следующие 25 строк устанавливают несколько переменных для блоков, которые мы собираемся использовать, чтобы мы могли ссылаться на них, скажем, wood_planks, а не по идентификатору блока (в данном случае 5). Затем мы указываем, какой из этих блоков будет использоваться для стен, какой для крыши и так далее. Мы можем легко полностью изменить конструкцию дома, например, заменив кирпичные стены булыжником. Наконец, мы задаем ширину, длину и высоту желаемого жилища.
Теперь мы вызываем функцию Minecraft mc.player.getTilePos(), чтобы найти игрока в ландшафте, а возвращаемые значения затем используются для создания двух переменных, left и нижней, для описания того, где будет первый угол жилища. .
После этого структура сценария соответствует процессу «ручного» строительства дома в Minecraft. Мы начинаем с расчистки пространства, чтобы, если игрок решит построить дом внутри, скажем, горы, жилая площадь не была бы сплошным камнем. Вот блок кода – функция в Python – который делает это:
защитаclear_house(ядерный):
если ядерный == Истина:
blast_zone=20
еще:
blast_zone=0
mc.setBlocks(left-blast_zone,player_
земля, нижняя+blast_zone,left+ширина+blast_
зона, player_ground+height+blast_
зона+10,дно-длина-blast_zone,воздушный_блок)
Когда мы вызываемclear_house, мы передаем параметр Nuclear. Он имеет значение True или False. Вы можете попробовать вызвать его с помощью True, чтобы очистить больший объем вокруг целевой области, или вызвать его с False, чтобы ограничить зазор внутренними размерами дома. В Minecraft функция mc.setBlocks используется для создания куба блоков путем передачи ему координат в трех измерениях противоположных углов, за которыми следует тип блока, который вы хотите использовать. В данном случае мы очищаем пространство, поэтому используем воздух.
После того, как мы расчистили пространство, пора переходить к строительству. Каждый из этих этапов строительства выполняет свою функцию. В конце скрипта вы увидите функцию main(), которая управляет ходом выполнения программы, поочередно вызывая каждую фазу построения. Грамотно называя наши функции и вызывая их из main(), легко понять, что делает программа:
защита основной():
Clear_house (Ложь)
start_pos=(слева, снизу, player_
земля)
build_floor (start_pos)
курс = build_walls (start_pos)
add_door(положение_двери)
время.сон(задержка*10)
build_roof(start_pos, конечно)
Следующая функция, вызываемая в main(), строит пол – для этого используется mc. Снова установите Blocks, чтобы вырезать фундамент (для художественного эффекта), а затем добавьте куб напольной плитки глубиной в один блок, чтобы создать прочный пол в нашем доме.
Строительство стен
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Функция build_walls — это сердце программы. Самый эффективный способ создать каркас дома — это сложить цельный куб из кирпичей, а затем использовать Clear_house, чтобы вырезать внутреннюю часть. Однако мы хотим, чтобы казалось, что дом строится сам, поэтому нам нужно размещать блоки по отдельности, один за другим. Вот упрощенная версия правил строительства стен:
Защиту build_course (start_pos, направление,
курс):
блоки=1
current_yellow = start_pos (0)
current_vert=start_pos(1), если направление==”вверх” или
направление==”вниз”:
число_блоков=длина
еще:
number_of_blocks=ширина блоков mc.setBlock(current_horiz,player_
земля+курс,current_vert,wall_block)
если направление == «вверх»:
current_vert-=1
elif направление==”вниз”:
current_vert+=1
elif направление==”вправо”:
текущий_желтый+=1
еще: current_horiz-=1
groups=blocks+1 # переход к следующему блоку
time.sleep(задержка)
Начинаем с сохранения начальной позиции – это будет позиция последнего блока, уложенного из предыдущего ряда блоков. Затем мы указываем, сколько блоков нужно укладывать, в зависимости от того, идем ли мы по длине здания или по его ширине.
Фаза сборки содержится в блоке while — она продолжается до тех пор, пока мы не уложим все блоки. mc.setBlock помещает один блок в показанные координаты, затем увеличивает одну из этих координат в зависимости от направления, в котором мы прокладываем. Эффект заключается в том, что блоки укладываются вдоль стены перед поворотом за угол и продолжаются по прямоугольнику до тех пор, пока ряд не будет завершен.
Окончательная версия кода немного сложнее: к каждой стене добавляются окна. Окна имеют динамический размер, поэтому они составляют половину длины стены и располагаются по центру. Он также записывает положение двери; он добавляется после постройки стен. Ряды управляются с помощью функции build_walls, которая повторяет функцию build_course для каждого ряда блоков, пока он не достигнет конечной высоты.
Вы даже можете попробовать построить свой дом в океане или в воздухе — сделайте это, дважды нажав клавишу пробела, чтобы полететь, затем нажмите еще раз, чтобы подняться, прежде чем запускать сценарий. Измените переменные wall_block и Roof_block, чтобы увидеть, что произойдет, если вы создадите стены или крышу из золота или лавы. Вы можете добавить свои собственные блоки, ознакомившись с полным списком. здесьи добавление связанной переменной в скрипт. Более сложные модификации могут включать добавление нескольких этажей к конструкции, если для переменной высоты установлено достаточно большое значение. Например, придумайте, как добавить турели, и вы получите замок Minecraft.
Эти настройки могут показаться тривиальными, но я профессионально занимаюсь программированием более 20 лет и до сих пор испытываю восторг, когда фрагмент кода работает так, как задумано. Если вы никогда раньше не программировали, я надеюсь, что вы попробуете, а если в вашей семье есть поклонник Minecraft, я предлагаю дать им возможность разобраться в коде и посмотреть, к чему это их приведет. Вы найдете ссылки на ресурсы Minecraft Pi по адресу kevpartner.co.uk/programming.