Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Рассказываем, как запрограммировать игру с уровнями в Minecraft с помощью языка Python.

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Игровая вселенная Minecraft уже несколько лет используется в образовательных целях — а все благодаря элементам геймификации. Детям проще обучаться в виртуальном мире, в окружении любимых персонажей и в знакомой среде. Такие игровые детали позволяют удерживать внимание ребят и мотивируют их продолжать обучение. За какой бы предмет они ни взялись, будь то покорение иностранного языка, математики или физики, в «Майнкрафте» они будут ассоциироваться с чем-то увлекательным, а, главное, актуальным, ведь все теории можно будет рассмотреть на примере.

Помимо классических школьных предметов, в «Майнкрафте» дети могут также изучать программирование. Если подключить к платформе популярный язык программирования Python, то можно создавать различные объекты, используя текстовый код. Это отличная возможность познакомить детей с логикой программирования, не отрывая их от любимой игры.

В Minecraft можно не только проектировать постройки, но и разрабатывать собственные мини-игры. Онлайн-школа программирования для детей «Пиксель» делится бесплатным уроком по созданию игры-квеста в Minecraft с помощью языка Python.

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

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

В конце материала мы добавим видеоинструкцию — если вам удобнее воспринимать информацию в таком формате, можете сразу переходить к ролику. А также прикрепим полный скрипт для разработки игры.

Установка необходимых программ

У нас есть подробные инструкции по установке Minecraft и IDLE (редактор для Python) на ПК:

Если вы еще не знакомы с программированием в Minecraft, мы рекомендуем начать с коротких пошаговых уроков. Этот плейлист знакомит детей с основами кодинга и учит создавать базовые постройки с помощью Python: от простых стен и зданий до целой улицы с домами.

Создание скрипта на Python с нуля

Создадим python-файл под названием quest. Импортируем четыре модуля: minecraft, block, time, random. В переменную mc поместим команду для проведений операций в игре.

Очки опыта будут храниться в переменной exp. Название переменной идет от английского слова experience, что означает опыт. Значение уровня поместим в переменную level. В качестве значения будет единица. Для повышения уровня требуется какой-то ориентир, на который программа будет опираться. Этим ориентиром послужит переменная up со значением 1000. Когда персонаж достигнет этого значения, уровень повысится.

Блок будет появляться рядом с персонажем. Радиус поиска будет составлять пять блоков — именно это число мы поместим в переменную radius. Игроку необходимо знать, сколько времени прошло от начала игры. Для этого мы создадим переменную allTime.

В чат выведем приветствие и правила игры: заработать как можно больше опыта, выделение минуты на поиск каждого блока, получение пятисот очков за каждый блок, задача — набрать 1000 очков для перехода на второй уровень. Если игрок не успел найти блок, то игра заканчивается.

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Останавливаем программу на 10 секунд благодаря команде time.sleep(10). Этого должно хватить для прочтения правил. Если считаете, что нужно оставить больше времени на ожидание, то просто увеличьте число в скобках.

Логика игры

Определим функцию под названием quest. Здесь будем хранить основную логику игры. Командой global обозначим переменные level, exp, radius, allTime. Данная команда нужна для вызова переменных, которые находятся за пределами функции. Особенно важно помечать переменные командой global, когда мы хотим их изменить. Ниже определим позицию персонажа в переменную pos. В r1 и r2 поместим команды, которые делают генерацию случайных чисел в определенном промежутке. В нашем случае этим промежутком является радиус от отрицательного значения до положительного, то есть от -5 до 5.

В x и z поместим координаты персонажа, прибавленные к случайным числам. Таким образом мы получим случайное место на карте недалеко от персонажа. А в y поместим функцию mc.getHeight. С ее помощью блок будет создаваться на поверхности ландшафта: например, на траве, воде, дереве и на других элементах окружающей среды. В скобки поместим x и z, чтобы объяснить программе, на каком именно участке создавать блок.

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Команда mc.setBlock создаст алмазный блок. Поместим в скобки x, y, z и команду алмазного блока. В timer поместим число 60. Как вы уже догадались, здесь будет храниться время, за которое персонаж должен найти блок. Переменная found отвечает за отчетность о нахождении блока. Пока поставим false, потому что блок изначально не найден.

