我如何在 java 中生成随机迷宫?
How do i generate a random maze in java?
好的,所以我想为我的迷宫游戏生成一个随机迷宫。
我已经像这样对迷宫进行了硬编码,并且有几个不同的版本我希望能够随机产生。
public Maze() {
this.mazeMap1 = new BlockType[][] {
{H, H, H, H, H, H, H, H, H, H, H, H, H, H, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, H, H, H, H, H, H, H, H, H, H, H, H, H, H}
};
}
然后我创建一个 getter 和 return 迷宫
public BlockType[][] getMazeMap() {
return mazeMap2;
}
然后我有一个 class 'Board' 在那里我做迷宫
private void makeBoard() {
blocks = new Maze().getMazeMap();
}
如果我有 10 个不同的硬编码迷宫,我将如何随机生成一个?
您需要一张 collection 的迷宫地图。拥有 mazemap1、mazemap2 等并不能(轻松地)让您选择一个。
ArrayList<Block[][]> mazemaps = new ArrayList<>();
mazemaps.add( new BlockType[][] { ... } ); // with all your data
mazemaps.add( new BlockType[][] { ... } ); // second map data
那你可以选一个:
int maze = new Random().nextInt(mazemaps.size());
return mazemaps.get(maze);
(还有很多其他事情您可以做得更好,但这是一个开始)
这是我的看法:
您首先需要生成退出方式。出口方式,我指的是从开始到结束的方式。
然后:
- 造一条无路可走的假路
- 生成围绕假道的墙
- 返回步骤 #1
将每个单元生成为墙壁或可通行地形后,运行 Djikstra/A* 算法并证明迷宫实际上是可解的。
好的,所以我想为我的迷宫游戏生成一个随机迷宫。 我已经像这样对迷宫进行了硬编码,并且有几个不同的版本我希望能够随机产生。
public Maze() {
this.mazeMap1 = new BlockType[][] {
{H, H, H, H, H, H, H, H, H, H, H, H, H, H, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
{H, H, H, H, H, H, H, H, H, H, H, H, H, H, H}
};
}
然后我创建一个 getter 和 return 迷宫
public BlockType[][] getMazeMap() {
return mazeMap2;
}
然后我有一个 class 'Board' 在那里我做迷宫
private void makeBoard() {
blocks = new Maze().getMazeMap();
}
如果我有 10 个不同的硬编码迷宫,我将如何随机生成一个?
您需要一张 collection 的迷宫地图。拥有 mazemap1、mazemap2 等并不能(轻松地)让您选择一个。
ArrayList<Block[][]> mazemaps = new ArrayList<>();
mazemaps.add( new BlockType[][] { ... } ); // with all your data
mazemaps.add( new BlockType[][] { ... } ); // second map data
那你可以选一个:
int maze = new Random().nextInt(mazemaps.size());
return mazemaps.get(maze);
(还有很多其他事情您可以做得更好,但这是一个开始)
这是我的看法:
您首先需要生成退出方式。出口方式,我指的是从开始到结束的方式。
然后:
- 造一条无路可走的假路
- 生成围绕假道的墙
- 返回步骤 #1
将每个单元生成为墙壁或可通行地形后,运行 Djikstra/A* 算法并证明迷宫实际上是可解的。