Как создать игру «Счастливый сундук» в Minecraft на Python — урок для детей

2a02eb052d4fd31c8528ef2c3cdba5a6.png

Мы покажем, как создать игру с поиском сундука внутри вселенной Minecraft. В этом нам поможет язык программирования Python. Урок предназначен для детей от 9–10 лет и старше.

Мы напишем скрипт, который будет создавать сундуки внутри вселенной Minecraft. Цель игрока — среди множества различных сундуков найти счастливый за ограниченное количество времени. 

Урок подготовлен школой программирования для детей Pixel. В конце материала мы оставили видео, где также подробно разбирается код для игры, если такой формат для вас комфортнее.

8f3c04a4b41bf3984dec006b75bbba26.png

Установка программ

Для начала необходимо загрузить все необходимые приложения. У нас есть подробные гайды для пользователей разных операционных систем:

Если вам сложно разобраться в теме, посмотрите сначала пошаговые уроки по 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.

© Habrahabr.ru