我兒子和我最近一起在學(玩)Scratch,讓我漸漸的感受到這個學習工(玩)具真的能解決許多初學者容易有的困難,不禁有一種相見恨晚的感覺。
初學程式的人,經常會感到挫折或是無法提升到興趣,往往可能因為:
沒有明確學習動機(單純覺得就是該學才學)
學了之後還是不知道做什麼(e.g., 打個Hello World也不知道能做什麼)
障礙(overhead)太多(環境限制,軟體安裝設定等)
視覺體驗不佳又要打很多字(純文字介面)
無法立即得到反饋(看到立即的成品)
語法記不起來(很多符號)
投入不夠,平常不會想練習(你懂的)
...
這幾點,套在小孩子身上,也是完全說得通的。如果單純只是想要小朋友學習寫程式,除非小孩天生就有興趣,不然很容易像其他的才藝課程一樣不了了之。
那我們想想看,為甚麼小朋友玩遊戲或打電動都不需要大人去強迫自己就會想做?
很簡單,因為有趣 🤹🏻♂️。
遊戲所帶來的情境恰恰跟上面所提到的每一個點都幾乎相反。
激起小朋友的興趣是相當重要的。
也不知是有意或無意,Scratch很漂亮的解決的這些問題!
學習動機明確 - 就是做遊戲
學了之後可以玩遊戲 - 自娛或娛人
不需要安裝任何軟體 - 有電腦及網路就可以使用
視覺效果絕佳 - 幾乎都是跟圖像在互動
立即看到效果(得到反饋)- 因為是遊戲
不用記任何語法也不用打字 - 因爲都是用拖曳方塊
平常沒事也會想玩 - 就像打電動一樣
這是相當厲害的一件事 🤩,讓小朋友可以投入程式語言的學習,卻又不讓他們感到學習的負擔。
而且,如果你會一種程式語言,接下來學其他的語言大概都不會有什麼太大的障礙。就像一個產品品牌不同、設計不同、好用程度不同,但是它們在原理上多少都是相似。
學程式語言,基本概念跟經驗是最重要的。
Scratch讓小朋友用「身體」去體會Variable, Loop, Event Driven, Object Oriented, Concurrency...,自然而然內化這些連大人都感到棘手的抽象概念,在上課或讀理論之前就已經具備實質的經驗。正所謂,讀萬卷書不如行萬里路,是吧?
Flappy Bird
所以接下來,換個場景,我想跟大家一起來看一個叫Flappy Bird的遊戲。
Flappy Bird是一個經典的小遊戲,玩家透過控制Flappy Bird的飛行來閃躲障礙物。
當你按一下空白鍵或是點一下滑鼠,Flappy Bird就會展翅往上飛一下,接著加速往下掉,如同自然環境的重力一般。
好奇如何製造出重力這樣的效果嗎?
...,我們就不賣關子,一起來 *define gravity吧 😄!
首先,要讓物體落下,我們可以使用 change y by (某負數) ,並且給他一個forever loop。當這個負數越大時呈現出來的下降速度就越快。
當然,這裡我們看到物體是以一定的速度下降。
要模擬重力加速度,我們可以在Loop中逐次增加移動的數值。這裡我們設定兩個Variable,一個叫verticleSpeed,一個叫gravity。利用每一回的loop改變verticalSpeed(下降速度)。這裡設定gravity為1。增加gravity則會增加下降速度的程度。
現在看起來是不是比較有自由落體的感覺了!
接下來,我們想要的功能是:每按一次空白鍵,Flappy Bird就會往上彈跳一點(接著再往下掉落)。
我們先就往上彈跳的部分來看吧!
首先,定義一個variable叫jump。並給它一個數值(這裡我們設定為7,如果你設的越高就會跑的越快)。
接下來,我們用一個 if 條件式,加上 forever loop 來偵測空白鍵是否有被按到。一旦按到空白鍵,就會將verticalSpeed重新設定為jump的數值。
接著用change y by vertivalSpeed讓Flappy Bird往上移動指定的步數🙂
Cool!現在只要按一下空白鍵,Flappy Bird就會往上跑一點。
接下來,我們就可以把上升跟下降結合在一起囉!
將之前寫好的重力加速度的Code也放入forever loop中 ,這麼一來:
Flappy Bird會經常性的隨著重力下落。
按一下空白鍵將會重新設定verticalSpeed,往上攀升指定的高度,再逐步的減少verticalSpeed,形成重力落下的效果。
OK,這樣子我們就做好了Flappy Bird的跳躍效果了喔👏👏👏。
是不是看起來蠻專業的~😎
結論
我們今天討論了Scrach的本質,同時看了一些實際(算是比較複雜)的例子。
透過類似上述Flappy Bird這樣,視覺效果滿滿的遊戲,小朋友(當然大人也是)可以慢慢熟悉程式的思考方式,並且不會感到無聊。雖然挑戰性高,但是伴隨的成就感也是相當大👍🏻。
最後,附上一個完成版Flappy Birds的遊戲,讓大家消除一下壓力🙂~
(電腦版可按空白鍵,手機版可用觸碰螢幕方式來控制)
Comments