迷宫游戏随机路径生成C++
时间: 2023-08-12 18:43:31 浏览: 105
以下是一个简单的迷宫游戏随机路径生成的 C++ 代码:
```c++
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
const int MAXN = 30; // 迷宫大小
const int dx[4] = {0, 1, 0, -1}; // 右下左上四个方向
const int dy[4] = {1, 0, -1, 0};
int maze[MAXN][MAXN]; // 迷宫数组
bool vis[MAXN][MAXN]; // 标记数组
void dfs(int x, int y) {
vis[x][y] = true; // 标记该点已经被访问
int order[4] = {0, 1, 2, 3}; // 随机打乱访问顺序
for (int i = 0; i < 4; i++) {
int r = rand() % 4;
swap(order[i], order[r]);
}
for (int i = 0; i < 4; i++) {
int tx = x + dx[order[i]], ty = y + dy[order[i]];
if (tx < 1 || tx > MAXN || ty < 1 || ty > MAXN || vis[tx][ty]) continue;
maze[x + dx[order[i]]][y + dy[order[i]]] = 0; // 打通该点和下一点之间的墙
dfs(tx, ty); // 继续访问下一个点
}
}
int main() {
srand(time(NULL)); // 初始化随机数种子
memset(maze, 1, sizeof(maze)); // 将迷宫全部填上墙
dfs(1, 1); // 从左上角开始访问
maze[1][0] = maze[MAXN][MAXN - 1] = 0; // 打开入口和出口
for (int i = 1; i <= MAXN; i++) {
for (int j = 1; j <= MAXN; j++) {
if (maze[i][j]) cout << "#"; // 墙用 # 表示
else cout << " "; // 空地用空格表示
}
cout << endl;
}
return 0;
}
```
代码思路:
1. 定义迷宫大小,右下左上四个方向的数组 dx 和 dy,迷宫数组 maze 和标记数组 vis。
2. 定义一个深度优先搜索函数 dfs,参数为当前访问的点的坐标 x 和 y。
3. 在 dfs 函数中,先将当前点标记为已访问,然后定义一个顺序数组 order,打乱该数组的顺序,然后按照随机顺序依次访问当前点的四个方向。
4. 如果下一个点超出了迷宫范围或已经被访问过,则继续访问下一个方向。
5. 如果下一个点未被访问过,则将当前点和下一个点之间的墙打通,然后递归访问下一个点。
6. 在主函数中,先将迷宫全部填上墙,然后从左上角的点开始访问,最后将入口和出口打开,并输出迷宫图案。
7. 输出迷宫图案时,墙用 # 表示,空地用空格表示。
注意事项:
1. 使用随机数需要先初始化随机数种子,可以使用 srand(time(NULL)) 来初始化,其中 time(NULL) 返回当前时间的秒数。
2. 访问下一个点时,需要检查是否超出了迷宫范围或已经被访问过。
3. 为了打乱访问顺序,可以使用一个顺序数组 order,将数组中的元素打乱顺序。
4. 递归访问下一个点时,需要传入下一个点的坐标。
希望这个代码可以帮助到你!
阅读全文