top of page
Search
Learn with Shin

小朋友學程式 - Scratch (Flappy Bird篇)

Updated: Sep 7, 2021




我兒子和我最近一起在學(玩)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的遊戲,讓大家消除一下壓力🙂~

(電腦版可按空白鍵,手機版可用觸碰螢幕方式來控制)



Scratch rocks!! 🚀🚀


Comments


Post: Blog2_Post
bottom of page