c语言随机生成迷宫地图
时间: 2023-08-16 10:19:08 浏览: 250
VC++迷宫游戏,支持随机生成迷宫地图
好的,生成迷宫地图可以使用随机算法来实现。以下是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 10
#define COL 10
void init_maze(int maze[ROW][COL]) {
// 初始化迷宫
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
maze[i][j] = 1; // 1表示墙,0表示通路
}
}
}
void print_maze(int maze[ROW][COL]) {
// 打印迷宫
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (maze[i][j] == 1) {
printf("#");
} else {
printf(" ");
}
}
printf("\n");
}
}
void generate_maze(int maze[ROW][COL], int x, int y) {
// 以(x,y)为起点,随机生成迷宫
int dirs[4][2] = {{0,1}, {1,0}, {0,-1}, {-1,0}}; // 方向数组,用于随机选择方向
int rand_dir[4] = {0, 1, 2, 3}; // 随机方向数组,用于打乱方向数组
int temp, tx, ty;
for (int i = 0; i < 4; i++) { // 打乱方向数组
int r = rand() % 4;
temp = rand_dir[i];
rand_dir[i] = rand_dir[r];
rand_dir[r] = temp;
}
for (int i = 0; i < 4; i++) { // 遍历所有方向
int dx = dirs[rand_dir[i]][0];
int dy = dirs[rand_dir[i]][1];
tx = x + dx * 2;
ty = y + dy * 2;
if (tx >= 0 && tx < ROW && ty >= 0 && ty < COL && maze[tx][ty] == 1) { // 判断是否越界或已经访问过
maze[x + dx][y + dy] = 0; // 打通墙壁
maze[tx][ty] = 0;
generate_maze(maze, tx, ty); // 递归生成迷宫
}
}
}
int main() {
int maze[ROW][COL];
srand(time(NULL)); // 初始化随机数种子
init_maze(maze); // 初始化迷宫
maze[0][1] = 0; // 入口
maze[ROW-1][COL-2] = 0; // 出口
generate_maze(maze, 1, 1); // 从(1,1)开始生成迷宫
print_maze(maze); // 打印迷宫
return 0;
}
```
这个程序使用了递归算法来随机生成迷宫,具体实现可以参考代码注释。
阅读全文