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

Как сделать ловушки в Minecraft на Python

Онлайн-школа программирования “Пиксель” продолжает знакомить вас с программированием Minecraft для детей. В серии уроков мы создаем небольшие проекты и изучаем программирование на Python в среде Minecraft. На этот раз мы придумали способ разыграть ваших друзей: мы сделаем зону хитроумных ловушек в Minecraft с помощью Python. 

В виде приманки будут использованы алмазный, золотой и железный блоки. 


Как только игрок приблизится к блоку, он сразу же попадет в капкан. Сбежать из этой зоны тоже не получится. Нас сразу же будет атаковать бешеный Бедрок. Если персонаж не вернется в зону ловушек в течение 10 секунд, то его закроют в камере, из которой он больше не сможет выбраться. Не будем затягивать, давайте перейдем к программированию. 


Инструкции, как скачать Minecraft и Python:
-на Windows
-на MacOS

Программирование


Создадим Python-файл в среде разработки IDLE. Сохраним его на рабочем столе под названием Traps (в переводе с английского — ловушки). Импортируем необходимые модули: minecraft, block и time. В переменную “mc” поместим команду для проведения операций в игре Minecraft. Определим позицию персонажа в переменную “pos”. Заранее подготовим координаты расположения блоков-приманок. Расположим их по оси “x” на расстоянии друг от друга в 4 блока. В переменную “xd” поместим позицию персонажа по оси “x” и прибавим число 5.  В переменной “xg” хранится координата золотого блока по оси “x”. В ней к позиции персонажа прибавляется 10. Координата железного блока хранится в переменной “xi”. Приравняем к ней сумму позиции персонажа и числа 15.

В переменные “x”, “y” и “z” приравняем координаты персонажа по трём осям. В дальнейшем будем их использовать создания зоны для ловушек. Объявим переменные, которые будут хранить в себе нужные нам блоки. Нам понадобятся алмазный, золотой, железный, воздушный блоки, огонь, динамит, бедрок (коренная порода), лава и травянной блок. Создадим площадку травяных блоков 20 на 20 так, чтобы мы оказались по центру. Над площадкой построим объемный прямоугольник 20 на 20 и высотой в 6 блоков. 



Создадим три функции “setBlock” для добавления трех блоков в игру: алмазный, золотой и железный. Переменные по оси “x” мы объявили заранее для каждого блока. По оси “y” и “z” используем общие переменные. Блоки мы также определили выше: “d’ - алмазный блок, “g” - золотой, “i” - железный. 



В переменной “timer” напишем число 10 точка 0. Добавим бесконечный цикл, в котором остановим программу на 0 целых одну десятую секунды. Нам обязательно потребуется обновлять нашу позицию, поэтому в переменную “pos” приравняем команду для определения позиции персонажа. 

Добавим условие для алмазного блока. Если персонаж будет находиться около алмазного блока, то под игроком появляется огромная пропасть, в которую он будет падать 5 секунд. После этого он вернется на точку спавна. 



Следующим условием запрограммируем золотой блок. Если персонаж подойдет к золотому блоку, он окажется в бедроковой коробке, внутри которой активированный огнем динамит. Через 10 секунд нас телепортирует на точку спавна. 




Условие для железного блока: если персонаж подошел к железному блоку, то он опять окажется в бедроковой коробке, но на полу будет разлита лава. Шансов на спасения нет. 




А теперь сделаем внешнюю ловушку. Если персонаж выйдет из зоны нахождения ловушек, то на него будет нападать бедроковый блок и всячески мешать ему существовать вне зоны ловушек. У переменной “timer” отнимем 0 точка 2 для корректной работы таймера. Напомним, что мы замедлили программу два раза на 0 точка 1, поэтому у переменной “timer” мы отнимаем 0 точка 2. В чат выведем сообщение о том, через сколько персонаж будет помещен в камеру. Добавим условие: если значение таймера будет меньше единицы, то персонаж будет заперт в бедроковой коробке, из которой он больше никогда не выберется. 



