首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

c语言支持自己创建迷宫,并求解最短路径

后端 87.02KB 49 需要积分: 1
立即下载

资源介绍:

c语言支持自己创建迷宫,并求解最短路径
#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语言支持自己创建迷宫,并求解最短路径.zip 大约有18个文件
  1. c语言支持自己创建迷宫,并求解最短路径/
  2. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/
  3. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/
  4. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/
  5. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/labyrinth.cpp 10.71KB
  6. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/labyrith.h 1.81KB
  7. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/main.cpp 305B
  8. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/
  9. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/bk.jpg 12.23KB
  10. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/key.wav 15.22KB
  11. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/resource.h 456B
  12. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/Script1.aps 32.84KB
  13. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/Script1.rc 1.68KB
  14. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/主界面.ico 2.19KB
  15. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/迷宫2.dsp 4.43KB
  16. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/迷宫2.dsw 535B
  17. c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/迷宫2.exe 120KB
  18. c语言支持自己创建迷宫,并求解最短路径/新建文件夹/
0评论
提交 加载更多评论
其他资源 c语言种地要浇水游戏源码
c语言种地要浇水游戏源码
小米AX9000解锁SSH所需资源文件
小米AX9000解锁SSH所需资源文件
Microsoft Visual Studio Installer Projects(2017\2019\2022)
Microsoft Visual Studio Installer Projects(2017\2019\2022),InstallerProjects.vsix下载 Microsoft Visual Studio Installer Projects
TA-Lib-0.4.29-cp312-cp312-win-amd64
python3.12的TA_Lib wheel文件 用于股票指标计算 MA MACD 等指标计算 兼容python3.12版本 下载即可使用
111111111111111111111111111111
111111111111111111111111111111
电赛试题,从1994-2023年整理
本文件为整理所得,电赛历年来试题,从1994-2023年。可以练习往年电赛题目,来进行备赛全国大学生电子设计大赛,提高团队合作能力和个人能力水平,更能提高水平。
电赛试题,从1994-2023年整理
基于C# winform的数据采集控件Chart的使用
该程序采用c# winform编写 1 利用控件Chart演示了采集数据显示功能 2 只需更改为自己的数据即可使用 3 软件功能,数据采集,停止采集,隐藏曲线
fpga串口通信工具软件,这是一个cyclone iv e系列fpga的串口工具
fpga串口通信工具软件,这是一个cyclone iv e系列fpga的串口工具