Java培訓(xùn):初學(xué)者實(shí)現(xiàn)Java迷宮小游戲
初學(xué)者實(shí)現(xiàn)Java迷宮小游戲要怎么做?動(dòng)力節(jié)點(diǎn)小編來告訴大家。Java實(shí)現(xiàn)一個(gè)迷宮游戲,本倉庫代碼是經(jīng)過編譯運(yùn)行過的,一般情況下將本倉庫代碼下載下來之后,使用編譯直接可以運(yùn)行。
該軟件主要分為如下三個(gè)模塊:
參數(shù)設(shè)置模塊
按鈕功能模塊按鈕功能模塊
迷宮主界面模塊迷宮主界面模塊
軟件各模塊介紹
參數(shù)設(shè)置模塊
1. 迷宮大小相關(guān)參數(shù):
2. 迷宮創(chuàng)建算法相關(guān)參數(shù)本游戲中創(chuàng)建一個(gè)迷宮的算法有三種:
3. 迷宮尋路算法相關(guān)參數(shù)本游戲中走出一個(gè)迷宮的迷宮尋路算法有兩種:
按鈕功能模塊
本游戲中,按進(jìn)行游戲的主體不同共設(shè)計(jì)兩個(gè)游戲狀態(tài):
該模塊涉及到的游戲功能按鈕及相關(guān)的適用狀態(tài)有以下六種:
迷宮主界面模塊
整個(gè)迷宮使用大量的方格(正方形)進(jìn)行顯示,其中,可行走的路徑用白色方格顯示,不可行走的路徑即障礙物用黑色方格表示,出口用紅色方格表示,用戶用于行走的標(biāo)識(shí)用綠色小球(圓形)表示。用戶通過鍵盤上上下左右的方向鍵操縱小球在迷宮主界面上運(yùn)動(dòng)。
參數(shù)設(shè)計(jì)模塊中的ROWS(即迷宮行數(shù))、COLS(即迷宮列數(shù))在迷宮主界面的表示分別指的是迷宮主界面中每行、每列方格的數(shù)量,參數(shù)設(shè)計(jì)模塊中的's (即組成迷宮的格子的寬度)在迷宮主界面的表示是迷宮主界面中每個(gè)方格的寬。此外,在迷宮主界面模塊的正上方,存在統(tǒng)計(jì)用戶進(jìn)行游戲的當(dāng)前時(shí)刻的所用時(shí)間和所走步數(shù)的計(jì)時(shí)器和計(jì)步器。
軟件設(shè)計(jì)方案
軟件相關(guān)原理說明
要設(shè)計(jì)一款迷宮的游戲軟件,其中最主要也是必須要解決的兩大主要問題就是如何去生成一個(gè)隨機(jī)的迷宮以及如何在一個(gè)隨機(jī)生成的迷宮中找到從迷宮入口到迷宮出口的路徑。在圖論中,這兩個(gè)問題的表示就是:
關(guān)于這兩個(gè)問題的解決,目前存在許多算法,本款軟件采取并實(shí)現(xiàn)了目前應(yīng)用最為廣泛的三大隨機(jī)無權(quán)連通圖生成算法:
以及兩大無權(quán)連通圖遍歷算法:
迷宮生成算法
在對(duì)迷宮生成算法進(jìn)行具體闡述之前,有兩個(gè)概念首先要明確定義一下:迷宮單元和墻。迷宮單元可以映射到無權(quán)連通圖中的點(diǎn),而墻壁則可以映射到無權(quán)連通圖中兩點(diǎn)之間的邊。如果墻壁是打通的,則記為無權(quán)連通圖中的墻壁兩側(cè)的點(diǎn)間有邊;如果墻壁是沒有打通的,則記為無權(quán)連通圖中的墻壁兩側(cè)的點(diǎn)間沒有邊。要生成一個(gè)隨機(jī)的迷宮,就需要做到迷宮中任意兩個(gè)迷宮單元之間都有一條路徑。
我們用二維數(shù)組表示一個(gè)迷宮,每個(gè)迷宮單元表示為一個(gè)二維數(shù)組元素,由于生成算法的限制,迷宮的行數(shù)和列數(shù)均需設(shè)置為奇數(shù),在了解了相關(guān)算法原理后,就能明白其中原因。在下列迷宮生成算法執(zhí)行之前,假設(shè)位于奇數(shù)行奇數(shù)列的點(diǎn)為迷宮單元,位于偶數(shù)行或者偶數(shù)列的點(diǎn)為墻壁,且所有的點(diǎn)均初始化為未訪問狀態(tài)、不可通過狀態(tài)。
(深度優(yōu)先搜索算法)
算法描述
將起點(diǎn)作為當(dāng)前迷宮單元并標(biāo)記為已訪問
當(dāng)還存在未標(biāo)記的迷宮單元,進(jìn)行循環(huán)
如果當(dāng)前迷宮單元有未被訪問過的的相鄰的迷宮單元
隨機(jī)選擇一個(gè)未訪問的相鄰迷宮單元
將當(dāng)前迷宮單元入棧
移除當(dāng)前迷宮單元與相鄰迷宮單元的墻
標(biāo)記相鄰迷宮單元并用它作為當(dāng)前迷宮單元
如果當(dāng)前迷宮單元不存在未訪問的相鄰迷宮單元,并且棧不空
棧頂?shù)拿詫m單元出棧
令其成為當(dāng)前迷宮單元
生成的迷宮特點(diǎn)
一般來說, 生成的迷宮極度扭曲,有著一條明顯的主路。
Prim's (隨機(jī)普利姆算法)
算法描述
讓迷宮全是墻.
隨機(jī)選一個(gè)單元格作為迷宮的通路,然后把它的鄰墻放入列表
當(dāng)列表里還有墻時(shí)
從列表里隨機(jī)選一個(gè)墻,如果這面墻分隔的兩個(gè)單元格只有一個(gè)單元格被訪問過
那就從列表里移除這面墻,即把墻打通,讓未訪問的單元格成為迷宮的通路
把這個(gè)格子的墻加入列表
如果墻兩面的單元格都已經(jīng)被訪問過,那就從列表里移除這面墻
生成的迷宮特點(diǎn)
相對(duì)于深度優(yōu)先的算法, Prim's 不是優(yōu)先選擇最近選中的單元格,而是隨機(jī)的從所有的列表中的單元格進(jìn)行選擇,新加入的單元格和舊加入的單元格同樣概率會(huì)被選擇,新加入的單元格沒有優(yōu)先權(quán)。因此其分支更多,生成的迷宮更復(fù)雜,岔路更多,難度更大,也更自然。
(遞歸分割算法)
算法描述
生成的迷宮特點(diǎn)
十分高效,生成的迷宮較為簡單,有點(diǎn)像四叉樹,直路多且不扭曲。
迷宮尋路算法
由于迷宮相當(dāng)于連通圖,所以通過使用圖論算法中由任意一點(diǎn)出發(fā)遍歷整個(gè)連通圖的其他所有頂點(diǎn)的遍歷算法即可找到一條從迷宮入口到迷宮出口的路徑,本游戲軟件使用的是目前應(yīng)用最為廣泛的 (深度優(yōu)先搜索算法)和 (廣度優(yōu)先搜索算法)。注意,此時(shí)迷宮中所有可行走的點(diǎn)均視為迷宮單元,所有不可行走的點(diǎn)均視為墻壁。
(深度優(yōu)先搜索算法)
算法描述
生成的路徑特點(diǎn):
在由 生成的51行51列迷宮中生成的路徑。
(廣度優(yōu)先搜索算法)
算法描述
生成的路徑特點(diǎn):
在由 生成的51行51列迷宮中生成的路徑。
動(dòng)力節(jié)點(diǎn)java培訓(xùn):
聲明:本站所有文章資源內(nèi)容,如無特殊說明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。
