樹莓派 micro:bit game controller with Scratch
2017-09-06 07:09micro:bit game controller with Scratch

What you will make
在這個資源中,你將使用BBC micro:bit來控制Scratch中的精靈,並且進行巨大的星際爭霸。
What you will learn
通過創建一個帶有BBC micro:bit的微型位遊戲控制器和您的Raspberry Pi,您將學習
如何在micro:bit和Scratch之間傳遞數據
如何使用micro:bit控制Scratch sprite
如何製作酷炫的“太空飛船”遊戲
這個資源涵蓋了以下Raspberry Pi數字製作課程的內容:
設計基本的2D和3D資產
使用基本的編程結構來創建簡單的程序
組合輸入和/或輸出來創建項目或解決問題
What you will need
Hardware
除了帶有SD卡和常規外圍設備的Raspberry Pi,您還需要:

BBC micro:bit

USB-A to micro USB-B cable
有關硬件要求的更多信息,請參閱硬件信息頁面
Software
要準備此資源,您需要一個最新的SD卡映像。 請參閱更新Raspbian指南。
您還需要安裝以下附加軟件:
Python 3 Scratch
mu
有關安裝這些庫的信息,請參閱軟件安裝頁面
BBC micro:bit game controller
在這個資源中,你將使用一個micro:bit作為遊戲控制器在Scratch,並幫助重新獲得對星系的控制!
Setting up the micro:bit
If you are unfamiliar with using the micro:bit, MicroPython, and the Raspberry Pi, you might want to take a look at the Getting Started with the micro:bit resource.
Finding the USB port
對於micro:bit能夠與Scratch進行通信,您需要知道micro:bit如何連接到Raspberry Pi。
1.將Micro:bit與Raspberry Pi斷開連接,打開LXTerminal,然後鍵入以下內容:
ls/dev/ttyA*
1. 通過USB電纜插入micro:bit,再次鍵入命令:
ls/dev/ttyA*
輸出中應該有一個新條目,可能是像dev / ttyACM1這樣的東西。 你需要注意這一點。
Setting up the Python file
打開IDLE(菜單>編程> Python 3 , Menu > Programming > Python 3),創建一個新文件(File> New File),然後將下面的代碼複製並粘貼到文件中。 將其另存為rpi.py。
import serial
fromtimeimportsleep
import scratch
scr=scratch.Scratch()
## THE NEXT LINE MIGHT NEED TO BE CHANGED - TYPE ls /dev/ttyA* into the terminal to see which port is needed.
PORT = "/dev/ttyACM1"
##
BAUD = 115200
s=serial.Serial(PORT)
s.baudrate=BAUD
s.parity=serial.PARITY_NONE
s.databits=serial.EIGHTBITS
s.stopbits=serial.STOPBITS_ONE
while True:
data=s.readline().decode('UTF-8')
data_list=data.rstrip().split(' ')
try:
x,y,z, a, b =data_list
scr.sensorupdate({'x' :x})
scr.sensorupdate({'y' :y})
scr.sensorupdate({'z' :z})
scr.sensorupdate({'a' : a})
scr.sensorupdate({'b' : b})
except:
pass
s.close()
這個文件一旦運行,就會收聽從micro:bit發出的任何數據,然後發送到Scratch。 您可能需要更改此行:
PORT = "/dev/ttyACM1"
它需要與您之前註意到的端口相同。
Coding the micro:bit
micro:bit需要運行一些代碼,將不斷打印出其加速度計讀數和按鈕推送。
通過打開LXTerminal打開mu,然後鍵入以下命令:
./mu
現在將下面的代碼複製並粘貼到編輯器中:
from microbit import *
def get_sensor_data():
x,y,z=accelerometer.get_x(),accelerometer.get_y(),accelerometer.get_z()
a, b =button_a.was_pressed(),button_b.was_pressed()
print(x,y,z, a, b)
while True:
sleep(100)
get_sensor_data()
1. You can flash this file into your micro:bit straight away.
Setting up Scratch
1.在Raspberry Pi上打開Scratch(菜單>編程> Scratch)。
2.轉到感應,然後右鍵單擊屏幕底部附近的滑塊傳感器值 slider sensor value,然後從上下文菜單中選擇啟用遠程傳感器enable remote sensor連接connections。 當對話框打開時,單擊確定。

