【Scratch3.0案例教學】手把手教小朋友製作飛機大戰、空中格鬥、星際爭霸等超酷遊戲

2020-09-27 09:00:56

案例名稱:空中格鬥(飛機大戰)

一、案例介紹

 小朋友們在書上或者電視或者電影裡面經常可以看到,為了維護國家和地區安全,為了抵擋外來入侵等等。戰鬥機與戰鬥機互相在空中格鬥的這麼一個場景。我們今天就是來模擬一個空中格鬥的遊戲。在本案例彙總,敵機會源源不斷的從上方飛來,不同的敵機堅硬程度不一樣,我們通過滑鼠來控制我們戰鬥機的移動,瞄準敵機將其擊毀,每擊毀一架敵機,就可以獲得相應的積分,越是堅硬的敵機得分就越高。千萬不要讓敵機撞到我們的戰鬥機,否則我們的戰鬥機就會被撞毀,遊戲結束。

二、案例演示

我們先通過一段視訊來看一下我們最終實現的一個遊戲效果

【Scratch案例演示】Scratch空中格鬥 Scratch星際大戰

三、案例分析

3.1、角色分析

  • 我方戰鬥機:通過滑鼠控制移動(只能左右移動),不斷髮射子彈
  • 敵機1:移動速度3,血量1,產生時間2秒,1發子彈就可擊毀,擊毀後得分加1分
  • 敵機2:移動速度2.5,血量2,產生時間3秒,2發子彈就可擊毀,擊毀後得分加2分
  • 敵機3:移動速度1.8,血量3,產生時間4秒,3發子彈就可擊毀,擊毀後得分加3分
  • 敵機4:移動速度1,血量4,產生時間5秒,4發子彈就可擊毀,擊毀後得分加4分
  • 子彈:我方戰鬥機的彈藥,通過發射子彈消滅入侵的敵機,子彈數量源源不斷
  • 炸彈:這個是我們的超級武器,只要發射,螢幕上所有的敵機全部銷燬,但這個炸彈是每間隔一段時間才會在舞臺上出現,我方戰鬥機碰到之後才能擁有。
  • 遊戲結束:當我方戰鬥機被撞毀之後,遊戲結束。

3.2、背景分析

  •  背景:天空

四、角色和背景設定

4.1、角色設定

1、刪除預設的小貓角色,然後從電腦上匯入我們的戰鬥機角色,如下圖所示:

  

2、採用同樣的方式,將敵機角色、子彈和炸彈以及遊戲結束角色依次匯入進來,完成如下圖所示:

4.2、背景設定

1、從電腦上匯入我們藍天背景,並刪除預設的空白背景,如下圖所示:

    

2、最後調整好每個角色的大小和位置,完成如下圖所示:(除了我方戰鬥機,其它角色開是都是隱藏的)

五、流程分析

5.1、我方戰鬥機

我放戰鬥機將會有2條積木指令並行執行,具體分析如下:

1、程式啟動的時候跟隨滑鼠來回移動,移動過程中是否碰到敵機;

2、當接收到遊戲結束的時候,停止遊戲

當接收到遊戲結束→停止該角色的其它指令碼→說我還會再來的

PS:【】代表迴圈結構,重複執行

        <>代表條件判斷結構,是否滿足條件(下同)

5.2、敵機1

每種敵機將會有4條積木指令並行執行,具體分析如下:

1 程式啟動的時候初始化,並實現自我克隆(不斷產生新的敵機)

  程式啟動→隱藏→初始方向→初始大小→重複克隆自己【克隆自己→時間間隔】

2 作為克隆體啟動的時候,實現從上往下飛,飛行途中碰到子彈會消失,碰到最底部邊緣也會消失

3 當收到發射炸彈時,會消失

  當收到發射炸彈→將得分增加1→刪除克隆體

4 當收到遊戲結束時,停止遊戲

         當接收到遊戲結束→停止該角色的其它指令碼

5.3、敵機2

敵機2同樣有4條積木指令並行執行,具體分析如下:

1 程式啟動的時候初始化,並實現自我克隆(不斷產生新的敵機);跟敵機1不同的是,在初始化之後克隆之前會有一個等待時間,也就是出來的時間等待,比敵機1晚一點。

         程式啟動→隱藏→初始方向→初始大小→等待時間→重複克隆自己【克隆自己→時間間隔】

2 作為克隆體啟動的時候,實現從上往下飛,飛行途中碰到子彈會消失,碰到最底部邊緣也會消失

3 當收到發射炸彈時,會消失

  當收到發射炸彈→將得分增加1→刪除克隆體

4 當收到遊戲結束時,停止遊戲

         當接收到遊戲結束→停止該角色的其它指令碼

