[Scratch] 打地鼠恐龍遊戲
之前就有點想做打地鼠遊戲,
今天用 Scratch 花了點時間,終於實作出來啦~
Scratch 雖然簡單,可是反倒是因為如此,
某些程式流程變得不容易做出來,
常常得用別的方法來實現,
這也算是用 Scratch 的一大挑戰吧~
來看一下這個遊戲需要的角色吧~
我一共設計了五個角色 (其實還要另外包含背景),
分別是洞 (hole)、恐龍 (dinosaur)、槌子 (hammer)、時間 (time) 和標題 (banner):
1. 角色:洞 (Hole)
為了要讓遊戲看起來比較不一樣,
每次遊戲時,都會隨機產生 4~6 個地鼠要鑽出來的洞,
並且擺在隨機的位置上~
擺好之後,就可以廣播訊息 CreateAnimal 給恐龍,
讓它開始產生恐龍分身;
另外廣播訊息 ShowStartBanner 顯示開始訊息。
最後 DecrementTime 則是依序遞減剩下的時間:
遊戲一開始先清楚所有洞的資料:
產生洞的時候,要先用 DecideHolePosition 決定洞的位置,
再將位置的 X, Y 值分別存到兩個清單中,
接著用 stamp 指令,將洞的圖直接蓋在畫面上
(我沒有用洞的分身來做這件事):
怎麼決定洞的位置呢?
目前是先隨機移動,然後去跟現有的洞比較,
如果與任何一個現有的洞的 X 值和 Y 值都小於 90,
就認為這個新的洞離現有的洞太近了 (可能會部分重叠),
就持續隨機移動,直到位置不會離現有的洞太近:
DecrementTime 則是在遊戲開始後,遞減剩下的時間,
並廣播訊息 CheckTime 給 Time 角色去看現在還剩下多少時間。
時間到了之後,就廣播訊息來顯示遊戲結束標題:
2. 角色:恐龍 (Dinosaur)
恐龍就得產生分身了,才有辦法同時出現多隻~
一開始讓母體先隱藏,我們都只拿分身來用:
當收到洞發過來的 CreateAnimal 訊息後,
恐龍就會移動到每個洞的位置上,並產生分身
(所以分身恐龍會在所有的洞上面):
當收到 Start 開始遊戲的訊息後,
就隨機等一段時間,再往上浮出 (當做是地鼠探出頭的樣子),
再隨機等一段時間後,就往下潛入洞中:
當恐龍收到槌子發過來的 CheckIfHit 廣播訊息後,
會檢查自己是否和槌子相碰了,
是的話就改變顏色並左右晃動一下,代表被擊中了:
3. 角色:槌子 (Hammer)
槌子的角色很簡單,它必須隨著滑鼠的游標移動,
顯示出槌子準備要敲下的模樣:
當收到舞台送來的 TryHit 訊息時,
會先顯示槌子下敲的樣子,
再發送廣播訊息 CheckIfHit,讓恐龍去檢查是否被槌子敲中了。
最後,再回復成槌子向上的樣子:
4. 角色:時間 (Time)
時間角色基本上是一個細長的長方形,
產生一堆分身並排在一起的話,
就可以製造成時間倒數條 (也有點像血量計)~
下面有用一個專屬於時間角色的本地變數 IndexTime,
第一個時間分身是 1,第二個是 2,
這樣建出來 30 個時間分身,就分別代表 1 秒、2 秒… 到 30 秒:
當收到洞廣播的 CheckTime 訊息後,
如果自身的 IndexTime < 剩下秒數,
就可以把自己分身刪除,造成時間列減少的效果:
5. 角色:標題 (Banner)
這個角色很簡單,一開始還不用顯示:
收到洞傳來的 ShowStartBanner 訊息後,
就顯示遊戲開始的大標題,
接著等 3 秒後再廣播 Start 訊息,
代表遊戲正式開始,可以敲地鼠恐龍了:
如果收到洞傳來的 GameOver 訊息,
就顯示遊戲結束的大標題:
6. 背景 (Backdrop)
背景的程式很簡單,
主要就是按下空白鍵時,發送 TryHit 訊息,
好讓槌子顯現出往下敲的樣子,並檢查有無擊中。
同時,用滑鼠點擊也有相同效果:
來看看遊戲的實況吧:
有興趣玩玩或研究的人,
可以參考 打地鼠恐龍遊戲 (Hit the Gopher Dinosaurs) 這個 Scratch 專案喔~