3.現在切換回IDLE,按F5運行您的rpi.py腳本。
4.在Scratch中,您現在應該能夠從micro:bit的傳感器中查看值。 只需點擊滑塊傳感器值塊上的箭頭,選擇一個,然後選中框:

![]()
1. 如果您對傳感器b,x,y和z重複,那麼您的Scratch階段應該如下所示:

6.如果您傾斜micro:bit,您應該看到x,y和z值發生變化。 按下按鈕將a和b從False切換到True。
7.如果讀數不起作用,請再次檢查micro:bit端口,並確保代碼正在micro:bit和Raspberry Pi上運行。
Making the assets
你將需要三個新的精靈為這個遊戲。 刪除貓精靈,然後找到一個火箭小精靈,一個UFO精靈和一個導彈精靈。 如果你喜歡,可以使用下面的那些,在網上搜索,甚至自己繪製。



1. 將您的每個精靈導入Scratch

2. 通過更改腳本窗格中的名稱來重命名精靈:

3. 精靈也需要調整大小。 您可以使用縮小精靈工具shrink sprite tool來執行此操作:
![]()
4. 最後,你應該旋轉火箭和導彈精靈,所以他們都指向屏幕的右側。 您可以通過編輯服裝選項卡中的精靈並選擇 rotate tool:來完成此操作:


Coding the rocket
1. 為了編寫你的遊戲,你可以先添加一些腳本到火箭。 因為您希望遊戲能夠一遍又一遍地播放,您應該通過使用廣播塊broadcast block來啟動它。 您還需要創建一個名為 score的變量,並在遊戲開始時將其設置為0:

2. 要開始遊戲,火箭需要放在屏幕中央,指向右側:

3. 接下來,您需要控制火箭的旋轉。 這將由加速度計從micro:bit讀取,特別是從x傳感器值the x sensor value來決定。 目前這個值在-1000到1000之間,所以需要減少一點。 創建一個名為turn 的新變量,並將其設置如下所示:

4. 測試你的遊戲到目前為止:當你傾斜micro:bit左邊和右邊,火箭應該旋轉。 如果它不工作,請嘗試重新啟動您的Raspberry Pi上的Python 3程序,並用其程序重新閃爍micro:bit。 您可能還必須檢查micro:bit是否未重新連接到其他端口; 您可以使用命令 ls /dev/ttyA*檢查。
5. 接下來,你想要火箭移動。 速度可以通過the micro:bit傾斜向前或向後的距離來確定。 您可以使用y傳感器值y sensor,但是如前所述,您需要稍微減小一些值(在本例中為此)。

6. 現在通過將micro:bit左右傾斜,向前和向後傾斜來測試飛行控制。
Coding the UFO
1. 不明飛行物需要在隨機位置開始,然後在火箭後追逐。 這很容易設置。 Scratch舞台The Scratch stage 從水平(x軸)約-250到250,垂直(y軸)伸展到-180到180,所以在這些範圍內挑選兩個隨機數將使你能夠定位火箭:

2. 接下來,您可以使用永久循環forever loop來獲取UFO來追踪火箭:

3. 在一分鐘之內,你將編寫導彈在不明飛行物上發射。 如果導彈擊中了UFO,遊戲應該重新開始,玩家的得分應該增加一個。 需要一個新的腳本:

4. 要完成UFO,遊戲需要結束,如果它捕獲火箭:

Coding the missile
要使導彈始終指向正確的方向,您可以使其與火箭的方式完全相同:

1. 接下來,每當按下微型按鈕the a button時,導彈都應該起火。 為此,您可以將其移動到火箭的位置,告訴它顯示show,然後向前移動,直到它觸摸到UFO或屏幕邊緣。 飛行時需要進行轉彎,否則導彈的旋轉與火箭不同步。

2. 測試你的火箭發射導彈的新能力。
What
遊戲有很大的潛力得到改善。
你可以添加一些障礙,讓火箭和UFO避免嗎?
您仍然需要找到b按鈕的用途。 也許這可以開始一個渦輪增壓模式,火箭飛得更快?
UFO可以每天在火箭上射出激光束嗎?
Microbit 中文 課程 : Python , Javascript, 物聯網 , 樹莓派
標籤:
—————



