
Мы покажем, как создать игру с поиском сундука внутри вселенной Minecraft. В этом нам поможет язык программирования Python. Урок предназначен для детей от 9-10 лет и старше.
Мы напишем скрипт, который будет создавать сундуки в мире Minecraft. Цель игрока — среди множества различных сундуков найти счастливый за ограниченное количество времени.
Урок подготовлен школой программирования для детей Pixel. В конце материала мы оставили видео, где также подробно разбирается код для игры, если такой формат для вас комфортнее.

Установка программ
Для начала необходимо загрузить все необходимые приложения. У нас есть подробные гайды для пользователей разных операционных систем:
Если вам сложно разобраться в теме, посмотрите сначала пошаговые уроки по Minecraft и Python для новичков.
Создание программы для сундука в Майнкрафте
Давайте начнем писать программу. Первым делом импортируем нужные библиотеки: библиотеку Minecraft для связи с игрой, библиотеку Block из MC5 для создания блоков, а также библиотеку Random для случайного спавна сундуков и Time для учета времени.
from mcpi.minecraft import Minecraft from mcpi import block import random import time
Далее создаем переменную MC. Она будет хранить связь между нашей программой и миром Майнкрафта. А также получим координаты игрока, переменные Player X, Y и Z.
mc = Minecraft.create() player_x, player_y, player_z = mc.player.getTilePos()
Определим количество сундуков в переменной MC, а затем лимит времени для прохождения игры, переменную TimeLimit. Обозначим максимальную зону спавна сундуков в MaxRange и создадим пустой список, в котором будут храниться координаты наших сундуков.
num_chests = 50 time_limit = 30 max_range = 30 chests = []
С помощью цикла For сгенерируем случайные координаты для сундуков. X и Z мы будем генерировать с помощью RunInt — функции, которая может выдать случайное целое число. Мы будем передавать негативные параметры MaxRange и позитивные параметры MaxRange. Например, чтобы сундук формировался от минус 10 до 10 блоков от нас по осям X и Z. Чтобы наши блоки не летали в воздухе, мы получим Y с помощью функции GetHeight. Она определяет высоту блока в мире. И добавляем координаты в список Chats, создавая сундук.
for _ in range(num_chests): x = player_x + random.randint(-max_range, max_range) z = player_z + random.randint(-max_range, max_range) y = mc.getHeight(x, z) chests.append((x, y, z)) mc.setBlock(x, y, z, block.CHEST.id)
Далее выберем случайный счастливый сундук с помощью функции Random.Choice. Она выберет одну из координат наших сундуков в списке.
lucky_chest = random.choice(chests)
Теперь нам нужно создать функцию, которая будет проверять, кликнули мы по счастливому сундуку и уложились ли во временной промежуток. В начале функции определяем время нашего начала с помощью библиотеки time.time. В цикле while мы будем отслеживать разницу между текущим временем и временем начала. И если времени истекло меньше лимита, мы будем проверять удары по блокам. В случае если координаты удара совпадут с координатами счастливого сундука, то, получается, мы нашли счастливый сундук. И поэтому вернем значение true. В ином случае наше время выйдет, и мы вернем false как параметр того, что игра окончена с проигрышем.
def chech_for_chest(): start_time = time.time() while time.time() - start_time < time_limit: events = mc.events.pollBlockHits() for event in events: hit_x, hit_y, hit_z = event.pos if (hit_x, hit_y, hit_z) == lucky_chest: mc.postToChat("Вы нашли счастливый сундук!") return True mc.postToChat("Время вышло! Попробуйте снова.") return False
Теперь мы можем вывести в чат сообщение о старте, запустить нашу функцию, записав ее результат в переменную gameWin. После того как наша функция пройдет, в цикле for мы удалим все сундуки, чтобы они не оставались в следующих играх. И если все-таки наша переменная gameWin будет true, то мы поздравим игрока с победой и заспавним алмазный блок. В ином случае наша игра будет окончена.
mc.postToChat(f"Найдите счастливый сундук за {time_limit} секунд!") game_win = chech_for_chest() for chest in chests: mc.setBlock(chest[0], chest[1], chest[2], block.AIR.id) if game_win: mc.postToChat("Поздравляем! Заберите приз!!!") mc.setBlock(player_x, player_y, player_z, block.DIAMOND_BLOCK.id) else: mc.postToChat("Игра окончена.")
Результат игры
Давайте протестируем нашу программу. Чтобы игра была интересной, можно подобрать свои значения переменных, такие как количество сундуков, время, за которое нам придется пройти эту игру, а также максимальный радиус спавна. Допустим, мы можем сделать очень большую площадку и спавнить там очень много сундуков. И на это нам понадобится больше времени. Или же наоборот, мы заспавним всего лишь несколько сундуков на маленькой площади.
Видео: как сделать сундук в Майнкрафт
Если вы не до конца поняли текстовую инструкцию, посмотрите видеоурок, где преподаватель разбирает код для игры.
Урок подготовлен детской IT-школой Pixel. Мы помогаем детям от 5 до 17 лет освоить IT-навыки. На наших курсах ребята изучают программирование, веб-дизайн, геймдев, 3D-моделирование и компьютерную анимацию. Дети в возрасте от 9 до 13 лет могут научиться программировать в Minecraft с использованием языка Python, раскрывая свои таланты в мире IT.
