「騎」進《Minecraft》世界

四月 26, 2018
Facebook
Twitter
文.圖/明愛胡振中中學 莊慶榮老師
圖片

相信你一定試過使用遊戲搖桿操控電腦遊戲裡面的主角;但你有沒有想過,可以自己製作一個專屬的遊戲搖桿呢? 這次我們會介紹如何在Raspberry Pi中編寫程式,並利用自行車的腳踏板做為輸入,與Raspberry Pi進行互動,用以控制《Minecraft》(當個創世神)遊戲世界裡的物件。

圖片利用Python語言建立互動程式

在最新的Raspberry Pi操作系統中,已預載了《Minecraft》遊戲。這個預載在Raspberry Pi版本的《Minecraft》遊戲名為《Minecraft: Pi》,是專為Raspberry Pi設計的一個小規模的版本。除了是一款免費遊戲外,筆者覺得這個版本也能帶給使用者很多的驚喜,因為在這個版本裡面,我們不單可以使用鍵盤和滑鼠來操控,還可以利用Python語言建立互動程式,用來控制或改變遊戲世界裡的物件。Minecraft: Pi Edition也可以和Sonic Pi互動,或與Sense HAT(一款集結了多種感測器的Raspberry Pi擴充板)連結,做為遊戲的輸入輸出,玩法可謂變化多端。在此將分享如何設計程式及打造專題,將《Minecraft》世界和現實世界連結起來。
 
成本:不含腳踏車約2,000港幣(約8,000新臺幣)
時間:15小時


材料
Raspberry Pi 3,含8G SD卡、電源線、DMI線
19吋電腦螢幕
MCP3009類數位轉換器
自行車
自行車固定架
自行車發電機
1kΩ電阻與導線
木材,1 “×2 “
麵包板
螺絲
工具
萬用電表
手持線鋸機
電動起子
剪線鉗
膠帶

建立Minecraft世界的基本技巧
開始製作這個專題之前,我們要先在遊戲中建立自己的世界。啟動《Minecraft》遊戲之後,只需按「New」,系統便會帶我們進入一個全新的世界。在這裡我們會先打造多條隧道,讓玩家在這些隧道中行走;當到達不同地段的時候,畫面上便會顯示訊息,表示當時玩家正處於哪一個地點。當然,你也可以在隧道中放上不同的景物,讓遊戲的體驗更加豐富。
 
啟動《Minecraft》遊戲之後,除了可以利用鍵盤按鈕W、A、S、D或Space來控制主角的前後左右動作,也可以利用按鈕E來選擇不同的裝備或磚塊種類。按下滑鼠的左鍵,便可以清除前面的磚塊;按下滑鼠的右鍵,便可以將已選擇的磚塊建構出來。雖然我們可以一塊一塊、慢慢地進行打造,不過也可以利用撰寫程式的方式來快速地建構出自己的世界。

圖片有關隧道的座標說明

利用Python製造隧道
如前所述,《Minecraft: Pi》是專為Raspberry Pi而設計的版本,可以利用Python建立互動程式,在這裡我們將以編寫程式的方法,快速地建立一條隧道。

要在《Minecraft》中建立物件,我們先得弄清楚《Minecraft》的座標方向。當玩家進入遊戲之後,主角身處的空間中平面方向的座標是以X軸和Z軸代表,高度是以Y軸代表。建立隧道的原理,是先建立一個長方體實物,然後將這個長方體中的磚塊移去,就能做出一條隧道;也就是先選擇主體,再選擇需要減去的重疊實體,這也就是3D建模技巧中的「差」(SUBTRACT)運算。 進入遊戲之後,執行下方的Python程式(createTunnel.py),便可以建立一條基於主角目前所在的座標位置,沿X軸方向長150個單位,牆壁為一個單位厚的隧道。  

圖片