5.4、其它敵機

   其它敵機的程式流程可以參考敵機2 的流程,出來的時間比敵機2晚點,血量、移動速度、得分請參考前面的角色分析。

5.5、子彈

子彈將會有兩條積木指令並行執行,具體分析如下:

1 程式啟動時候,實現自我克隆(不斷髮射子彈)

程式啟動→隱藏→初始方向→初始大小→重複克隆自己【克隆自己→時間間隔】

2 當作為克隆體啟動時,實現子彈的發射

5.6、炸彈

炸彈我們這邊設定了5條積木指令並行執行,具體分析如下:

1 自定義積木,由於多處用到炸彈的初始位置和出現時間間隔,所以設定成自定積木,簡化積木的冗餘  

 定義初始炸彈→隱藏→時間間隔(炸彈多久出現一次)→初始位置→顯示

2 程式啟動時,炸彈初始化以及下落的過程

3 程式啟動時,實現我們炸彈一閃一閃若隱若現的效果

         程式啟動時→不斷若隱若現【將虛像特效設為0→時間間隔→虛像特效設為100→時間間隔】

4 當按下空格鍵,發射炸彈

 

5 當接收到遊戲結束,停止角色的指令碼

  當接收到遊戲結束→停止改角色的其它指令碼

5.7、遊戲結束

遊戲結束設定了2條積木指令並行執行,具體分析如下:

1 程式啟動時,隱藏(開始的時候不顯示)

  程式啟動→隱藏

2 接收到遊戲結束時,顯示

         當接收到遊戲結束→移到舞臺中央→顯示

5.8、背景

背景同樣設定了2條積木指令並行執行,具體分析如下:

1 程式啟動時,重複播放背景音樂

  程式啟動→【播放背景音樂】

2 接收到遊戲結束時,停止其他指令碼

         當接收到遊戲結束→停止該角色的其它積木指令

六、用到指令

6.1、運動模組

  • :角色移動指定的步數,正數就是向前,負數就是向後
  • https://s3.ap-northeast-1.wasabisys.com/img.tw511.com/202009/20200626203615123tn2eihntljf.png​:將角色移動到舞臺中央指定的X/Y座標位置,預設座標(x:0,y:0)
  • :將角色朝向指定的角度
  • :將角色的Y座標也就是縱向增加指定的值,正數朝上,負數朝下
  • :角色碰到邊緣後就會以垂直邊緣為中線的對稱角度進行反彈
  • :旋轉方式有三種模式,分別是:左右翻轉(正常向左向右)、不可旋轉(不能旋轉)、任意旋轉(朝任何角度旋轉也是預設旋轉方式)
  • :獲取當前角色X的座標值
  • :獲取當前角色Y的座標值

6.2 外觀模組

  • :說一句話,並在舞臺上顯示一定的時間
  • :將角色的大小設定為指定的值,這裡面的大小指的是百分比
  • :這是設定角色的特效值,特效分別有顏色、魚眼、旋渦、畫素化、馬賽克、亮度和虛像。我們這個案例中要用到的是虛像。
  • :將角色顯示在舞臺上
  • :將角色不顯示在舞臺上

6.3 聲音模組

  • :播放某個聲音並等聲音播放完成在執行後面的積木指令

6.4 事件模組

  • https://s3.ap-northeast-1.wasabisys.com/img.tw511.com/202009/20200626204050146omf4p3p5rls.png​:程式啟動之後,點選小綠旗,執行後續的程式指令碼
  • :獲取到鍵盤上指定的按鍵被按下的訊息,預設的是空格鍵,下拉三角可選擇字母a-z的26個鍵、數位0-9的10個鍵、上下左右方向鍵以及任意按鍵。
  • :當接收到某個訊息的時候,執行後續的積木指令
  • :向所有的角色傳送一個訊息,同時執行後面的積木指令

6.5 控制模組

  • https://s3.ap-northeast-1.wasabisys.com/img.tw511.com/202009/20200611195110690jt0lg3cuozg.png​:時間間隔,等待指定的時間後執行後面的指令
  • :一直重複執行積木框裡面的積木
  • :條件判斷,如果條件為真,那麼執行積木框裡面的積木,在執行後面的積木;條件為假,框裡面的積木不執行,執行後面的積木
  • :停止指令碼執行,下拉可選項有停止全部指令碼、這個指令碼和該角色的其他指令碼

6.6 偵測模組

  • :是否碰到滑鼠指標,下拉可選項還有舞臺邊緣和其它角色
  • :獲取滑鼠的X座標值
  • :獲取滑鼠的Y座標值
  • :獲取舞臺的背景編號、背景名稱、音量、變數名稱;或者是角色的X座標、Y座標、方向、造型編號、造型名稱、大小、音量和變數名稱

