樹莓派自定義遊戲,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章