Scratch 與 mBot 中「巢狀條件判斷」與「變數改變」的概念
一、「巢狀條件判斷」
以下左右二個看似等價的程式,因 mBot 外部改應器隨著時間一直在變,這種不固定的特性可以凸顯出程式的差異,說明二者其實是不同的程式意義,並觀察出巢狀條件判斷的 if-else 互斥特性。
當運用變數紀錄 mBot 外部感應器的狀態時,可以確保條件判斷時的不變性。
二、「變數改變」
前述例子中,使用變數紀錄狀態雖可以確保條件判斷時的不變性。但面對 Scratch 這類支援平行 (Concurrent) 同時發生的特性,仍須注意程式的執行順序。以下例子,嘗試設計這類「搶先」的可能性,導致兩個程式片段的順序不易預測,最終造成不同執行結果。
綜合今日 Scratch 課程,紀錄以下教學現場的狀況,其中為學生常見的問題。
在 Scratch 中建立分身,如何紀錄與識別「分身」資訊。有以下兩種方式:
一、使用區域變數:
參考 https://wiki.scratch.mit.edu/wiki/Detecting_Clones 文件,於原本的角色中新增一個「區域變數 id」,遞增該值。
當「建立分身」時,分身內也會擁有自己專屬的「區域變數 id」,而它的數值也在當下複製建立。
分身的建立與執行,示意圖如下:
參考程式:
https://scratch.mit.edu/projects/155206934/
二、使用角色內專屬的屬性
這個範例使用「音量屬性」來紀錄分身的編號資訊,藉以識別分身的差異。
點一下分身,顯示目前的編號。
這是一個紆迴的技巧,受限於音量屬性只有 0 ~ 100 的承載量。
https://scratch.mit.edu/projects/155206934/
使用單一的循線感應器來計算轉速,並驗證是否有效。
看來還需要扣除訊號傳遞延遲與誤差,如果要很精準就必須做多次的取樣和平均。
方法示意影片
https://www.youtube.com/watch?v=pbku8LOM5vA
線上迴歸計算工具
http://www.graphpad.com/quickcalcs/linear1/
觀察 mBot LED 燈變化與相機感光
mBot 超音波感應器所取得的數據似乎不時會出現 0,猜想是否跟硬體設備的反應時間,或是數據取樣時間所造成。
因此在程式的測據判斷上,應當小心使用,數據並不是連續變化的,應判斷特定範圍而非單一數據點。
以下,設計此一程式觀察 mBot 超音波感應器的數據變化情形。
Code.org - 課程 4: 終極挑戰:綜合應用 #5
https://studio.code.org/s/course4/stage/22/puzzle/5
12~13 行解,出奇的簡單喔!
使用滑鼠與鍵盤控制 mBot 的行進方向,充分使用廣播方式,讓 mBot 可以一邊閃燈,一邊播放警示聲響。
而滑鼠控制部分,則使用固定時間取樣的方式,判斷滑鼠移動的方向,再另 mBot 跟隨操控。