Но если персонаж всё-таки возвращается в зону ловушек, то таймер сбрасывается и бедрок перестает его атаковать.


Полный код


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

mc = minecraft.Minecraft.create()

pos = mc.player.getTilePos()

xd = pos.x + 5
xg = pos.x + 10
xi = pos.x + 15

x = pos.x
y = pos.y
z = pos.z

d = block.DIAMOND_BLOCK.id
g = block.GOLD_BLOCK.id
i = block.IRON_BLOCK.id
a = block.AIR.id
f = block.FIRE.id
t = block.TNT.id
b = block.BEDROCK.id
l = block.LAVA.id
gr = block.GRASS.id

mc.setBlocks(x - 10, y - 1, z - 10, x + 20, y - 1, z + 10, gr)
mc.setBlocks(x - 10, y, z - 10, x + 20, y + 5, z + 10, a)

mc.setBlock(xd, y, z, d)
mc.setBlock(xg, y, z, g)
mc.setBlock(xi, y, z, i)

timer = 10.0

while True:
    time.sleep(0.1)
    pos = mc.player.getTilePos()

    if pos.x >= xd - 1 and pos.x <= xd + 1 and pos.z >= z - 1 and pos.z <= z + 1 and pos.y == y:
        mc.setBlocks(xd - 1, y, z - 1, xd + 1, 0, z + 1, a)
        time.sleep(5)
        mc.player.setTilePos(x, 100, z)

    if pos.x >= xg - 1 and pos.x <= xg + 1 and pos.z >= z - 1 and pos.z <= z + 1 and pos.y == y:
        mc.setBlocks(xg - 2, y - 3, z - 2, xg + 2, y + 1, z + 2, b)
        mc.setBlocks(xg - 1, y - 2, z - 1, xg + 1, y + 1, z + 1, a)
        mc.setBlocks(xg - 1, y - 2, z - 1, xg + 1, y - 2, z + 1, t)
        mc.setBlocks(xg - 1, y - 1, z - 1, xg + 1, y - 1, z + 1, f)
        time.sleep(10)
        mc.player.setTilePos(x, 100, z)

    if pos.x >= xi - 1 and pos.x <= xi + 1 and pos.z >= z - 1 and pos.z <= z + 1 and pos.y == y:
        mc.setBlocks(xi - 2, y - 3, z - 2, xi + 2, y + 1, z + 2, b)
        mc.setBlocks(xi - 1, y - 2, z - 1, xi + 1, y + 1, z + 1, a)
        mc.setBlocks(xi - 1, y - 2, z - 1, xi + 1, y - 2, z + 1, l)
        time.sleep(10)
        mc.player.setTilePos(x, 100, z)

    if pos.x < x - 10 or pos.x > x + 10 or pos.z < z - 10 or pos.z > z + 10:
        mc.setBlock(pos.x, pos.y, pos.z, b)
        time.sleep(0.1)
        mc.setBlock(pos.x, pos.y, pos.z, a)
        timer -= 0.2

        mc.postToChat("Через " + str(int(timer)) + " с. ты будешь помещен в камеру!!!")

        if timer < 1:
            mc.setBlocks(pos.x - 2, pos.y - 2, pos.z - 2, pos.x + 2, pos.y + 2, pos.z + 2, b)
            mc.setBlocks(pos.x - 1, pos.y - 1, pos.z - 1, pos.x + 1, pos.y + 1, pos.z + 1, a)
            mc.postToChat("Ты закрыт в камере навсегда!")
            break

    else:
        timer = 10


Надеемся, что вам были полезны наши уроки Minecraft. Изучайте с нами Minecraft программирование на языке Python, создавайте свои проекты, пишите код и реализуйте все свои фантазии. Если вы хотите углубить свои знания, то приходите на специальный курсв школу “Пиксель”. Мы преподаем Python для детей внутри игровой вселенной Майнкрафт и помогаем создавать свои игры. 

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