Блог онлайн школы Пиксель

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

Классики — одна из самых популярных игр на улице. Это веселая игра, развивающая координацию движений, глазомер и многое другое. В этом материале школа программирования для детей “Пиксель” покажет, как сделать классики в Minecraft с помощью языка программирования Python. Платформу для игры будем создавать на высоте птичьего полета. Задача игрока — набрать как можно больше очков, прыгая с одного алмазного блока на другой. За касание по железному блоку будут начисляться штрафные баллы. Если игрок упадет с платформы, то игра будет окончена. Будем развивать виртуальную координацию. Давайте скорее приступим к созданию!

Для начала создадим python файл под названием classics и сохраним его в любое удобное для нас место. Импортируем нужные для нашей программы библиотеки и модули: minecraft, block и time. В переменную mc поместим команду для проведения операций в игре. В переменной pos будем хранить позиции персонажа на момент запуска программы.

В xp, yp и zp будут расположенные координаты для создания платформы. Чтобы она появилась на приличной для нас высоте, нам нужно к позиции Y прибавить 50. Создадим функцию под названием classics, принимающую аргументы x, y и z. Данная функция будет строить платформу 3 на 7 из железных блоков. В этой платформе будут еще 7 алмазных блоков, на которые игрок должен будет наступать.

Игрока обязательно телепортируем на платформу, чтобы игра не началась без него. Используем функцию classics для создания платформы в тех координатах, которые мы объявляли еще до создания функции. Создадим переменные для подсчета очков, времени от начала игры, уровня и количества алмазных блоков, оставшихся для повышения уровня. Как только игрок соберет все алмазные блоки, он получит повышение уровня и все алмазные блоки снова появятся на платформе.

В чат игры сделаем вывод сообщения за 10 секунд до началы игры. Для остановки программы используем команду time.sleep. После истечения времени в чат сделаем вывод сообщения о начале игры. Добавим бесконечный цикл, останавливающий программу на одну секунду. В переменную timer будет прибавляться единица. В pos мы записываем еще раз команду для получения координат персонажа. Эта переменная будет обновляться каждую новую итерацию, то есть каждый раз, когда цикл будет повторяться. Для удобства координату каждой оси поместим в переменные x, y и z. В переменной Y у позиции отнимаем единицу для того, чтобы получать координаты блока под ногами. 

Команду для получения номера блока поместим в переменную b. В качестве аргументов передадим три переменные, которые мы создавали выше. Запишем несколько условий. Первое условие будет считывать нахождение игрока на алмазном блоке. В этом случае прибавляется один балл, у переменной diamonds (для подсчета оставшихся алмазных блоков) отнимается единица, на месте алмазного блока образуется железный блок, а в чат отображается информация о набранных очках, пройденном времени, уровне игрока и количестве оставшихся алмазных блоков. 

Второе условие считывает нахождение игрока на железном блоке. В этом случае игроку начисляются 3 штрафных балла, блок исчезает и в чат происходит вывод информации об игре. Третье условие нужно на случай, если игрок наступил на все алмазные блоки. В этом случае переменная diamonds снова становится равной 7, повышается уровень, производится вывод информации об игре в чат и используется функция classics для обновления платформы.

Последнее условие будет для поражения игрока. Если персонаж упадет с платформы, то в чат игры произойдет вывод итогов: сколько очков набрал игрок, за какое время и какого уровня он достиг. Затем мы уберем платформы из игры, чтобы не засорять карту и в чат последует вывод сообщения об окончании игры. Командой break мы оборвем цикл и программа будет отключена. 

Проверяем игру в деле.

Для того, чтобы научиться создавать игры в Minecraft с помощью языка программирования Python, записывайтесь к нам на онлайн-курс по Minecraft. А также не пропускайте наши видеоуроки на YouTube, где мы создаем много интересных проектов на Python и других языках программирования.

Полный скрипт игры:


import mcpi.minecraft as minecraft
import mcpi.block as block
import time

mc = minecraft.Minecraft.create()
pos = mc.player.getTilePos()

xp = pos.x
yp = pos.y + 50
zp = pos.z

def classics(x, y, z):
    mc.setBlocks(x - 1, y - 1, z, x + 1, y - 1, z + 6, block.IRON_BLOCK.id)

    mc.setBlock(x, y - 1, z + 1, block.DIAMOND_BLOCK.id)
    mc.setBlock(x - 1, y - 1, z + 2, block.DIAMOND_BLOCK.id)
    mc.setBlock(x + 1, y - 1, z + 2, block.DIAMOND_BLOCK.id)
    mc.setBlock(x, y - 1, z + 3, block.DIAMOND_BLOCK.id)
    mc.setBlock(x - 1, y - 1, z + 4, block.DIAMOND_BLOCK.id)
    mc.setBlock(x + 1, y - 1, z + 4, block.DIAMOND_BLOCK.id)
    mc.setBlock(x, y - 1, z + 5, block.DIAMOND_BLOCK.id)

mc.player.setTilePos(xp, yp + 2, zp)
classics(xp, yp, zp)

scores = 0
timer = 0
level = 1
diamonds = 7

mc.postToChat("Привет! Через 10 секунд начнется игра Классики!")
time.sleep(10)
mc.postToChat("Игра началась! Удачи!")

while True:
    time.sleep(1)
    timer += 1

    pos = mc.player.getTilePos()

    x = pos.x
    y = pos.y - 1
    z = pos.z

    b = mc.getBlock(x, y, z)

    if b == block.DIAMOND_BLOCK.id:
        scores += 1
        diamonds -= 1
        mc.setBlock(x, y, z, block.IRON_BLOCK.id)
        mc.postToChat("Scores: " + str(scores))
        mc.postToChat("Timer: " + str(int(timer)))
        mc.postToChat("Level: " + str(int(level)))
        mc.postToChat("Diamonds: " + str(diamonds))

    if b == block.IRON_BLOCK.id:
        scores -= 3
        mc.setBlock(x, y, z, block.AIR.id)
        mc.postToChat("Scores: " + str(scores))
        mc.postToChat("Timer: " + str(int(timer)))
        mc.postToChat("Level: " + str(int(level)))
        mc.postToChat("Diamonds: " + str(diamonds))

    if diamonds == 0:
        diamonds = 7
        level += 1
        mc.postToChat("Scores: " + str(scores))
        mc.postToChat("Timer: " + str(int(timer)))
        mc.postToChat("Level: " + str(int(level)))
        classics(xp, yp, zp)

    if y < yp - 1:
        mc.postToChat("Total:")
        mc.postToChat("Scores: " + str(scores))
        mc.postToChat("Timer: " + str(int(timer)))
        mc.postToChat("Level: " + str(int(level)))
        mc.setBlocks(xp - 1, yp - 1, zp, xp + 1, yp - 1, zp + 6, block.AIR.id)
        mc.postToChat("Game Over!!!")
        break

Бесплатные видеоуроки Minecraft для детей