{{ 'fb_in_app_browser_popup.desc' | translate }} {{ 'fb_in_app_browser_popup.copy_link' | translate }}
{{ 'in_app_browser_popup.desc' | translate }}
{{word('consent_desc')}} {{word('read_more')}}
{{setting.description}}
{{ childProduct.title_translations | translateModel }}
{{ getChildVariationShorthand(childProduct.child_variation) }}
{{ getSelectedItemDetail(selectedChildProduct, item).childProductName }} x {{ selectedChildProduct.quantity || 1 }}
{{ getSelectedItemDetail(selectedChildProduct, item).childVariationName }}
專題簡介
這個專題我們要做的是聲光反應訓練的遊戲。
遊戲開始時會隨機亮起一個小黑盤,玩家感應後會暗掉,同時再亮起下一個,直到遊戲結束。
需要的小黑盤數量和應用的元件:
1. 小黑盤數: 2
2. 元件應用: LED、蜂鳴器、IR
專題內容
1. 專題下載 Projects01(.aia檔)
2. 示範影片中,首先我們分別連接好兩個小黑盤,輸入遊戲次數,再按「開始」按鈕後遊戲開始。
3. 我們開個新專案,名稱為「Projects01」,App名稱為「專題01」。
在「畫面編排」中,我們放進的元件分別有:
顯示標題的「標籤」、兩個連線用的「清單」、輸入遊戲次數用的「文字輸入盒」、顯示遊戲次數的「標籤」和開始「按鈕」。
然後還要兩個「BLE擴充元件」和一個「計時器」。
玩家操作時的順序為:
1. 分別點取兩個連線「清單」,執行連線動作。
2. 在「文字輸入盒」中輸入遊戲次數。
3. 按「開始」按鈕,遊戲開始。
我們在「程式設計」中也會照這個順序製作。
4. 進到「畫面編排」,圖中為藍芽連線的程式方塊組合。
1. 連線部分先做好第一個藍芽連線,增加第二個藍芽連線的部分如圖所示。
2. 第二個藍芽連線和第一個是一樣的組合方式,只是使用的元件不同。
3. 另外我們加進了當藍芽斷線時「清單」背景變紅色的程式。
5. 連線的程式方塊完成後,接下來是「開始」按紐要執行的工作,有兩項。
1. 一個是「標籤」遊戲次數的文字要顯示出「文字輸入盒」裡玩家輸入的數字。
2. 然後就是執行遊戲。
因為這段遊戲的程式方塊在之後也會用到,所以就獨立出來做成一個「程序」,這樣要用的時候就只要呼叫這個「程序」,而不用重新再做一次,如此可讓畫面簡單清楚一點。
這裡的「程序」我們命名為「遊戲」。
第3點是限制條件,我們要確定手機已經連上兩個小黑盤,才能執行上面兩個工作,避免當機。
6. 分解一下我們的遊戲玩法成4個步驟:
1. 遊戲開始 → 2. 隨機亮起一個小黑盤 → 3. 玩家感應後會暗掉,同時再亮起下一個 → 4. 直到遊戲結束。
步驟1就是「開始」按紐的內容。
而程序「遊戲」的內容包括了步驟2和步驟4。
7. 先加入三個變數,變數「目標」代表亮哪個小黑盤,變數「目標1」和「目標2」分別代表兩個小黑盤的狀態,「真」表示亮的,「假」表示暗的。
1. 首先是遊戲次數的條件方塊。
「標籤_遊戲次數 . 文字」真正代表的意思是 ”遊戲次數還有幾次” ,會從一開始輸入的遊戲次數隨著遊戲進行減少到0。
所以條件方塊的內容是:
只要遊戲次數還大於0,遊戲就要持續進行;等於0的時候,遊戲停止。
2. 進行遊戲的方式,先隨機從兩個小黑盤中選一個。
程式方塊是隨機從1和2中選一個設為變數「目標」,變數「目標」=1代表1號小黑盤,2代表2號小黑盤。
3. 如果選出來是1號小黑盤,就發出亮起全紅燈的命令,並將變數「目標1」設為「真」,表示1號小黑盤是亮的狀態。
如果選出來是2號小黑盤,也是同樣操作。
4. 遊戲次數等於0,表示遊戲結束。
我們發出頻率1000的聲音來表示,並啟用「計時器1」決定聲音的長短。
8. 「計時器1」的計時間隔是300ms(0.3秒),當計時器啟用後我們要執行的是:
1. 先關掉啟用計時,不然每隔0.3秒會重複執行一次計時器內容的工作。
2. 發出命令關掉所有小黑盤的聲音。
所以連著上張圖第4點,就是說發出頻率1000的聲音並啟用「計時器1」,0.3秒後關掉聲音。
9. 接下來就是步驟3: 玩家感應後會暗掉,同時再亮起下一個。
如果只根據步驟說明:
1. 先設一個變數「IR1」代表1號小黑盤偵測到的IR數值(經過轉換後的十進位格式,範圍是0 ~ 65535)。
2. 我們希望玩家用手感應時能靠近小黑盤一點,所以把IR數值設大一點,譬如50000,代表小黑盤偵測到的IR數值要超過50000以上才能執行感應到以後的動作。
感應到之後要執行兩個動作。
3. 一個是關掉1號小黑盤的燈。
4. 另一個就是開始下一回合遊戲(記得「標籤_遊戲次數 . 文字」要減1)。
10. 以上就是根據步驟說明製作的程式方塊,但在實際操作後會發現一些問題。
大家其實可以用同樣方式把2號小黑盤的做出來,然後匯出apk檔親自操作看看,會更清楚問題所在。
為了要避免那些問題,需要加進一些條件限制,最後的成果如圖。
1. 首先,我們加進了一個變數「IR偵測1」。
因為 ”當小黑盤偵測到的IR數值超過50000以上“ 會執行 ”開始下一回合遊戲”,所以只要手還沒遠離IR值就會一直都超過50000,就會連續執行 ”開始下一回合遊戲”的動作,所有的遊戲次數會在一次感應就玩完了。
因此我們用這個變數來控制,初始值是「真」。
當條件符合感應到的IR值>50000同時變數「IR偵測1」=「真」時,才能執行其中的內容。內容裡會先將變數「IR偵測1」變成「假」,如此就不會重複執行了。
但只要手離開超過一段距離,就可以再次執行。
所以當感應到的IR值<5000(代表手離開的距離),就再把變數「IR偵測1」變成「真」,這時手靠近就可以再次執行了。
2. 我們還希望加上 “手去感應有亮燈的那個小黑盤才會執行動作,沒有亮燈時手怎麼感應都不會有反應” 這個條件。
如果沒有這個限制,當1號小黑盤亮燈時,去感應2號小黑盤也會開始下一回合遊戲。
還記得變數「目標1」和「目標2」嗎?分別代表兩個小黑盤的狀態,「真」表示亮的,「假」表示暗的。
就是用在這裡。
綜合以上2點意思是說,當條件符合感應到的IR值>50000、變數「IR偵測1」=「真」和「目標1」=「真」時才會執行其中的內容。
3. 另外我們還加進了音效,當感應成功時會發出0.3秒頻率500的聲音。
11. 以上就是我們專題1的內容說明。
大家可以試著自己增減一些效果,或是增加小黑盤的個數,變化出不同的玩法。