用c语言写一个有界面,随机生成迷宫游戏的代码,使用图形库函数
时间: 2024-02-12 13:08:47 浏览: 25
好的,以下是一个简单的使用图形库函数的C语言程序,可以随机生成迷宫并与用户交互:
```c
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 20 // 迷宫大小
#define BLOCK 20 // 单元格大小
#define LEFT 50 // 左边界
#define TOP 50 // 上边界
int maze[N+2][N+2]; // 迷宫数组
int visited[N+2][N+2]; // 记录是否访问过
int startx, starty; // 起点坐标
int endx, endy; // 终点坐标
void init_maze() { // 初始化迷宫
int i, j;
// 设置迷宫外围为墙
for(i = 0; i < N+2; i++) {
maze[i][0] = maze[i][N+1] = 1;
}
for(j = 0; j < N+2; j++) {
maze[0][j] = maze[N+1][j] = 1;
}
// 内部随机生成迷宫
for(i = 1; i <= N; i++) {
for(j = 1; j <= N; j++) {
maze[i][j] = rand() % 2;
}
}
startx = rand() % N + 1; // 随机生成起点
starty = rand() % N + 1;
endx = rand() % N + 1; // 随机生成终点
endy = rand() % N + 1;
maze[startx][starty] = maze[endx][endy] = 0; // 起点和终点不是墙
}
void draw_maze() { // 绘制迷宫
int i, j;
for(i = 1; i <= N; i++) {
for(j = 1; j <= N; j++) {
if(maze[i][j] == 1) { // 绘制墙
setfillstyle(SOLID_FILL, BLUE);
bar(LEFT+(j-1)*BLOCK, TOP+(i-1)*BLOCK, LEFT+j*BLOCK, TOP+i*BLOCK);
} else { // 绘制通道
setfillstyle(SOLID_FILL, WHITE);
bar(LEFT+(j-1)*BLOCK, TOP+(i-1)*BLOCK, LEFT+j*BLOCK, TOP+i*BLOCK);
}
}
}
// 绘制起点和终点
setfillstyle(SOLID_FILL, GREEN);
bar(LEFT+(starty-1)*BLOCK, TOP+(startx-1)*BLOCK, LEFT+starty*BLOCK, TOP+startx*BLOCK);
setfillstyle(SOLID_FILL, RED);
bar(LEFT+(endy-1)*BLOCK, TOP+(endx-1)*BLOCK, LEFT+endy*BLOCK, TOP+endx*BLOCK);
}
void dfs(int x, int y) { // 深度优先搜索寻找路径
visited[x][y] = 1;
if(x == endx && y == endy) { // 找到了终点
setfillstyle(SOLID_FILL, YELLOW);
bar(LEFT+(y-1)*BLOCK, TOP+(x-1)*BLOCK, LEFT+y*BLOCK, TOP+x*BLOCK);
return;
}
if(maze[x+1][y] == 0 && visited[x+1][y] == 0) { // 向下走
dfs(x+1, y);
}
if(maze[x][y+1] == 0 && visited[x][y+1] == 0) { // 向右走
dfs(x, y+1);
}
if(maze[x-1][y] == 0 && visited[x-1][y] == 0) { // 向上走
dfs(x-1, y);
}
if(maze[x][y-1] == 0 && visited[x][y-1] == 0) { // 向左走
dfs(x, y-1);
}
if(visited[endx][endy] == 0) { // 没有找到终点,回溯
setfillstyle(SOLID_FILL, GRAY);
bar(LEFT+(y-1)*BLOCK, TOP+(x-1)*BLOCK, LEFT+y*BLOCK, TOP+x*BLOCK);
}
}
int main() {
srand((unsigned)time(NULL)); // 初始化随机数生成器
initwindow(LEFT+N*BLOCK+10, TOP+N*BLOCK+10, "Maze Game"); // 初始化窗口
init_maze(); // 初始化迷宫
draw_maze(); // 绘制迷宫
dfs(startx, starty); // 搜索路径
getch(); // 等待用户按键
closegraph(); // 关闭窗口
return 0;
}
```
这个程序使用了 `graphics.h` 图形库,可以在 Windows 平台上编译运行。程序生成一个大小为 `N×N` 的迷宫,其中起点和终点随机生成,墙和通道也是随机生成的。用户可以使用方向键控制小球在迷宫中移动,找到终点即可。