Цель игры — забраться как можно выше по золотым блокам, которые появляются рядом с персонажем в случайном порядке. При этом герой не должен упасть, иначе игра будет завершена. Давайте начинать!

Подробную видеоинструкцию вы найдете в конце материала.
Если у вас еще не установлены необходимые программы, посмотрите наши видео:
- Как скачать Minecraft и Python на Windows
- Как скачать Minecraft и Python на MacOS
Программирование
Начнем с создания python-файла под названием parkour. Импортируем необходимые модули: minecraft, block, time и random. В переменную mc присвоим команду для подключения Python к нашему локальному серверу Minecraft. Позицию персонажа присвоим в переменную startPos. На высоте 150 создадим золотой блок. С помощью функции setTilePos телепортируем игрока на высоту 152. В чат выведем сообщение “Игра начинается через 5 секунд.”, остановим программу на 5 секунд, после чего пожелаем удачи игроку. Запустим программу.


Создадим переменную blocks для хранения в ней золотых блоков. Пока в данную переменную присвоим пустой список. Используя функцию append, добавим координаты первого золотого блока, который мы создали ранее. Для фиксации максимально достигнутой высоты игроком создадим переменную maxPos и присвоим в неё 0.
Добавим бесконечный цикл. В нём мы начнем объявлять переменные xr, yr, zr. В них присвоены случайные числа, которые в будущем будут использованы для создания золотого блока рядом с игроком в случайном месте. Позицию игрока поместим в переменную d. Затем к каждой оси прибавляем переменные со случайными числами. В функции создания блока обозначим позицию, добавим функцию остановки программы на секунду и запустим программу.


В список blocks будем добавлять координаты всех созданных золотых блоков. Чтобы блоков на карте было не так много, добавим условие: если длина списка больше 4 (или можете поставить любое число), то первую координату из списка blocks извлечем в переменную “c” и на месте данного блока создадим блок воздуха. Другими словами, этот блока кода вычеркивает координаты первого блока из списка и удаляет его в игре. Теперь на карте не будет появляться слишком много блоков.

Позицию персонажа поместим в переменную pos. В чат будем выводить текущую высоту, на которой находится игрок. Для фиксации максимально достигнутой высоты добавим условие: если текущая позиция больше зафиксированной, то в maxPos присваивается текущее значение высоты. Ниже добавим еще одно условие: если текущая позиция персонажа ниже 150-ти, то с помощью цикла for удалим все созданные программой золотые блоки, выведем сообщение об окончании игры и значение достигнутой высоты. В конце условного блока добавим команду break для завершения работы цикла, чтобы программа прекратила свою работу. Запустим программу и проверим окончательный вариант нашей игры.

Если хотите знать больше о языке программирования Python, то записывайтесь к на продвинутый курс по Minecraft и Python в школе “Пиксель”. Мы обучим вас программированию и вместе создадим продвинутые проекты в Майнкрафт. Все под чутким руководством опытных преподавателей!
Полный код программы
import mcpi.minecraft as minecraft
import mcpi.block as block
import time
import random
mc = minecraft.Minecraft.create()
startPos = mc.player.getTilePos()
mc.setBlock(startPos.x, 150, startPos.z, block.GOLD_BLOCK.id)
mc.player.setTilePos(startPos.x, 152, startPos.z)
mc.postToChat("Игра начнется через 5 секунд.")
time.sleep(5)
mc.postToChat("Удачи! Не стой на месте!")
blocks = []
blocks.append([startPos.x, 150, startPos.z])
maxPos = 0
while True:
xr = random.randint(-3, 3)
yr = random.randint(-1, 1)
zr = random.randint(-3, 3)
d = mc.player.getTilePos()
d.x += xr
d.y += yr
d.z += zr
mc.setBlock(d.x, d.y, d.z, block.GOLD_BLOCK.id)
time.sleep(1)
blocks.append([d.x, d.y, d.z])
if len(blocks) > 4:
c = blocks.pop(0)
mc.setBlock(c[0], c[1], c[2], block.AIR.id)
pos = mc.player.getTilePos()
mc.postToChat("Высота: " + str(pos.y))
if pos.y > maxPos:
maxPos = pos.y
if pos.y < 150:
for c in blocks:
mc.setBlock(c[0], c[1], c[2], block.AIR.id)
mc.postToChat("Игра окончена!")
mc.postToChat("Достигнутая высота: " + str(maxPos))
break