Циклом while обозначим, что пока очков меньше предела для повышения и пока блок не найден (команда not играет роль отрицания), будет исполняться следующий код: запускаем функцию info (она у нас еще не написана, поэтому расскажем о ней позже), к общему времени allTime прибавляется единица, переменная hits хранит в себе команду для распознавания касаний по блоку, циклом for считываем эту переменную, далее в bp поместим позицию, где произошло это событие, добавляем условие: если клик произошел на месте созданного блока, то блок считается подобранным, в копилку опыта зачисляется 500 очков, в чат выводится информация об этом, переменная found сообщает наличием значения True, что блок найден, затем следует прекращение цикла посредством команды break.

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Цикл while все это время делал паузу в одну секунду, чтобы работа таймера была корректной. Если время на поиск блока истекло, то об этом пишется в чат, блок исчезает, выводится статистика игры, уровень падает на значение 0 и команда break прекращает работу цикла.

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Настало время написать функцию info. В ней тоже объявляем целый ряд глобальных переменных. Команду для считывания чата помещаем в переменную chat. Считываем ее циклом for. Для хранения сообщения из чата создадим переменную m. Добавим условие: если в чат пропишется команда info, то игрок увидит статистику своей игры на данный момент.

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Объявим цикл while, работающий, пока уровень не будет равен нулю. А он равен нулю только тогда, когда игрок не успел найти блок за отведенное ему время. В цикл помещаем функцию quest для ее запуска. Без этого функция работать не будет. Добавим условие: если опыта будет больше, либо он будет равен нужному порогу, то повышается уровень, порог для следующего уровня и радиус поиска удваиваются и происходит вывод этой информации в чат.

Как создать квест-игру на Python в Minecraft — обучение Python для детей и начинающих

Настало время проверить игру на деле.

Если вы хотите создать другую квестовую игру или получить навыки для усложнения квест-игры из этого урока, заглядывайте к нам на YouTube-канал. Мы регулярно публикуем ролики по разработке проектов внутри Майнкрафта: от построения небоскребов, космических ракет и лесов до программирования полноценных игр.

Полный код игры на Python

import mcpi.minecraft as minecraft import mcpi.block as block import time import random mc = minecraft.Minecraft.create() exp = 0 level = 1 up = 1000 radius = 5 allTime = 0 mc.postToChat("Привет! Скоро начнется игра.") mc.postToChat("Заработай как можно больше опыта и будешь получать следующий уровень.") mc.postToChat("На поиск каждого блока выделяется минута. Если не успел, то игра заканчивается.") mc.postToChat("За каждый блок получаешь 500 очков.") mc.postToChat("Для получения второго уровня тебе нужно набрать 1000 очков опыта.") mc.postToChat("Удачи!!!") time.sleep(10) def quest(): global level, exp, radius, allTime pos = mc.player.getTilePos() r1 = random.randint(-radius, radius) r2 = random.randint(-radius, radius) x = pos.x + r1 z = pos.z + r2 y = mc.getHeight(x, z) mc.setBlock(x, y, z, block.DIAMOND_BLOCK.id) mc.postToChat("Блок появился! Найди его за минуту.") timer = 60 found = False while exp < up and not found: info() allTime += 1 hits = mc.events.pollBlockHits() for h in hits: bp = h.pos if bp.x == x and bp.y == y and bp.z == z: mc.setBlock(x, y, z, block.AIR.id) mc.postToChat("Блок подобран!") exp += 500 mc.postToChat("Опыт: " + str(exp)) found = True break time.sleep(1) timer -= 1 mc.postToChat("Осталось: " + str(timer)) if timer < 1: mc.postToChat("Ты проиграл!") mc.setBlock(x, y, z, block.AIR.id) mc.postToChat("-----------------------------") mc.postToChat("Опыт: " + str(exp)) mc.postToChat("Общее время: " + str(allTime)) mc.postToChat("Уровень: " + str(level)) mc.postToChat("Радиус поиска: " + str(radius)) mc.postToChat("-----------------------------") level = 0 break def info(): global level, exp, radius, allTime, up chat = mc.events.pollChatPosts() for c in chat: m = c.message if m == "info": mc.postToChat("-----------------------------") mc.postToChat("Опыт: " + str(exp)) mc.postToChat("Общее время: " + str(allTime)) mc.postToChat("Уровень: " + str(level)) mc.postToChat("Очков до повышения уровня: " + str(up - exp)) mc.postToChat("Радиус поиска: " + str(radius)) mc.postToChat("-----------------------------") while level != 0: quest() if exp >= up: level += 1 up *= 2 radius *= 2 mc.postToChat("-----------------------------") mc.postToChat("Поздравляем! Ты получил " + str(level) + " уровень.") mc.postToChat("Теперь тебе нужно набрать " + str(up) + " для следующего уровня.") mc.postToChat("Радиус поиска увеличился до " + str(radius) + ".") mc.postToChat("-----------------------------")

Видеоурок по созданию квеста на Python

447447 показов
1.1K1.1K открытий
Начать дискуссию