利用Python程式在《Minecraft》世界裡製造出隧道
createTunnel.py
行數 程式碼
​1  from mcpi.minecraft import Minecraft
2  import mcpi.block as block
3  mc = Minecraft.create()
4  p = mc.player.getPos()
5  mc.setBlocks(p.x, p.y, p.z-2, p.x+150, p.y+2, p.z+2, block.STONE)
6  mc.setBlocks(p.x, p.y, p.z-1, p.x+150, p.y+1, p.z+1, block.AIR)
Python程式tunnel.py的說明如下:
行數1-2:載入《Minecraft》的相關Library。 
行數3:在遊戲中建立玩家。
行數4:取得玩家現在的位置,以座標形式表示。
行數5:建立一個長方體石塊。
行數6:將這個長方體石塊裡面的空間移去,變形成一條隧道。

顯示主角所在地資訊如果想強化互動程式的效果,我們可以編寫程式,在主角到達某地段的時候,便會顯示出相關訊息,在這裡我們設計為:當主角身處的地點的x坐標數值介乎於某個範圍時(例如32至33),畫面上便會顯示出預設訊息「Welcome to this Zone」。

圖片

主角到達某地段的時候,畫面便會顯示預設信息
控制遊戲的畫面移動最後一個步驟,就是要將自行車的腳踏板改裝,打造可控制《Minecraft》畫面移動的「操控桿」。我們先將一個自行車發電器安裝在自行車後轆的邊緣上,當玩家用腳驅動自行車的腳踏板,車輪便會轉動,進而推動自行車發電器,最後產生電壓(情況就好像手搖發電機一樣,當轉動發電機便會產生電力)。我們將這個電壓做為Raspberry Pi的輸入,當電壓的數值大於某個設定數字(例如0.5V),後《Minecraft》畫面便會向前移動,就像是身處在虛擬的世界中騎車一樣。

因為電壓是屬於類比訊號,所以我們要通過一顆類比數位轉換器MCP3008來轉換訊號,並輸入到Raspberry Pi。只要依照下方圖片所示進行接線,Raspberry Pi便可讀取類比訊號。
圖片

圖片

圖片

Raspberry Pi接駁數位轉換器MCP3008
圖片

最後便是編寫程式,再將上述的裝置結合起來。所需要的電腦程式可參考下方程式碼stepForward。
stepForward.py
行數 程式碼
1  from gpiozero import MCP3008
2  from mcpi.minecraft import Minecraft
3  import time
4  voltageGen = MCP3008(0)
5  mc = Minecraft.create()
6  while True:
7   if voltageGen.value >0.5: 
8     playerPos=mc.player.getPos()
9     mc.player.setPos(playerPos.x+10,playerPos.y,playerPos.z)
10       if playerPos.x >32.0 and playerPos.x<32.6:
11      mc.postToChat(“Welcome to this Zone”)
12      time.sleep(0.1)
Python程式stepForward.py的說明如下:
行數1-3:載入《Minecraft》的相關Library。  
行數4: 自行車發電器的電壓接駁至類比數位轉換器MCP3008的第一個腳位。
行數5:在遊戲中建立玩家。
行數6-9 :利用while True 建立一個重複的循環結構。當自行車發電器的電壓數值大於0.5V的時候,電腦程式便會取得玩家當時的位置,並在x座標的數值中加上10,使玩家沿著x的方向,前行十個單位(playerPos.x+10)。
行數10-12:當玩家的x座標的數值大於32.0及小於32.6的時候, 畫面中便會顯示訊息「Welcome to this Zone」

總結
透過在《Minecraft》遊戲中建立不同的園景,我們便可以利用這個自製的操控桿來進行不同的活動,例如建立某一個歷史場景,讓學生在遺蹟中遊歷,加深學習歷史的興趣;或在地理課中將地形和山勢模擬建造出來,讓學生在當中遊走,相信學生對學習必定有另一番的體會。相信讀者也可以運用想像力,利用Raspberry Pi製作出更多新穎的操控裝置。實際操作影片,請見下方:



※作者聲明:此創客專題是由本校師生原創及製作,「不是官方的 MINECRAFT 產品。未經 MOJANG 批准或關聯」

圖片

莊慶榮老師
明愛胡振中中學
資訊及通訊科技科科主任
chw@cwcc.edu.hk
任教資訊科技及數學科,並為《PCM電腦廣場》雜誌STEM教育專欄作者。於大學修讀工程學科,對科技、數學及電腦學科有濃厚興趣,喜愛思考各種知識的綜合應用,期待為學生帶來學習上的刺激。

Social media & sharing icons powered by UltimatelySocial