如何在C++中为随机迷宫创建单元格或网格?
我想在C++中创建一个随机迷宫,但我无法启动,因为我不知道如何创建网格或单元格。我怎么能创造它?我也想用ASCII字符创建它。我怎么能将它存储在数组中? (可以给任何一个示例代码和一些解释,所以我可以更好地理解它)如何在C++中为随机迷宫创建单元格或网格?
另一个问题:我需要学习和使用哪些数据结构?我打算使用Eller算法或Kruskal算法。
谢谢你们帮助我!我是一个begginer程序员,我想了解这一点,因为这是我的项目的一部分,谢谢你差异很大!
您可能想要将您的迷宫存储在二维字符数组中。你可以用或不用C++初始化它来声明一个数组。
char a[30][10]; // declares a char array of 30 rows and 10 columns.
// declare an array with 3 rows and 3 columns, and provide initial values
char ticTacToeBoard[3][3] = {{'x', 'x', 'o'},
{'o', 'o', 'x'},
{'x', 'o', ' '}
};
你可以在你的迷宫更改初始值'|'
和'-'
墙壁,并用空格字符,' '
,为通道。 任何初始化方法都可以工作,但您始终以相同的方式使用元素。以下是如何清除上面初始化阵列中的电路板。
// clear the board
for (int row=0; row<3; row++) {
for (int col=0; col<3; col++) {
ticTacToeBoard[row][col] = ' ';
}
}
如果你想读一个元素(当你试图浏览一个迷宫有用)的值,可以使用相同的下标符号,当你设置它的价值。
char y = a[2][2]; // reads the character in row 2, column 2
您是否在寻找Maze generation algorithms(more)?你的问题是算法还是图形?
典型算法通过将迷宫中的每个“单元”视为图的顶点来工作,从所有“墙”开始,并移除与生成树对应的一组墙。 (所以为了随机化它们,很多都是从随机权重开始,找到最小生成树。)至少对于小型的迷宫来说,你不需要任何特殊的数据结构来表示单元;你可以把每个细胞想象成一对(x,y)
(它的coördinates)。并且因为(x,y)
的邻居只是(x,y±1)
和(x±1,y)
(忽略那些超出边界的那些邻居),所以您不需要任何数据结构(邻接矩阵/邻接列表)来存储图的边缘。
在任何情况下,一旦您拥有生成树,您就会确切地知道哪些墙存在,哪些不存在,因此您可以完整描述迷宫。如果你要绘制迷宫,你知道要绘制哪些。
要使用ASCII字符画,你只是一个穿过每行一个:画“上墙”(把“--
”如果(x,y)
和(x,y+1)
存在之间的墙),然后绘制实际行(放如果存在(x,y)
和(x+1,y)
之间的墙壁,则为“|
”)。最后画出底部边界。
谢谢先生回答,如果对你没问题,你能给我一个样本代码让我更好地理解它吗?谢谢你somuch先生! – jessemiel 2008-12-28 20:14:18
垂直壁:| | Horiz。华尔街:_
如果您使用固定宽度的字体:
_____
| | _
|_ | |
__ | |
|_____|
我不知道到底该怎么做,但在这里就是我会开始。
确定网格上的起点和终点将在哪里。然后,创建一个单一的路径,以任何你想要的扭曲。基本上,它应该是随机移动,每次都检查是否还有一条路可以走到最后。然后,从该路径上移除一定数量的墙,并从这些孔创建其他路径。继续操作,直到空间用完。然后,也许,确保没有创建更短的路径。如果他们有,阻止他们。
你好,先生!非常感谢您的回答!!现在我明白谢谢你了! – jessemiel 2008-12-29 02:34:59