- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java實(shí)現的迷宮游戲
該軟件主要分為如下三個(gè)模塊:
1.迷宮大小相關(guān)參數:
這些參數設置的顯示圖下圖所示:
2.迷宮創(chuàng )建算法相關(guān)參數 本游戲中創(chuàng )建一個(gè)迷宮的算法有三種:
3.迷宮尋路算法相關(guān)參數 本游戲中走出一個(gè)迷宮的迷宮尋路算法有兩種:
4.整個(gè)參數設置模塊的顯示圖如下圖所示:
本游戲中,按進(jìn)行游戲的主體不同共設計兩個(gè)游戲狀態(tài):
本游戲軟件剛剛運行時(shí)刻,按鈕功能模塊的顯示圖如下圖所示:
該模塊涉及到的游戲功能按鈕及相關(guān)的適用狀態(tài)有以下六種:
本游戲軟件剛剛運行時(shí)刻,迷宮主界面模塊的顯示圖如下圖所示:
整個(gè)迷宮使用大量的方格(正方形)進(jìn)行顯示,其中,可行走的路徑用白色方格顯示,不可行走的路徑即障礙物用黑色方格表示,出口用紅色方格表示,用戶(hù)用于行走的標識用綠色小球(圓形)表示。用戶(hù)通過(guò)鍵盤(pán)上上下左右的方向鍵操縱小球在迷宮主界面上運動(dòng)。
參數設計模塊中的ROWS(即迷宮行數)、COLS(即迷宮列數)在迷宮主界面的表示分別指的是迷宮主界面中每行、每列方格的數量,參數設計模塊中的Lattice's width(即組成迷宮的格子的寬度)在迷宮主界面的表示是迷宮主界面中每個(gè)方格的寬。此外,在迷宮主界面模塊的正上方,存在統計用戶(hù)進(jìn)行游戲的當前時(shí)刻的所用時(shí)間和所走步數的計時(shí)器和計步器。
要設計一款迷宮的游戲軟件,其中最主要也是必須要解決的兩大主要問(wèn)題就是如何去生成一個(gè)隨機的迷宮以及如何在一個(gè)隨機生成的迷宮中找到從迷宮入口到迷宮出口的路徑。在圖論中,這兩個(gè)問(wèn)題的表示就是:
關(guān)于這兩個(gè)問(wèn)題的解決,目前存在許多算法,本款軟件采取并實(shí)現了目前應用最為廣泛的三大隨機無(wú)權連通圖生成算法:
以及兩大無(wú)權連通圖遍歷算法:
在對迷宮生成算法進(jìn)行具體闡述之前,有兩個(gè)概念首先要明確定義一下:迷宮單元和墻。迷宮單元可以映射到無(wú)權連通圖中的點(diǎn),而墻壁則可以映射到無(wú)權連通圖中兩點(diǎn)之間的邊。如果墻壁是打通的,則記為無(wú)權連通圖中的墻壁兩側的點(diǎn)間有邊;如果墻壁是沒(méi)有打通的,則記為無(wú)權連通圖中的墻壁兩側的點(diǎn)間沒(méi)有邊。要生成一個(gè)隨機的迷宮,就需要做到迷宮中任意兩個(gè)迷宮單元之間都有一條路徑。
我們用二維數組表示一個(gè)迷宮,每個(gè)迷宮單元表示為一個(gè)二維數組元素,由于生成算法的限制,迷宮的行數和列數均需設置為奇數,在了解了相關(guān)算法原理后,就能明白其中原因。在下列迷宮生成算法執行之前,假設位于奇數行奇數列的點(diǎn)為迷宮單元,位于偶數行或者偶數列的點(diǎn)為墻壁,且所有的點(diǎn)均初始化為未訪(fǎng)問(wèn)狀態(tài)、不可通過(guò)狀態(tài)。
算法描述
將起點(diǎn)作為當前迷宮單元并標記為已訪(fǎng)問(wèn)
當還存在未標記的迷宮單元,進(jìn)行循環(huán)
如果當前迷宮單元有未被訪(fǎng)問(wèn)過(guò)的的相鄰的迷宮單元
隨機選擇一個(gè)未訪(fǎng)問(wèn)的相鄰迷宮單元
將當前迷宮單元入棧
移除當前迷宮單元與相鄰迷宮單元的墻
標記相鄰迷宮單元并用它作為當前迷宮單元
如果當前迷宮單元不存在未訪(fǎng)問(wèn)的相鄰迷宮單元,并且棧不空
棧頂的迷宮單元出棧
令其成為當前迷宮單元
生成的迷宮特點(diǎn)
一般來(lái)說(shuō),Depth First Search Algorithm生成的迷宮極度扭曲,有著(zhù)一條明顯的主路。生成的51行51列迷宮如下圖所示:
算法描述
讓迷宮全是墻.
隨機選一個(gè)單元格作為迷宮的通路,然后把它的鄰墻放入列表
當列表里還有墻時(shí)
從列表里隨機選一個(gè)墻,如果這面墻分隔的兩個(gè)單元格只有一個(gè)單元格被訪(fǎng)問(wèn)過(guò)
那就從列表里移除這面墻,即把墻打通,讓未訪(fǎng)問(wèn)的單元格成為迷宮的通路
把這個(gè)格子的墻加入列表
如果墻兩面的單元格都已經(jīng)被訪(fǎng)問(wèn)過(guò),那就從列表里移除這面墻
生成的迷宮特點(diǎn)
相對于深度優(yōu)先的算法,Randomized Prim's Algorithm不是優(yōu)先選擇最近選中的單元格,而是隨機的從所有的列表中的單元格進(jìn)行選擇,新加入的單元格和舊加入的單元格同樣概率會(huì )被選擇,新加入的單元格沒(méi)有優(yōu)先權。因此其分支更多,生成的迷宮更復雜,岔路更多,難度更大,也更自然。生成的51行51列迷宮如下圖所示:
算法描述
生成的迷宮特點(diǎn)
Recursive Division Algorithm十分高效,生成的迷宮較為簡(jiǎn)單,有點(diǎn)像四叉樹(shù),直路多且不扭曲。生成的51行51列迷宮如下圖所示:
由于迷宮相當于連通圖,所以通過(guò)使用圖論算法中由任意一點(diǎn)出發(fā)遍歷整個(gè)連通圖的其他所有頂點(diǎn)的遍歷算法即可找到一條從迷宮入口到迷宮出口的路徑,本游戲軟件使用的是目前應用最為廣泛的Depth First Search Algorithm(深度優(yōu)先搜索算法)和Breadth First Search Algorithm(廣度優(yōu)先搜索算法)。注意,此時(shí)迷宮中所有可行走的點(diǎn)均視為迷宮單元,所有不可行走的點(diǎn)均視為墻壁。
算法描述
生成的路徑特點(diǎn):
Depth First Search Algorithm 在由Recursive Division Algorithm生成的51行51列迷宮中生成的路徑如下圖所示:
算法描述
生成的路徑特點(diǎn):
Breadth First Search Algorithm 在由Recursive Division Algorithm生成的51行51列迷宮中生成的路徑如下圖所示:
以上就是Java實(shí)現的迷宮游戲的詳細內容,更多關(guān)于Java 迷宮游戲的資料請關(guān)注腳本之家其它相關(guān)文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站