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

Как создать симулятор самолета в Minecraft

Привет, друзья! Школа Пиксель” продолжает выпускать уроки по Minecraft и Python для детей. На этот раз мы покажем, как построить самолет в Майнкрафте с помощью языка программирования Python. При запуске кода самолет будет появляться в воздухе. Наша задача — запустить двигатель и задавать самолету правильное направление. Не справившись с управлением, самолет может потерпеть крушение.

как делать самолет в майнкрафте

Перейдем к программированию.

Создание кода


Создадим Python-файл под названием plane (в переводе с английского — самолет). Импортируем модули minecraft, block, minecraftstuff и time. Благодаря модулю minecraftstuff мы спроектируем самолет и будем им управлять. В переменную mc присвоим команду для операций в игре. В mcdrawing — команду для создания различных фигур и моделей. В нашем случае это самолет. 

Создадим переменную planeBlocks с пустым списком. Следом у этого списка вызываем специальную функцию добавления в него элементов. Добавим туда относительные координаты расположения железного блока, который будет являться носовой частью самолета. Данные координаты будем задавать относительно определенной точки, которую зададим в коде чуть позже.

как в майнкрафте сделать самолет без модов

как летать на самолете в майнкрафте

Определим цикл for с 10-ти кратным повторением кода. Таким образом мы построим корпус самолета. Верхнюю часть самолета построим неполностью. Оставим место для блоков стекла. Условием укажем места, где строить железный блок не нужно.

как можно сделать в майнкрафте самолет

как построить самолет в майнкрафте

Следующий цикл for сделает крылья у самолета. Каждая строчка внутри цикла строит одну строчку из железных блоков.

как сделать самолет в майнкрафте

minecraft крушение самолета

Ниже добавим еще два цикла для строительства хвоста.

minecraft мод на самолеты

minecraft самолет

И наконец добавим цикл, который добавит к самолету стеклянные блоки.

игры майнкрафт самолеты

майнкрафт большой самолет

Проект самолета полностью готов. Осталось сделать управление.

Определим позицию персонажа и при старте игры отправим его на высоту 150. Затем укажем позицию самолета, который будет находиться на два блока дальше от персонажа.

Переменная planeShape содержит команду строительства самолета. В скобки поместим три переменные: переменную для операций в игре, позицию самолета и список с блоками, из которых будет состоять самолет. Помним, что в списке мы указывали относительные координаты от определенной позиции. Переменная planePos является той самой определенной позицией.

майнкрафт на python

майнкрафт видео самолетов

В переменных x, y, z содержатся специальные цифры, которые будут влиять на управление самолетом. Переменные x и y содержат числа -1. В дальнейшем будет понятно почему.

Чуть ниже сделаем две переменные, влияющие на режимы игры. Переменная isExit будет контролировать, завершена ли программа, а inPlane — переключать режим просмотра. Если inPlane будет True, значит персонаж будет сидеть в самолете и не сможет никуда покинуть свое место. Если режим будет иметь значение False, то камера наблюдения за самолетом будет свободной.

майнкрафт крушение самолета

Перед запуском цикла изложим правила игры и управления самолетом. 

майнкрафт летающий самолет без модов

В бесконечном цикле создадим переменную b, в которой содержится команда, считывающая блок под самолетом. Эта переменная будет нужна нам для организации поведения самолета во время столкновения с другим объектом.

Ниже активируем команду, в которую поместим переменные x, y, z. Значения у “x” и “y” определяют движение самолета вперед и вниз. Так эмитируется падающий самолет, у которого двигатель еще не запущен. Программа останавливается на 0,5 секунд.

Условие с inPlane реализует режим обзора из самолета. Сделано это просто. Персонажа постоянно телепортирует на самолет. Из-за этого создается ощущение, что персонаж сидит в кресле самолета.

майнкрафт падающий самолет

В переменную chat поместим команду для операций с чатом. Циклом for начнем читать чат. Настроим таким образом управление самолета. На букву s самолет будет снижаться, на букву w — подниматься, на букву d — лететь вправо, на букву a — влево. Буква q запускает двигатель или задает прямую траекторию движения.

майнкрафт самолеты вертолеты

майнкрафт самолеты машины

майнкрафт строить самолеты

Для выхода из программы сделаем команду end. В этом случае самолет исчезает и включиться режим выхода из программы.

программирование майнкрафт python

На букву v добавим интересный режим переключения обзора. Командой not будем ставить противоположное значение inPlane. Если inPlane равен True, то персонаж сидит в самолете, если False — персонаж в свободном полете.

робот самолет майнкрафт


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

самолет в майнкрафте

майнкрафт упавший самолет

В самом низу программы реализуем логику завершения программы посредством команды break.