6.7 運算模組

  • :加法運算,兩個參賽相加;參賽可以是具體的數值,也可以是其它變數或者系統變數,或者其它參數列達式
  • :在某個區間中隨機產生數值,可以是整數也可以是小數
  • ​:邏輯判斷模組,判斷前面的值是否大於後面的值,大於返回邏輯值真,否則返回假
  • :邏輯判斷模組,判斷前面的值是否等於後面的值,等於返回邏輯值真,否則返回假

6.8 變數模組

  • ​:新建變數,彈出框中輸入變數名稱,可以選擇適用所有角色和僅適用當前角色
  • :將指定的變數設為指定的值
  • :將制定的變數增加制定的值
  • :獲取變數的值,前面方框有打鉤就會在舞臺上顯示,沒有選中就不會顯示在舞臺上

6.9 自制積木模組

  • ​:定義一個新的積木,彈出框中輸入積木名稱,還可以設定自定的積木是否需要帶有輸入項
  • :自己定義的某個積木

七、程式指令編寫

7.1、戰鬥機

  1. 點選小綠旗,程式啟動執行後面的積木指令
  2. 戰鬥機的初始大小
  3. 設定戰鬥機的初始朝向
  4. 將旋轉方式設定為左右翻轉
  5. 初始化得分變數(得分是一個全域性變數,所有角色都可用)
  6. 戰鬥機一直左右移動,重複執行第7-10個積木指令
  7. 將戰鬥機跟隨滑鼠移動,由於只能左右移動,所以只要設定X座標跟隨滑鼠的X座標即可
  8. 設定戰鬥機碰到邊緣後反彈
  9. 判斷戰鬥機是否碰到敵機,由於敵機有多種型號,所以需要通過邏輯或運算將每種敵機都列出來,如果碰到了則執行第10個積木指令
  10. 向所有角色廣播一個遊戲結束的訊息。
  11. 當接收到遊戲結束的訊息,執行後續積木指令
  12. 停止改角色的其它指令碼
  13. 說:我還會在回來的一句話,並顯示3秒鐘
  14. 停止案例的所有指令碼

7.2、敵機1

  1. 程式啟動後,執行後面的積木指令
  2. 將敵機本體隱藏
  3. 初始朝向
  4. 初始大小
  5. 不斷克隆自己,產生新的敵機1(重複執行第6-7個積木指令)
  6. 克隆自己
  7. 時間間隔2秒鐘後在克隆
  8. 當接收到遊戲結束時,執行後面的積木指令
  9. 停止該角色的其它指令碼
  10. 當接收到發射炸彈時,執行後面的積木指令
  11. 將得分變數增加1
  12. 刪除當前克隆體
  13. 當作為克隆體啟動時,執行後面的積木指令
  14. 初始化敵機的位置,在舞臺的上方Y=150,橫座標採用亂數的方式
  15. 將敵機顯示在舞臺上
  16. 將敵機1的血量設為1
  17. 敵機朝戰鬥機飛來,重複執行第18-25個積木指令
  18. 敵機1飛行的速度,每次向下飛行3畫素
  19. 判斷飛行途中是否碰到舞臺邊緣,如果是執行第20個積木指令
  20. 刪除當前克隆體
  21. 判斷飛行途中是否碰到子彈,如果是執行第22個積木指令
  22. 將敵機的血量減少1
  23. 判斷敵機的血量是否等於1,如果是執行第24-25個積木指令
  24. 將得分變數增加1
  25. 刪除當前克隆體

7.3、其它敵機

  • 其它敵機和敵機1的程式差不多,不同的地方在於上圖示注的1-6
  • 1是敵機1不存在的,後面的敵機都有一個出場的時間,敵機越厲害的會越晚出場,時間間隔相差一點
  • 2是敵機每次出現的頻率,同樣越厲害的頻率就會越小
  • 3是擊毀敵機得到的分數,越厲害的敵機擊毀後得分越多
  • 4是敵機的血量,越厲害的敵機血量越多
  • 5是敵機飛行的速度,血量越多的敵機飛行的越慢
  • 6和3是一樣的

