2018/06/28


近幾個月的週末, 萊恩大兵自己帶兒子玩 Scratch.

包括萊恩大兵在内, 學習程式語言過程中最初的挫折, 就是在新手村按照範例步驟打怪很輕鬆愉快. 走出新手村時, 卻是各種問題各種不順都會發生, 對付一隻史萊姆都很吃力.


因此, 萊恩大兵的想法, 就是以自訂專題的型式, 讓小朋友們多寫程式並想辦法解決問題. 

第一次專題實作的題目是小貓咪跳障礙.

第二次專題實作的題目是母親節刮卡


第三次專題實作的題目, 就來做四十年前的大熱門遊戲~ 太空侵略者 (Space Invaders).




功能要求為:
[1] 遊戲須區分不同難度的關卡, 每個關卡包括啟始畫面, 進行畫面與結束畫面均需交代清楚.
[2] 遊戲進行用鍵盤控制, 按左/右鍵控制砲台左/右移動. 按空白鍵讓砲台發射飛彈.
[3] 太空異形的隊列會自動地向左/向右移動, 當隊列碰到邊框時, 即向下移動一列.
[4] 太空異形會不定時的射出子彈.
[5] 碉堡在挨受子彈攻擊時, 會漸次傾頽凋壞.
[6] 遊戲須有歷史得分記錄.
[7] 遊戲須設計至少兩種難度不同的關卡, 且須明確定義過關條件.
[8] 遊戲須有動作或反應的音效.

這次的實作難度提高不少, 萊恩大兵家的兩個小朋友可踩了不少的坑啊.. 

第一個難題.. 碉堡在挨受子彈攻擊時, 會漸次傾頽凋壞.

萊恩大兵和兒子研究與討論後的作法, 是將碉堡的角色做出六種不同傾頽凋壞程度的造型. 



遊戲初始時, 將碉堡設定在無受破壞的造型, 然後每挨一發子彈就換一種的造型. 集滿六發子彈就殺掉這個碉堡的分身代表完全破壞.


自己人的子彈也是會破壞碉堡的.

第二個難題.. 太空異形呈隊列狀, 並會自動地向左/向右移動.
這個要求不算太難, 應用打磚塊程式裡面學到的技巧~ 用 "分身" 來產製大量相同的物件, 即能做出太空異形的隊列. 


打磚塊

第三個難題.. 太空異形會不定時的射出子彈.

小朋友本來打算從太空異形隊列中任意位置射出子彈即可交差.. 可是, 當遊戲快破關, 剩沒幾隻太空異形, 卻會有子從沒有太空異形的地方射出來. 這不合邏輯啊..

困難的來了.. 當太空異形要發射子彈時, 如何能讓子彈歸位到適當的啟始位置? 

萊恩大兵和兒子研究與討論後的作法:
- 讓最上層一排的太空異形每一隻均為獨立的角色(會有該角色自己的程式碼). 



- 用清單 (list) 去記錄這一排太空異形的存活狀態. 若這排的太空異形任何一隻有挨受子彈死掉了, 則要從清單中移除. 



- 要發射子彈時, 就隨機從清單中挑出還存活的太空異形. 並讓子彈移到該太空異形的位置.

呵呵, 有點資料結構的味道了..

話說, 萊恩大兵看小兒在實作過程中有點崩潰. 完成作品後, 又喜孜孜地和萊恩大兵分享成就感. 這正是 programmer 的醍醐味.

[萊恩大兵的其它文章]

自製大四軸

CC2540 Bluetooth Low Energy

OpenCV 學習路徑

小惡魔 無線溫度感測器




0 意見:

張貼留言