樹莓派 micro:bit game controller with Scratch

2017-09-06 07:09

micro: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
from time import sleep
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 台灣 商店購買

Microbit 中文 課程 : Python , Javascript物聯網 , 樹莓派

              中國

—————

返回