gpt4 book ai didi

java - 使用 Prim 算法在迷宫中放置房间

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:25 25 4
gpt4 key购买 nike

我正在尝试将房间放置在 ASCII 屏幕上,然后使用 Prim's algorithm用迷宫“填充”房间之间的空间,但实际上并没有闯入房间。我已经修补了几个小时,但我无法找到一种方法来阻止我的算法闯入我的房间。

有人可以帮助我吗?我很迷失。我正在练习 map 生成技术,这是我的第五次练习。不,我不想用另一种方式来做,我只是想用这种方式来做——但是是对的。

下面是我当前带房间的输出的照片、我当前不带房间的输出的照片,以及相关源代码的链接(又名 Prim 的算法部分)。如果您真的能帮助我,再次感谢!

注意:相反的方法所做的就是找出“父”单元格是哪个单元格,并据此确定方向。因此,如果父单元格的 x 值为 7,子单元格的 x 值为 6,那么它就知道这是新的子单元格。

start = new Point(x,y, null);
map[start.x][start.y] = Tile.STAIRS_DOWN;

for(int nx = -1; nx <= 1; nx++){
for(int ny = -1; ny <= 1; ny++){
if((nx == 0 && ny == 0) || (nx != 0 && ny != 0)){
continue;
}
try{
if(map[start.x + nx][start.y + ny] == Tile.FLOOR){
continue;
}
frontier.add(new Point(start.x+nx, start.y + ny, start));
}
catch(Exception e){
continue;
}
}
}

Point last = null;
while(!frontier.isEmpty()){
Point cu = frontier.remove(RandomGen.rand(0, frontier.size() - 1));
Point op = cu.opposite();
try{
if((map[cu.x][cu.y] == Tile.WALL) && (map[op.x][op.y] == Tile.WALL)){
for (int bx = -1; bx <= 1; bx++)
for (int by = -1; by <= 1; by++) {
boolean failed = false;
if (bx == 0 && by == 0 || bx != 0 && by != 0)
continue;
try {
if(map[op.x + bx][op.y + by] == Tile.FLOOR){
break;
}
last = op;
if(!failed){
map[cu.x][cu.y] = Tile.FLOOR;
map[op.x][op.y] = Tile.FLOOR;
frontier.add(new Point(op.x + bx, op.y + by, op));
}
}
catch(Exception e){
continue;
}
}
}
}
catch(Exception e){}
}

Without Rooms

With Rooms

最佳答案

已解决:我需要检查我的前向角落是否有开放空间。因此,如果我要去“东”,那么我还需要检查东北和东南的瓷砖,否则我可能会钻进房间。

关于java - 使用 Prim 算法在迷宫中放置房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42848833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com