写迷宫程序首先需要安装图形库easyX 安装地址链接:https://pan.baidu.com/s/1qZwFn3m 密码:ozge

项目截图:

//左上角是七点,右下角是终点,蓝色表示的是走过的路径,红色表示的是当前位置,采用的是深度优先遍历

6.C语言迷宫程序界面版-LMLPHP

mg.h

 #pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h>
#include <mmsystem.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "conio.h"
#pragma comment(lib,"winmm.lib") //每一个格子的像素
#define ELEM 20
//界面的宽和高
#define WINDOW_WIDTH 500
#define WINDOW_HEIGHT 500 //枚举四个方向
typedef enum DIR{ up = , down = , left = , right = }DIR; //当前到的位置
int cur_x, cur_y;
//一共走的步数
int total_count = ; //初始化游戏
void GameInit();
//绘制游戏
void GamePaint();
//判断能不能走
bool judge(int cur_x, int cur_y, char dir);
//人工操作移动
void move();
//判断能否成功走出来
bool judgeSuc(int,int);

main.cpp

 #include "mg.h"

 //初始化地图
//0表示没走过的点,1表示障碍,2表示当前在的位置,3表示已经走过的路径
int map[WINDOW_HEIGHT / ELEM][WINDOW_WIDTH / ELEM] = { }; void main()
{
//初始化游戏
GameInit();
//以下是实现人工操作
//while (1)
//{
// //如果没有键盘按下
// while (!_kbhit())
// {
// GamePaint();
// run(cur_x, cur_y);
// }
// move();
//}
system("pause");
} //初始化游戏界面,并初始化地图
void GameInit()
{
//设置窗口大小
initgraph(WINDOW_HEIGHT, WINDOW_WIDTH);
//设置窗口颜色
setbkcolor(LIGHTGRAY);
//强制绘图,显示界面
cleardevice(); //初始化时间种子,随机生成一个地图,并且判断地图能不能走出来
srand(time());
do
{
for (int i = ; i < WINDOW_HEIGHT / ELEM; i++)
{
for (int j = ; j < WINDOW_WIDTH / ELEM; j++)
{
int num = rand() % ;
if (num < )
map[i][j] = ;
else
map[i][j] = ;
}
}
//左上角位置是人的初始位置
map[][] = ;
//右下角
map[WINDOW_HEIGHT / ELEM - ][WINDOW_WIDTH / ELEM - ] = ;
GamePaint();
} while (judgeSuc(,) == false);//如果不能走出来则继续生成迷宫
} //绘制
void GamePaint()
{
//按行绘制
for (int y = ; y < WINDOW_HEIGHT / ELEM; y++)
{
for (int x = ; x < WINDOW_WIDTH / ELEM; x++)
{
//没有走过
if (map[y][x] == )
{
//设置画笔颜色
setcolor(RED);
//设置填充颜色
setfillcolor(DARKGRAY);
//填充矩形
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
//画矩形
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
} //障碍物
if (map[y][x] == )
{
setcolor(RED);
setfillcolor(BLACK);
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
} //当前位置
if (map[y][x] == )
{
setcolor(RED);
setfillcolor(RED);
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
} //已经走过的路径
if (map[y][x] == )
{
setcolor(RED);
setfillcolor(GREEN);
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
}
}
}
} //判断能不能走
bool judge(int cur_x,int cur_y,char dir)
{
switch (dir)
{
case up:
if (cur_y - < || map[cur_y - ][cur_x] == || map[cur_y - ][cur_x] == )
{
return false;
}
break;
case down:
if (cur_y + > WINDOW_HEIGHT / ELEM - || map[cur_y + ][cur_x] == || map[cur_y + ][cur_x] == )
{
return false;
}
break;
case left:
if (cur_x - < || map[cur_y][cur_x - ] == || map[cur_y][cur_x - ] == )
{
return false;
}
break;
case right:
if (cur_x + > WINDOW_HEIGHT / ELEM - || map[cur_y][cur_x + ] == || map[cur_y][cur_x + ] == )
{
return false;
}
break;
} return true;
} //判断地图能否走出去
bool judgeSuc(int cur_x, int cur_y)
{
total_count++;//走一次步数加一
map[cur_y][cur_x] = ;//把走过的标记 if (cur_x == WINDOW_WIDTH / ELEM - && cur_y == WINDOW_HEIGHT / ELEM - )
{
char res[];
sprintf(res, "成功走出迷宫,一共走了%d步", total_count);
MessageBoxA(,res, "提示",);
//return true;
return false;
}
else
{
//右下左上
if (judge(cur_x, cur_y, right))
{
//下一个走到的位置设置为2
map[cur_y][cur_x + ] = ;
//绘制当前状态,并且等待100ms
GamePaint();
Sleep();
//从下一个位置开始走
judgeSuc(cur_x+, cur_y);
//递归还原
total_count--;
} if (judge(cur_x, cur_y, down))
{
map[cur_y + ][cur_x] = ;
GamePaint();
Sleep();
judgeSuc(cur_x, cur_y+);
total_count--;
} if (judge(cur_x, cur_y, left))
{
map[cur_y][cur_x - ] = ;
map[cur_y][cur_x] = ;
GamePaint();
Sleep();
judgeSuc(cur_x-, cur_y);
total_count--;
} if (judge(cur_x, cur_y, up))
{
map[cur_y - ][cur_x] = ;
map[cur_y][cur_x] = ;
GamePaint();
Sleep();
judgeSuc(cur_x, cur_y-);
total_count--;
} if (total_count == )
{
return false;
}
}
} //向各个方向移动
void move()
{
//方向
char dir;
dir = _getch(); //各个方向判断
switch (dir)
{
case up:
if (judge(cur_x, cur_y, up))
{
map[cur_y - ][cur_x] = ;
map[cur_y][cur_x] = ;
cur_y -= ;
}
break;
case down:
if (judge(cur_x, cur_y, down))
{
map[cur_y + ][cur_x] = ;
map[cur_y][cur_x] = ;
cur_y += ;
}
break;
case left:
if (judge(cur_x, cur_y, left))
{
map[cur_y][cur_x - ] = ;
map[cur_y][cur_x] = ;
cur_x -= ;
}
break;
case right:
if (judge(cur_x, cur_y, right))
{
map[cur_y][cur_x + ] = ;
map[cur_y][cur_x] = ;
cur_x += ;
}
break;
}
}
05-26 09:14