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