這個名為《太空探險家》教學,是一個使用程式積木的遊戲開發教學,透過初/中級遊戲開發概念的教學,為初學者提供自主學習方式。在這個教學活動中,學生將利用編程創建太空戰機,並編寫程式來創造可充填燃料罐和太空激光武器,以保護銀河免受敵人的侵擾。
使用此教學前,學生對MakeCode的程式積木及編程概念有基本認識較佳,但沒有編程經驗的學生也有能力完成整個教學。這個教學適合初中至高中學生,包含7個活動(約63分鐘)分為2個階段。課程的連結如下:
https://arcade.makecode.com/--skillmap#space
而相關的基礎教學內容簡介及程式碼的答案的連結如下:
https://arcade.makecode.com/skillmap/educator-info/space-map-info
在這裡我們主要就上面的教學中的內容作一些補充及增潤,讓學生的學習或老師的教學更豐富及完備。以下是教學中一些涉及的重要電腦科學概念的簡單解釋。
迴圈(Loops):
迴圈是一種電腦指令,可以讓電腦重複做同一件事情。這就像我們日常反覆寫同樣的字或做同樣的工作一樣。迴圈可以根據條件或計數器的值來決定是否繼續執行。通過使用迴圈,電腦可以讓重複的工作變得簡單,這樣程序就可以快速地完成更多的任務。
事件(Events):
事件是一些特殊的事情,可以引起電腦做出反應,就像我們可以觀察到按下鍵盤、點擊鼠標時,電腦畫面上的變化做出反應一樣。電腦可以通過監聽這些事情的發生,並做出相應的動作。這裡我們舉一個生活中的例子,就好像學生們看到老師做出安靜的手勢時,他們就會安靜下來一樣。在這個例子中,「老師做出安靜的手勢」 就是一件事件了。
條件陳述式(Conditional Statements):
條件陳述式是一種電腦指令,可以讓電腦根據不同的情況來做出不同的反應,就像我們會在不同的情況下做出不同的反應一樣。這樣,電腦便可以根據不同的情況來做出正確的決定,就像我們一樣。條件陳述式可以讓電腦變得更加聰明和靈活。
陣列(Arrays):
陣列是一種數據結構,可以讓電腦將很多相同類型的數據存儲在一起,就像我們把書放在書架上一樣。通過使用陣列,電腦可以更快速、更方便地存取和處理數據,就像學生們更輕鬆地在書架上找到需要的書籍一樣。
第一節課堂共有四個活動(見下圖),需時約34分鐘。
活動主要透過捲動背景營造出太空戰機飛行的感覺。當程式開始運行時創建一架太空戰機,並以方向鍵控制戰機的移動。 當中用到的程式積木的具體作用如下,而這些積木均需要放到「開始」事件"容器"中:
設定螢幕背景圖片,點選灰色的正方格可以進入「我的資源」選擇要使用的背景。
捲動螢幕背景,「vx」為水平方向的速度,而「vy 」為垂直方向的速度,可以利用正數或負數來控制捲動的方向。
創建戰機的指令,「mysprite」 為戰機的在整個程式中的名稱(可以更改),點選灰色的正方格可以進入「我的資源」選擇使用戰機的樣子,而類別代表角色所屬的類型,這裡我們把戰機的類型設為「Player」 。
讓方向鍵能控制戰機移動,展開"+"後,「vx」及「vy 」 的值可控制移動的速度及方向。
讓戰機移動時不會超出螢幕。若上方的戰機創建時改用其他名稱,則這裡需要使用更改後的名稱。
設定當玩家按下「A」鍵時,戰機會發射子彈,並設定子彈射出時的效果。 當中用到的程式積木的具體作用如下:
這是按下「A鍵」時的事件"容器"積木,放進這個積木中的程式積木將會在「A鍵」被按下時執行。
「按住」是指當「A鍵」按下時,容器中的程式積木將執行一次。
「鬆開」是指當「A鍵」被放開時,容器中的程式積木將執行一次。
「重複」是指當「A鍵」被按下期間,容器中的程式積木將不斷重複執行。
這個積木創建一個由「mysprite」發射的子彈,透過點選灰色的正方格設定子彈的外型,並以「projectile」作為名稱,而「vx」及「vy 」 的值則控制移動的速度及方向,而子彈的類型為「projectile」。
當這個積木放進上方的事件"容器"積木後,每按一次「A鍵」便會創建一顆子彈,而所有創建的子彈的名稱均是「projectile」。
這是控制子彈發射效果的積木,因為子彈的名稱是「projectile」,因此第一個選項需要選擇「projectile」,第二個選項是選用那一種效果,而最後的數字是效果持續的時間。
這個活動主要是加入來自螢幕上方的敵機,並設定子彈擊中敵人時便消滅敵機及當被敵機撞上時扣掉一條生命。 當中用到的程式積木的具體作用如下:
最外層「紫色」的積木是一個按固定時間觸發的事件"容器"。容器內第一個積木是從螢幕的上方創建一架敵機,稱為「myEneny」及設定速度及方向。注意這積木創建的敵機的類型為「projectile」。
第二個積木是讓敵機在螢幕上方的不同位置隨機出現,由於螢幕的寬度為160,因此隨機取數設為5 到 155。
第三個積木的作用是把敵機的類型由「projectile」改為「Enemy」,以便能編寫消滅敵機及扣掉生命的程式。
最外層的積木是一個當「projectile」類型的角色與「Enemy」類型的角色重疊時觸發的事件"容器"。由於屬於「projectile」類型的角色與「Enemy」類型的角色有多於一個,因此在"容器"內重疊的子彈我們叫作「sprite」而敵機則叫作「othersprite」。
容器內第一個及第二個是相同的積木,作用是讓「sprite」及「othersprite」消失。分別只在於第一個積木加入了角色消失時的效果。這兩個積木是必須的,否則兩個角色重疊的事件便會不斷觸發。
最後一個積木則是讓得分增加1。
最外層的積木是一個當「Player」類型的角色與「Enemy」類型的角色重疊時觸發的事件"容器"。由於屬於「Player」類型的角色與「Enemy」類型的角色有可能多於一個,因此在"容器"內重疊的「Player」類型的角色我們叫作「sprite」而敵機則叫作「othersprite」。
容器內的第一個積木的作用是扣掉1條生命。
第二個積木是讓「othersprite」消失及設定消失時的效果及持續時間。這個積木是必須的,否則兩個角色重疊的事件便會不斷觸發,讓所有的生命一次過扣掉。
這個活動主要是戰機及敵機尾部的火焰動畫及當戰機被敵機撞上時螢幕搖動的效果。 當中用到的程式積木的具體作用如下:
這個積木的作用是讓螢幕震動起來。這個積木需要放到當「Player」類型的角色與「Enemy」類型的角色重疊時觸發的事件"容器"中。
第二個積木是讓敵機在螢幕上方的不同位置隨機出現,由於螢幕的寬度為160,因此隨機取數設為5 到 155。
第三個積木的作用是把敵機的類型由「projectile」改為「Enemy」,以便能編寫消滅敵機及扣掉生命的程式。
動畫選項是控制那個角色會播放動畫。
圖幀選項是選擇播放那個動畫。
間隔是動畫播放的持續時間。
循環是設定動畫是否需要循環播放。
第二節課堂共有三個活動(見下圖),需時約29分鐘。若時間不足的話,第三個活動可以選擇跳過,缺少這個部分的程式是不會影響整個遊戲的基本運作的。
替戰機加入一個燃料計,飛行過程中燃料會不斷消耗,戰機需要收集隨機掉落的燃料以補充燃料。 而編程當中用到的程式積木的具體作用如下:
這兩個積木的作用是建立一個燃料計,並讓燃料計附加到戰機上。
第一個積木設定燃料計的長及闊,並同時把名稱設為「statusbar」及類型設為「energy」。
第二個積木是讓燃料計「statusbar」附加到戰機「mysprite」上,padding 值控制「statusbar」出現的上下位置,而 offset 值控制「statusbar」出現的左右位置。
這些積木全需要放到「開始」事件"容器"中。
這組程式積木的作用是讓「statusbar」隨著時間慢慢減少,速度為每300毫秒減少1。
這組程是積木是利用跟創建敵機相同的方法創建供補給的燃料。燃料的名稱設為「myFeul」。同時,新增了一個新的類型「Gas」,並透過第三個積木把「myFeul」的類型由「projectile」改為「Enemy」。
這組程式積木是透過當「Player」類型的角色與「Gas」類型的角色重疊時觸發的事件"容器"編寫補充燃料的功能。
第一個積木是把「statusbar」得值重設為100。
第二個是把已使用的燃料消滅,以避免兩個角色重疊的事件不斷重複觸發。
替遊戲加入升機功能,當到達指定分數,敵機飛行的速度會增加,同時玩家會獲得5份的升級分數,並於螢幕顯示升級訊息。 而編程當中用到的程式積木的具體作用如下:
在「開始」事件"容器"中加入這個程是積木 的作用是建立一個名為「enemyspeed」的變數,並把它的值設為50。
這裡我們把原來創建敵機的程式積木中的「vy 」的數字替換為變數「enemyspeed」,以便我們升級時改變敵機的飛行速度。
我們在當「projectile」類型的角色與「Enemy」類型的角色重疊時觸發的事件"容器"中的最後,加入以上的條件陳述式積木。讓得分到達10後,增加5分額外的獎勵分,並在螢幕顯示「+5 Level-up bonus!」的提示。最後透過改變變數「enemyspeed」的值提升敵機的飛行速度。
讓射出的子彈隨機改變外型。而 當中用到的程式積木的具體作用如下:
按下「A鍵」時的事件"容器"積木最頂加入這個積木,以建立一個名為「darts」的陣列,並加入3個不同外型的子彈。
這裡我們把原來創建子彈的程式積木中的點選灰色的正方格替換為從陣列「darts」中隨機選擇一個子彈外型的積木。這樣我們每次按下「A鍵」時便會有不同外型的子彈射出。