Как создать игру «Счастливый сундук» в 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.


ссылка на оригинал статьи https://habr.com/ru/articles/848648/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *