C语言随机迷宫生成程序:代码示例及详解
C语言随机迷宫生成程序:代码示例及详解
本文将使用C语言编写一个程序,生成一个随机迷宫并输出结果。
代码示例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIDTH 30
#define HEIGHT 20
typedef enum {
WALL,
PATH
} CellType;
void generateMaze(CellType maze[][WIDTH]) {
// 初始化迷宫为墙
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
maze[i][j] = WALL;
}
}
// 使用随机数生成路径
srand(time(NULL));
int startX = rand() % (WIDTH - 2) + 1;
int startY = rand() % (HEIGHT - 2) + 1;
maze[startY][startX] = PATH;
while (startX > 0 && startX < WIDTH - 1 && startY > 0 && startY < HEIGHT - 1) {
int direction = rand() % 4; // 随机选择四个方向之一
switch (direction) {
case 0: // 上
maze[startY - 1][startX] = PATH;
startY--;
break;
case 1: // 下
maze[startY + 1][startX] = PATH;
startY++;
break;
case 2: // 左
maze[startY][startX - 1] = PATH;
startX--;
break;
case 3: // 右
maze[startY][startX + 1] = PATH;
startX++;
break;
}
}
}
void printMaze(CellType maze[][WIDTH]) {
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (maze[i][j] == WALL) {
printf("#");
} else {
printf(" ");
}
}
printf("\n");
}
}
int main() {
CellType maze[HEIGHT][WIDTH];
generateMaze(maze);
printMaze(maze);
return 0;
}
代码解释
-
迷宫定义:
- 使用
CellType枚举类型来表示迷宫中的单元格类型:WALL代表墙,PATH代表路径。 - 使用二维数组
maze来存储迷宫信息,WIDTH和HEIGHT宏定义了迷宫的宽度和高度。
- 使用
-
生成迷宫:
generateMaze函数负责生成随机迷宫。- 初始化迷宫为全墙。
- 随机选择一个起始点,并将其设为路径。
- 从起始点开始,随机选择四个方向之一,并将其相邻单元格设为路径,直到到达迷宫边界为止。
-
输出迷宫:
printMaze函数负责输出生成的迷宫。- 遍历迷宫数组,如果单元格为墙,输出
#,否则输出空格。
-
主函数:
- 定义
maze数组来存储迷宫信息。 - 调用
generateMaze函数生成迷宫。 - 调用
printMaze函数输出迷宫。
- 定义
程序运行结果
程序运行后会在控制台输出一个随机生成的迷宫。墙用 # 表示,路径用空格表示。每次运行程序都会生成不同的迷宫。
总结
该程序使用简单的随机数生成算法和二维数组来实现随机迷宫的生成。通过定义枚举类型、随机选择方向、并不断扩展路径,最终生成一个随机形状的迷宫。
您可以根据需要修改 WIDTH 和 HEIGHT 宏定义来调整迷宫的尺寸。
希望本文能帮助您理解C语言随机迷宫生成程序的实现原理。
原文地址: https://www.cveoy.top/t/topic/jdQ 著作权归作者所有。请勿转载和采集!