Как создать игру «Счастливый сундук» в Minecraft на Python — урок для детей
Мы покажем, как создать игру с поиском сундука внутри вселенной 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.