самолет в майнкрафте постройка

Испытаем наш симулятор.


Полный код программы



import mcpi.minecraft as minecraft


import mcpi.block as block
import minecraftstuff
import time

mc = minecraft.Minecraft.create()
mcdrawing = minecraftstuff.MinecraftDrawing(mc)

planeBlocks = []

planeBlocks.append(minecraftstuff.ShapeBlock(-1,1,0,block.IRON_BLOCK.id))

for i in range(10):
    planeBlocks.append(minecraftstuff.ShapeBlock(i,0,0,block.IRON_BLOCK.id))
    planeBlocks.append(minecraftstuff.ShapeBlock(i,1,1,block.IRON_BLOCK.id))
    
    if i != 0 and i != 2 and i != 4 and i != 6:
        planeBlocks.append(minecraftstuff.ShapeBlock(i,2,0,block.IRON_BLOCK.id))
        
    planeBlocks.append(minecraftstuff.ShapeBlock(i,1,-1,block.IRON_BLOCK.id))

for i in range(-4,5):
    planeBlocks.append(minecraftstuff.ShapeBlock(3,1,i,block.IRON_BLOCK.id))
    planeBlocks.append(minecraftstuff.ShapeBlock(4,1,i,block.IRON_BLOCK.id))
    planeBlocks.append(minecraftstuff.ShapeBlock(5,1,i,block.IRON_BLOCK.id))

for i in range(-4,5):
    planeBlocks.append(minecraftstuff.ShapeBlock(9,1,i,block.IRON_BLOCK.id))

for i in range(1, 4):
    planeBlocks.append(minecraftstuff.ShapeBlock(9,i,-4,block.IRON_BLOCK.id))
    planeBlocks.append(minecraftstuff.ShapeBlock(9,i,4,block.IRON_BLOCK.id))

for i in range(0, 7, 2):
    planeBlocks.append(minecraftstuff.ShapeBlock(i,2,0,block.GLASS.id))

pos = mc.player.getTilePos()
mc.player.setTilePos(pos.x, 150, pos.z)

planePos = mc.player.getTilePos()
planePos.x += 2
planeShape = minecraftstuff.MinecraftShape(mc, planePos, planeBlocks)

x = -1
y = -1
z = 0

isExit = False
inPlane = False

mc.postToChat("Добро пожаловать с Симулятор самолета в Minecraft.")
mc.postToChat("Твоя задача - высоко лететь в небе и дальше держаться от суши.")
mc.postToChat("Управление осуществляется через чат.")
mc.postToChat("q - ЗАПУСК ДВИГАТЕЛЯ")
mc.postToChat("w - вверх.")
mc.postToChat("s - вниз.")
mc.postToChat("a - влево.")
mc.postToChat("d - вправо.")
mc.postToChat("end - завершить игру.")
mc.postToChat("v - переключить обзор камеры.")

while True:

    b = mc.getBlock(planePos.x, planePos.y - 1, planePos.z)
    
    planeShape.moveBy(x, y, z)
    time.sleep(0.5)

    if inPlane:
        mc.player.setTilePos(planePos.x, planePos.y + 3, planePos.z)

    chat = mc.events.pollChatPosts()
    for c in chat:
        m = c.message
        if m == "s":
            mc.postToChat("Направление вниз.")
            y = -1
            
        elif m == "w":
            mc.postToChat("Направление вверх.")
            y = 1
            
        elif m == "d":
            mc.postToChat("Поворот направо.")
            z = -1
            
        elif m == "a":
            mc.postToChat("Поворот налево.")
            z = 1
            
        elif m == "q":
            mc.postToChat("Курс прямо.")
            y = 0
            z = 0
            
        elif m == "end":
            mc.postToChat("До свидания!")
            planeShape.clear()
            isExit = True

        elif m == "v":
            mc.postToChat("Обзор камеры изменен!")
            inPlane = not inPlane

    if b != block.AIR.id:
        mc.postToChat("Самолет потерпел крушение!!! Всем покинуть свои места!!!")
        x = planePos.x
        y = planePos.y
        z = planePos.z
        mc.setBlocks(x + 10, y + 1, z, x, y + 1, z, block.TNT.id)
        mc.setBlocks(x + 10, y + 2, z, x, y + 2, z, block.FIRE.id)
        isExit = True

    if isExit:
        break


Если вы хотите получше познакомиться с языком Python и научиться создавать классные проекты в Майнкрафте, приходите к нам в школу “Пиксель”! У нас есть полный курс по программированию на Python в Minecraft, где вы сможете учиться под руководством наставника. Вместе мы создадим мини-игры, научимся делать бота в Майнкрафте и использовать правило случайного числа и многое другое. Присоединяйтесь!

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