树莓派自定义游戏,Minecraft硬件编程,建造房屋,我的世界还可以这样玩

Raspbian操作系统默认搭载了一个特别的我的世界,特别之处在于可以使用python与外界进行交互,这意味着可以在游戏中控制实体世界中的传感器和执行器。还可以自定义搭建各种物品。

1.使用python与minecraft交互
在交互的时候要用到应用程序接口(API),用键盘控制部分就不多说了,我直接说与python如何交互。
在python3 IDE中创建.py文本
作为程序员的行规,入手第一件事就是向世界问好

#向minecraft发送消息
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
mc.postToChat("hello Minecraft World")

运行后效果出现
在这里插入图片描述

除此以外,还可以获取角色在游戏中的实时位置

#获取人物的环境和实时信息
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
position=mc.player.getTilePos()
print("X position :"+str(position.x)+",Y position :"+str(position.y)+",Z position:"+str(position.z))

from mcpi.minecraft import Minecraft
mc = Minecraft.create()
mc.player.setPos(0,0,0)

在这里插入图片描述

获取环境信息

#寻找世界中某个坐标点的地形情况
from mcpi.minecraft import Minecraft
import mcpi.block as block
def getSafePos(x_pos, y_pos, z_pos):
    black_id=mc.getBlock(x_pos,y_pos,z_pos)

    if(block_id==block.AIR.id):
        while(block_id==block.AIR.id):
            y_pos=y_pos-1
            block_id=mc.getBlock(x_pos,y_pos,z_pos)

        y_pos=y_pos+1

    else :
        while (block_id != block.AIR.id):
            y_pos=y_pos+1
            block_id=mc.getBlock(x_pos,y_pos,z_pos)

    return (x_pos,y_pos,z_pos)
mc = Minecraft.create()
mc.player.setPos(getSafePos(0,0,0))

注意:运行最后的代码要确定周围的环境情况,否则会造成人物无法运动,游戏也就无法进行下去。

import mcpi.minecraft as minecraft
import mcpi.block as block
from mcpi.minecraft import Minecraft
from gpiozero import Button
import time

#设置按键所连接的GPIO端口 &将程序连接到Minecraft
mc=Minecraft.create()

BTN_HOUSE=18

#房屋尺寸
house_size_x=16
house_size_y=6
house_size_z=10

#将房屋坐标保存,方便传送
#如果没有定义,则设置为0,0,0
#wec3可以用来创建位置向量


house_position=minecraft.Vec3(0,0,0)

#移动前的延迟
DELAY=1

#用于检测按键的主循环
def main():
    btn_house=Button(BTN_HOUSE)

    while True:
        if(btn_house.is_pressed):
            #将当前坐标设置为房屋坐标
            #该坐标将会是房屋的中点
            house_position=mc.player.getTilePos()
            build_house(house_position,house_size_x,house_size_y,house_size_z)
            time.sleep(DELAY)
        time.sleep(0.2)

def build_house (house_position,house_size_x,house_size_y,house_size_z):
    #平整土地
    mc.setBlocks(house_position.x-(house_size_x/2,house_position.y,house_position.z-(house_size_z/2),block.AIR.id)

在这里插入图片描述
这里就举一个列子,同样的方法建造墙壁,房屋的尺寸根据左上角的坐标来调整一下,如图我是参考了github里面一位国外玩家的方法所做,等等,同样用函数模块化, 这里用到了mcpi.minecraft,mcpi.block,gpiozero

猜你喜欢

转载自blog.csdn.net/qq_43513350/article/details/90695086
今日推荐