7.4、子彈

  1. 程式啟動後,執行後面的積木指令
  2. 將子彈本體隱藏
  3. 初始朝向
  4. 初始大小
  5. 不斷克隆自己,產生新的敵機1(重複執行第6-7個積木指令)
  6. 克隆自己
  7. 每間隔0.3秒鐘就克隆一次
  8. 當作為克隆體啟動時,執行後面的積木指令
  9. 由於子彈石油我們戰鬥機發射出去的,所以我們將子彈的X座標設定為戰鬥機的X座標,子彈的Y座標設定為戰鬥機的Y座標加上一個數值33,這樣子彈出現的位置就在戰鬥機機頭的位置,這樣比較符合我們的案例
  10. 將子彈顯示在舞臺上
  11. 子彈向敵機飛去,重複執行第12-17個積木指令
  12. 子彈飛行的速度,每次向上飛行3畫素
  13. 判斷子彈飛行途中是否擊中敵機,如果是執行第14-15個積木指令;由於敵機有多種型號,所以每個型號的敵機都通過邏輯或將他們列出來
  14. 非常短暫的間隔(刪除之前,沒有這個間隔,有可能在敵機的程式模組裡面碰到子彈要扣血量時候有可能沒有扣,因為如果角色刪除了,與刪除的角色有關的指令是不會執行的)
  15. 刪除當前克隆體
  16. 判斷子彈是否碰到舞臺邊緣,如果是執行第17個積木指令
  17. 刪除當前克隆體

7.5、炸彈

  1. 程式啟動後,執行後面的積木指令
  2. 炸彈掉落的同時若隱若現一閃一閃的效果實現,重複執行第3-6個積木指令
  3. 將虛像特效設為0
  4. 時間間隔0.1秒
  5. 將虛像特效設為100
  6. 時間間隔0.1秒
  7. 當按下空格鍵的時候,執行後續的積木指令
  8. 如果炸彈的數量大於0,執行第9-10個積木指令
  9. 將炸彈數量減少1
  10. 向所有的角色傳送廣播訊息「發射炸彈」
  11. 自定義積木模組「初始炸彈」
  12. 將炸彈隱藏
  13. 炸彈出現的頻率,每隔15秒出現一次
  14. 炸彈出現的初始位置,在舞臺上方Y=160,橫座標隨機
  15. 將炸彈顯示在舞臺上
  16. 程式啟動後,執行後面的積木指令
  17. 初始炸彈(參照自定義積木,設定炸彈的初始資訊)
  18. 炸彈的初始大小(當然我們也可以把這個初始大小寫到自定義積木初始炸彈裡面,只是我們炸彈的初始大小不需要每次都進行設定,後面還會多次用到初始炸彈這個自定義積木)
  19. 設定炸彈的初始數量0
  20. 炸彈從舞臺上方往下落,重複執行第21-28個積木指令
  21. 炸彈下落的速度2畫素
  22. 判斷炸彈下落途中是否碰到舞臺邊緣,如果是執行第23個積木指令
  23. 初始炸彈(參照自定義積木,設定炸彈的初始資訊)
  24. 判斷炸彈下落途中是否碰到子彈,如果是執行第25-26個積木指令
  25. 將炸彈數量加1
  26. 初始炸彈(參照自定義積木,設定炸彈的初始資訊)
  27. 當接收到遊戲結束時候,執行後續的積木指令
  28. 停止當前角色的其它積木指令

7.6、遊戲結束

  1. 程式啟動後,執行後面的積木指令
  2. 將Game Over隱藏起來
  3. 當接收到遊戲結束時,執行後續積木指令
  4. 將Game Over移到舞臺中央
  5. 將Game Over顯示在舞臺上

7.7、背景

  1. 程式啟動後,執行後面的積木指令
  2. 重複播放背景音樂,重複執行第3個積木指令
  3. 播放背景音樂,並等待音樂播完在執行後續積木指令
  4. 當接收到遊戲結束時,執行後續積木指令
  5. 停止該角色的其它積木指令

八、知識點回顧

  • 掌握座標軸和座標值的概念及使用
  • 掌握條件判斷語句的使用
  • 掌握訊息傳送和訊息處理機制
  • 熟練掌握變數的定義和使用
  • 學會使用自定義積木,實現減少程式碼冗餘
  • 熟練掌握碰撞檢測機制,理解多角色之間是如何進行碰撞的
  • 充分理解並掌握運算模組中亂數、邏輯判斷及邏輯或的使用
  • 學會將複雜的程式流程簡單化,學會分析問題和解決問題

九、拓展思維

  • 優化我們的遊戲案例
  • 新增子彈擊中敵機音效
  • 新增戰鬥機被撞毀的音效和視覺效果
  • 新增炸彈爆炸的音效和視覺效果
  • 新增遊戲結束時的音效
  • 思考如何實現敵機發射子彈
  • 思考如何實現敵機左右隨機移動
  • 新增更厲害的敵機
  • 達到一定分數得時候新增敵機BOSS,讓遊戲更加豐富
  • 新增不同的子彈效果,實現更豐富的遊戲體驗