隨機(jī)生成一個迷宮,并求解迷宮
玩家可以自行求解
1)迷宮游戲是非常經(jīng)典的游戲,在該題中要求隨機(jī)生成一個迷宮,并求解迷宮;
2)要求游戲支持玩家走迷宮,和系統(tǒng)走迷宮路徑兩種模式。玩家走迷宮,通過鍵盤方向鍵控制,并在行走路徑上留下痕跡;
3)系統(tǒng)走迷宮路徑要求基于A*算法實(shí)現(xiàn),輸出走迷宮的最優(yōu)路徑并顯示。
4)設(shè)計交互友好的游戲圖形界面。
深度優(yōu)先遍歷生成迷宮:
void createMaze() {//將當(dāng)前格壓入棧
path.push(cur);
while(!path.empty()) {ArrayListmNei=notVisitedNei(cur);
if(mNei.size()==0){//如果該格子沒有可訪問的鄰接格,則跳回上一個格子
cur = path.pop();
continue;
}
//隨機(jī)選取一個鄰接格(并且在地圖內(nèi))
next = mNei.get(new Random().nextInt(mNei.size()));
int x = next.x;
int y = next.y;
//如果該節(jié)點(diǎn)被訪問過,則回到上一步繼續(xù)尋找
if(visit[x][y]){cur = path.pop();
}
//否則將當(dāng)前格壓入棧,標(biāo)記當(dāng)前格為已訪問,并且在迷宮地圖上移除障礙物
else{path.push(next);
visit[x][y] = true;
mMap[x][y] = road;
//打通當(dāng)前格與下一格
//打通墻,將墻的位置改換定義為路
mMap[(cur.x + x) / 2][(cur.y + y) / 2] = road;
//當(dāng)前格等于下一格
cur = next;
}
}
//設(shè)置入口
mMap[start.x-1][start.y]=1;
//設(shè)置出口
mMap[end.x+1][end.y]=1;
}
A*搜索算法求解迷宮:
public Node findPath(Node startNode, Node endNode) {openList.add(startNode);// 把起點(diǎn)加入 open list
while (openList.size() >0) {Node currentNode = findMinFNodeInOpenList();// 遍歷 open list ,查找F值最小的節(jié)點(diǎn),把它作為當(dāng)前要處理的節(jié)點(diǎn)
//如果open list為空,尋路失敗,找不到到達(dá)終點(diǎn)的路徑(也就是迷宮沒有路可以到達(dá))
openList.remove(currentNode);// 將剛剛F最小的那個點(diǎn)從open list中移除
closeList.add(currentNode);// 把這個節(jié)點(diǎn)移到 close list
ArrayListneighborNodes = findNeighborNodes(currentNode);//尋找鄰居節(jié)點(diǎn)(4個中尋找)
for (Node node : neighborNodes) {if (exists(openList, node)) {//如果鄰居節(jié)點(diǎn)在open列表中
foundPoint(currentNode, node);//更新列表中父節(jié)點(diǎn)和估價函數(shù)信息
} else {notFoundPoint(currentNode, endNode, node);//如果鄰居節(jié)點(diǎn)不在open列表中,則將該點(diǎn)加入open列表中
}
}
//如果終點(diǎn)加入到了open list中,此時路徑已經(jīng)找到,從終點(diǎn)開始,每個方格沿著父節(jié)點(diǎn)移動直至起點(diǎn),這就是最優(yōu)路徑
if (find(openList, endNode) != null) {//如果找到尾節(jié)點(diǎn),則返回尾節(jié)點(diǎn)
return find(openList, endNode);
}
}
// return find(openList, endNode);
return null;
}
項(xiàng)目實(shí)現(xiàn)及結(jié)果分析開始頁面展示:
游戲界面展示:
結(jié)束界面展示:
無法用圖片展現(xiàn)的功能:
玩家按下空格鍵可以顯示A*算法求解路線
1.利用深度優(yōu)先算法生產(chǎn)迷宮地圖
2.利用A*算法求解迷宮
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