[Scratch] 隨機迷宮小精靈 (Random Maze Pacman) 遊戲

[Scratch] 隨機迷宮小精靈 (Random Maze Pacman) 遊戲

最近算是難得的 Scratch 興致大爆發,

接連寫了好幾個 Scratch 遊戲,像是之前的:

 

今天又寫了「隨機迷宮小精靈」遊戲,

覺得算是蠻有挑戰性的一個題目吧~

原本我想做的是可以隨機產生一個迷宮,

但一定要有一條路線可以從起點走到終點,

光是這個條件,就難倒我許久了…

(演算法學得很差,對不起大學教授們…)

 

試了半天,後來終於試出一個不是很效率的方法,

那就是我先從一個固定的起點 (左下角) 開始,

隨機找左右上下四個方向移動,

如果目標點沒有被占掉的話,就允許產生一個分支延伸到那點。

然後允許從這兩點隨機選一點出發,一樣上下左右延動。

也就是說,最後我會製造出從左下角長出來的一棵隨機樹。

 

同樣的,我從右上角出發,一樣長出一顆隨機樹。

利用陣列 (Scratch 裡的清單),我把它們分別用 1 和 2 標記,

並要求 1 和 2 這兩類節點,至少要接觸 2 次以上,

保證迷宮至少有兩條路線可以從起點到終點。

(因為發現只有一條路線的話,太容易卡死)

 

使用這個方法,可以製造出隨機的迷宮,每次都會不一樣:

(這裡我讓左下角和右上角延伸出來的樹,

使用不同的顏色,方便觀察他們的接觸點,

實際程式會讓顏色都是一樣的)

 

我用的這個方法並不是很有效率,

因為它可能會常常隨機選到一點,那點的四個方向都不能再延伸出去…

最極端的狀況,就是每次隨機選點時都選到同一點,

那可能這棵樹就永遠建不出來…

不過幸好目前還不太常遇到這情況,

但是如果要求接觸點要增加的話,就可能會遇到問題,

因為可能根本就沒有空間可以再讓這兩棵樹接觸了…

 

另外在產生迷宮時的一個問題,

就是它產生的很慢,你可以看到它一步一步產生每個分支,

雖然那樣也是有個不錯的效果,

但對迷宮而言,產生的時間太久了,要耗掉好幾秒鐘…

後來發現,是因為我用畫筆畫每一條線時,可能都在重繪螢幕…

於是我將主要程式放到一個 Main 函式裡,

然後將這函式設定成 Run without screen refresh,

也就是執行時不要重繪螢幕,

產生迷宮的速度就變成飛快的了:

 

雖然可以產生迷宮了,但其實它的難度太低…

產生迷宮的難度對我來說頗高,

但是產生出來的迷宮,幾乎是一眼就能看出來路線怎麼走…

因此決定把它改成類似「小精靈」的遊戲,

隨機產生一些禮物和怪物,

使用者必須操控主角企鵝,去吃掉所有的禮物來過關:

 

在改成小精靈遊戲的時候,遇到的另一個問題是,

「什麼情況才能往這方向移動?」

原本在迷宮陣列裡,我只用了三種標記:

0 代表不是路、1 代表從左下角延伸出來的、2 代表從右上角延伸出來的,

但就算是這格子裡是 1,右邊也是 1,也不代表它一定可以往右走過去

(因為迷宮的路線可能是「↑→↓」才能到右邊那格)…

 

於是我又存了另一個陣列,

在建立迷宮時,把每次產生的分支起點和終點都存起來。

這樣在使用者操控主角時,就會根據目前的位置,

來找尋有接觸到目前點的分支,就知道能不能移掉到指定方向了~

 

有興趣的人,

可以來玩一下這個 隨機迷宮小精靈 (Random Maze Pacman) 遊戲喔~

(本頁面已被瀏覽過 975 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料