• 沒有找到結果。

主要程式 main():

在文檔中 8051 智慧鼠迷宮遊戲設計 (頁 49-61)

第五章 程式架構

5.1 主要程式 main():

說明:當 89C51 reset 後,一開始會執行計時器初始化的動作,之後就 一直等待使用者輸入按鍵,依照按鍵跳到對應的功能,search 完以後,

他會直接跳到找最快路徑的步驟去,一直到到達終點才會結束。

search():

說明:search 步驟需要很多副程式來共同完成,譬如直走轉向、判斷 路徑、儲存絕對方向等,這些會留到後面的副程式來各別介紹。Search 的主要流程如下,一開始他會他會抓感應器的值來判斷目前的地形,

當直線他會直走,當有叉路時,他會依照 DFS 的右手法則的右轉->直 走->左轉的優先權來轉向,轉向完他會將絕對方向存入陣列,之後就

會一直重複,如果到終點才會跳到找最快路徑步驟去執行。

SEARCH 圖解 1.

說明:D 表示目前的絕對方向 2.

說明:我們定一開始的起點為方向 1,電腦鼠起點定在迷宮的最下方 3.

說明:當電腦鼠走到十字路口時,電腦鼠依 DFS 的右手法則向右轉,

因為電腦鼠向右轉,所以我們將絕對方向轉換為 2,然後將 2 存入堆 疊。

4.

說明:當電腦鼠遇到斷路的時候,他會迴轉,同時將絕對方向設為 2 的 相反->4,然後將他存入堆疊。

5.

說明:當電腦鼠遇到十字路口時,他一樣依右手法則右轉,然後將方向 轉換為 1,並將方向存入堆疊。

6.

說明:當電腦鼠遇到 T 字行路口時,他依照右手法則再一次右轉,然後 將轉換後的方向 2,存入堆疊。

7.

說明:當電腦鼠再次遇到斷路時,他一樣會迴轉,然後取相反的方向,

存入堆疊。

8.

說明:當電腦鼠遇到以他的方向來說是左 T 字型的路徑時,他會依照 DFS 的右手法則定理,轉向的優先權為右轉>直走>左轉,所以這時候 他會選擇直走,然後直接將目前的方向存入堆疊,不用轉換。

9.

說明:當電腦鼠到達終點時,他就會停止動作,然後將終點的代表符號 (5)存入堆疊,有利於我們判斷,他是否抓到終點的地形。

ALGORITHM():

說明:找最快路徑步驟一開始會馬上處理 search 產出的陣列,產生最 快的路徑。迷宮初始化,是為了讓電腦鼠再次重新從終點開始走。最 快路徑的步驟跟 search 步驟大致相同,最大的不同是,當有叉路時,

電腦鼠並不會依照 DFS 的右走法則來轉向,電腦鼠會把絕對路徑從陣 列取出,並轉成相對路徑,同時依照相對路徑來轉向。

找最快路徑圖解 1.

說明: 這是找最快路徑步驟最重要的一部分,他會處理 search 傳來的 陣列,然後將相反方向的路徑消掉,其中如果是 24 跟 13 兩各值相連 的話,就可以消掉,我們寫入 6 代表這各陣列的值已經被處理過了。

2.

說明: 當 search 步驟做完時,我們將電腦鼠拉回原點,然後從原點開 始作找最快路徑的步驟,其中 D 代表電腦鼠目前的方向,我們是預設 1,然後我們把 6 擦去不看,是為了陣列的簡潔易看。

3.

說明: 當電腦鼠走到十字路徑時,我們從陣列的底部開始往上找,將 陣列裡面非 6 或 5 的值取出,所以我們取 1。

4.

說明:現在這各步驟,我們將取出的值 1 跟目前的方向作比對,如果相 同,他就會選擇直走。

5.

說明: 當電腦鼠再次遇到叉路時,他一樣會由上一次找到的陣列的指 標開始往上找非 5 或 6 的值,所以這一次我們找到 4。

6.

說明:取出的 4 會與目前的方向作比對,目前我們的方向是 1,依照我 們定的座標值,取出來的 4,代表電腦鼠要左轉,左轉完後,我們如 同前面 search 步驟一樣,將目前的方向轉換為 4,只是轉換後,我們

並沒有存入陣列。

7.

說明: 此時當電腦鼠繼續走時,他到最後會偵測到終點的路徑,整各 實驗就算完成。

在文檔中 8051 智慧鼠迷宮遊戲設計 (頁 49-61)

相關文件