#include "labyrith.h"
int Wall[22][22]; // 墙壁
int entranceX; // 入口
int entranceY;
int exitX; // 出口
int exitY;
// 默认构造函数
FrameWindow::FrameWindow()
{
initgraph(960, 660); // 建立图形界面
setbkcolor(LIGHTGREEN); // 设置背景颜色为亮绿色
direct = 0; // 设置 direct 的初值为 0
control = 0; // 默认控制权为 0
loadimage(&img, "res\\bk.jpg", 29, 29); // 加载图片
}
// 运行控制
void FrameWindow::Run()
{
cleardevice(); // 清屏
NewBackground(); // 绘制新背景图
DrawSome(); // 绘制些神马
control = 0; // 首先将函数对程序程序的控制权置 0
direct = 0; // 设置 direct 的初值为 0
// 主循环
while(1)
{
if(kbhit()) // 检测按键
{
direct = getch(); // 从按键获取输入
mciSendString("play res\\key.wav", NULL, 0, NULL); // 按键声
if( direct == 115 && control == 0) // s 的键值为 115
{
StartDrawLabyrith(); // 开始绘制迷宫
}
if(direct == 101 && control == 2) // e 的键值为 101
{
SetLabyrith(); // 设置迷宫的入口和出口
}
if(direct == 100 && control == 3) // d 的键值为 100
{
control = -1; // 将 control 设置为 -1 的目的是
// 让程序从 Demo() 回到 Run() 时只响应刷新操作
Demo(); // 寻找路径并演示
}
if(direct == 63 && (control == 0 || control == -1)) // 按 F5 刷新
{
break;
}
}
else
{
Sleep(10);
}
}
}
// 绘制新背景
void FrameWindow::NewBackground()
{
float H, S, L; // 定义 HSL 颜色模型的 3 个变量
H = 110; // 色相
S = 1; // 饱和度
L = 0.4522f; // 亮度
for(int y = 0; y != 660; ++y) // 绘制迷宫背景颜色
{
L += 0.000125f;
S -= 0.00125f;
setcolor(HSLtoRGB(H, S, L));
line(0, y, 660, y);
}
H = 50; // 色相
S = -3.2555f; // 饱和度
L = 0.525617f; // 亮度
for(y = 0; y != 660; ++y) // 绘制提示信息部分背景
{
L += 0.000000085f;
S -= 0.0015f;
setcolor(HSLtoRGB(H, S, L));
line(660, y, 960, y);
}
}
// 绘制些神马
void FrameWindow::DrawSome()
{
setcolor(LIGHTRED);
for(int i = 0; i < 22; ++i)
{
// 外围墙壁在 Wall 数组中的位置置 1
Wall[0][i] = 1;
Wall[i][0] = 1;
Wall[21][i] = 1;
Wall[i][21] = 1;
// 绘制外围墙壁
putimage(0 * 30 + 1, i * 30 + 1, &img);
putimage(i * 30 + 1, 0 * 30 + 1, &img);
putimage(631, i * 30 + 1, &img);
putimage(i * 30 + 1, 631, &img);
putimage(931, i * 30 + 1, &img);
line(i * 30, 0, i * 30, 660); // 绘制格子线
line(0, i * 30, 660, i * 30); // 绘制格子线
}
for(i = 0; i < 10; ++i) // 绘制提示区域外围框
{
putimage(i * 30 + 661, 1, &img);
putimage(i * 30 + 661, 631, &img);
}
for(i = 1; i <= 20; ++i) // 其它的 Wall 数组的值暂时置 0
{
for(int j = 1; j <= 20; ++j)
{
Wall[i][j] = 0;
}
}
// 绘制提示信息
RECT r = {710, 40, 900, 300};
setbkmode(TRANSPARENT); // 设置输出文字背景模式为透明
setcolor(BLUE); // 设置输出文字颜色
setfont(15, 0, "宋体");
// 输出提示信息
drawtext("游戏操作介绍:\n\n按键 S:绘制迷宫。\n鼠标左键绘制墙壁,\
鼠标右键擦除墙壁。\n\n按键 E:设置迷宫的入口和出口。\n使用鼠标\
左键来设置入口和出口,右键取消设置。\n\n按键 D:进行迷宫的探索\
,寻找从入口到出口的最短路径,由小球来演示从入口到出口的路径。",
&r, DT_WORDBREAK);
setbkmode(OPAQUE); // 恢复默认填充颜色
// 输出提示信息
outtextxy(730, 400, "迷宫状态: ");
outtextxy(810, 400, "等待绘制");
outtextxy(750, 500, "按 F5 重新开始");
}
// 开始绘制迷宫
void FrameWindow::StartDrawLabyrith()
{
int x = 0, y = 0; // 标记鼠标的坐标使用
outtextxy(810, 400, "正在绘制"); // 修改迷宫状态
FlushMouseMsgBuffer(); // 清空鼠标消息缓冲区
// 主循环
while(1)
{
if(kbhit())
{
direct = getch(); // 获取按键信息
mciSendString("play res\\key.wav", NULL, 0, NULL); // 按键声
if(direct == 101) // e 的键值为 101
{
control = 2; // 控制权值为 2
break;
}
else if(direct == 63) // F5 刷新
{
break;
}
}
else if(MouseHit())
{
msg = GetMouseMsg(); // 获取鼠标消息
x = msg.x / 30; // 获取鼠标所在格子在 Wall 中的位置
y = msg.y / 30;
if(msg.x > 30 && msg.x < 630 && msg.y > 30 && msg.y < 630) // 只能在这个区域里面响应鼠标消息
{
switch(msg.uMsg) // 消息的种类
{
case WM_LBUTTONDOWN: // 左键按下
{
Wall[y][x] = 1; // y 对应行, x 对应列, 将对应的位置置 1
putimage(x * 30 + 1, y * 30 +1, &img); // 放置图片
}
break;
case WM_RBUTTONDOWN: // 右键按下
{
Wall[y][x] = 0; // y 对应行, x 对应列, 将对应的位置置 0
PrintGrid(x * 30, y * 30); // 重新绘制这个格子
setcolor(BLUE );
}
break;
default:break;
}
}
}
else
{
Sleep(10);
}
}
}
// 设置入口和出口
void FrameWindow::SetLabyrith()
{
int x = 0, y = 0; // 临时参数
entranceX = -1; // 入口
entranceY = -1;
exitX = -1; // 出口
exitY = -1;
outtextxy(810, 400, "设置入口"); // 提示信息
// 主循环
while(1)
{
if(kbhit()) // 键盘消息
{
direct = getch(); // 获取消息
mciSendString("play res\\key.wav", NULL, 0, NULL); // 按键声
if(direct == 100 && entranceX != -1 && exitX != -1) // 如果出入口都设置好, 按 d 键退出设置模式
{
control = 3; // 控制权变为 3, 回到 Run 中由其判断由谁控制程序;
break;
}
else if(direct == 63) // F5 刷新
{
control = 0;
break;
}
}
else if(MouseHit())
{
msg = GetMouseMsg(); // 获取鼠标消息
x = msg.x / 30; // 获取鼠标所在格子在 Wall 中的位置
y = msg.y / 30;
if(entranceX != -1 && exitX != -1) // 完成设置
{
outtextxy(810, 400, "设置完成");
}
if(msg.x > 30 && msg.x < 630 && msg.y > 30 && msg.y < 630) // 只能在这个区域里面响应鼠标消息
{
if(Wall[y][x] == 0 && msg.uMsg == WM_LBUTTONDOWN) // 如果这个位置不是墙壁, 并且按下左键
{
if(entranceX == -1 && (exitX != x || exitY != y)) // 确保此处没被设置
{
entranceX = x; // 入口位置
entranceY = y;
Wall[y][x] = 1;
outtextxy(x * 30 + 8, y * 30 + 10,_T("In")); // 将此处标记为 In
if(exitX == -1) // 若此时还未设置出口
{
outtextxy(810, 400, "设置出口"); // 改变迷宫状态
}
}
else if(exitX == -1 && (entranceX != x || entranceY != y)) // 此处未设置出口且不是入口位置
{
exitX = x; // 出口位置
exitY = y;
Wall[y][x] = 1;
outtextxy(x * 30 + 4, y * 30 + 8,_T("Out")); // 将此处标记为 Out
if(entranceX == -1) // 若此时还未设置入口
{
outtextxy(810, 400, "设置入口"); // 改变迷宫状态
}
}
}
else if(Wall[y][x] == 1 && msg.uMsg == WM_RBUTTONDOWN) // 如果这个位置不是墙壁, 并且按下右键
{
if(x == entranceX && y == entranceY) // 取消设置入口
{
entranceX = -1;
entranceY = -1;
Wall[y][x] = 0;
outtextxy(810, 400, "设置入口"); // 改变迷宫状态
PrintGrid(x * 30, y * 30); // 从新绘制格子
setcolor(BLUE); // 恢复原线条颜色
}
else if(x == exitX && y == exitY) // 取消设置出口
{
exitX = -1;
exitY = -1;
Wall[y][x] = 0;
outtextxy(810, 400, "设置出口"); // 改变迷宫状态
PrintGrid(x * 30, y * 30); // 重新绘制格子
setcolor(BLUE); // 恢复原线条颜色
}
}
}
}
}
}
// 探索迷宫路径, 并演示成果
void FrameWindow::Demo()
{
Queue qu;
Node node;
int zx[4] = {1,0,-1,0},zy[4] = {0,1,0,-1}; // 四个方向
int find = 0; // find 值为 1 表示结束寻找路径
int x = 0, y = 0; // 临时参数 x, y
node.x = entranceX; // 入口位置
没有合适的资源?快使用搜索试试~ 我知道了~
【C 程序设计】迷宫2(支持自定义迷宫并求最短路径:完整源码+详细说明+可执行文件)
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共12个文件
h:2个
cpp:2个
wav:1个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 160 浏览量
2024-07-10
17:28:12
上传
评论
收藏 73KB RAR 举报
温馨提示
【C 程序设计】迷宫2(支持自定义迷宫并求最短路径:完整源码+详细说明+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【C 程序设计】迷宫2(支持自定义迷宫并求最短路径:完整源码+详细说明+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【C 程序设计】迷宫2(支持自定义迷宫并求最短路径:完整源码+详细说明+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【C 程序设计】迷宫2(支持自定义迷宫并求最短路径:完整源码+详细说明+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/EXE.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 12 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/e5770d8a5f8f42909cdb3fb0d0493aed_qq_30247949.jpg!1)
猿来如此yyy
- 粉丝: 6927
- 资源: 557
![benefits](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-1.c8e153b4.png)
下载权益
![privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-2.ec46750a.png)
C知道特权
![article](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-3.fc5e5fb6.png)
VIP文章
![course-privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-4.320a6894.png)
课程特权
![rights](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-icon.fe0226a8.png)
开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)