包含功能:
1.自訂迷宮大小
2.使用圖的深度遍曆隨機產生迷宮
3.使用者使用滑鼠繪製自訂迷宮
4.單步求解迷宮
5.一鍵求解迷宮
6.聲音特效
完整項目下載:
http://download.csdn.net/detail/wxg694175346/5179044
程式:
一、系統開發平台
迷宮老鼠:利用堆棧尋找迷宮的路徑解法。
程式設計語言:Java
開發工具:Eclipse
作業系統:Windows
二、系統規劃
2.1 任務陳述
迷宮老鼠的應用主要用於
解決迷宮的尋徑問題。
2.2 任務目標
解決迷宮問題:入口A進入,出口B走出
隨機設計一個迷宮並且求解
自訂一個迷宮並且求解。
三、系統定義
四、需求分析
4.1 資料結構需求
資料結構主要涉及三個部分:
1.頂點的資料對象:包含四個1/0整數資料表示該點四個方向的連通狀況,資料之間沒有聯絡。
2.迷宮的地圖:需要對迷宮的路徑進行儲存,大小固定,組內元素沒有聯絡,互不影響,沒有先後順序。組內的資料類型為封裝好的頂點對象類。
3.迷宮求解中的路徑:需要儲存經過的路徑,元素為封裝的頂點對象。元素必須按照順序排列,先進先出,資料大小無影響。
4.2 操作需求
1.隨機模式
2.自訂模式中
五、 實現思想(分兩部分:隨機產生可解迷宮與自訂迷宮)
1. 隨機產生可解迷宮:
首先,迷宮由n*n個方陣點組成,每個點有控制上下左右,4個方向的牆的屬性值,以推倒牆的方式來構建兩點間的通路。要是兩點間有通路,即要使左邊的正方形推倒右牆,右邊的正方形推倒左牆,則形成此通路,通過設定點的屬性值來儲存構成迷宮的點。
利用圖的深度優先遍曆原則,從起點(0,0)開始,想任意可訪問的點進行隨機深度遍曆,直至所有點都被遍曆到為止(此處遍曆全部的點是為了使迷宮看起來更加和諧好看,也增加了迷宮的複雜度),深度遍曆的路徑即為迷宮可行走的通路,當解迷宮時只能在此規定的通路上尋求通路,也就間接的形成了迷宮。
由於圖的深度遍曆的特點,起點(0,0)可以到達圖中任何一個點,此處設定終點為矩陣的最後一個點,確保了起點到終點一定有通路,且通路唯一。將構成迷宮的所有點形成一個可變數組ArrayList,以供解迷宮時使用。
解迷宮時,方向選擇按照先右,後下,再左上,並且提供計算兩點間在確定方向上是否存在通路的判斷方法,如果該點找到了下一個可通行的點,則將該點加入堆棧,如果找不到,則從堆棧中取出一個點,即形成了迴路。
2. 自訂迷宮
首先根據輸入產生m*n個方格,通過滑鼠點擊事件,產生點擊的方格處設定障礙,由此產生迷宮。
解迷宮時,在上述解迷宮的基礎上,加入沒有通路的判斷(即到達不了終點的判斷),即堆棧已經為空白,但仍要從其中取出點時,表示此迷宮已經沒有可以再到達的點,此時反映迷宮無通路,給予使用者提示,解迷宮完成。
六、 資料結構設計
首先,利用動態數組儲存迷宮的所有點類(MazePoint類),隨機產生與自訂迷宮的過程中,便是通過設定這些迷宮點來構造迷宮的。
資料結構設計關鍵在解迷宮時予以體現,此處我利用堆棧的思想,講解迷宮時經過的點壓入堆棧,當在一點找不到可到達的下一點時,便取出堆棧中最頂層的點,將此點設為當前點尋找可到達的點,依次進行此過程,直至到達終點或堆棧中已沒有點可以被取出為止。
以為在解迷宮的過程中,尋找過得點被唯一標識,當形成迴路再尋找可到達的點時,這些被唯一標識的點不會被二次到達,以此保證迷宮不會出現死迴圈的狀態。