下载资源后端资源详情
c语言支持自己创建迷宫,并求解最短路径.zip
大小:87.02KB
价格:25积分
下载量:0
评分:
5.0
上传者:xlfhuahua
更新日期:2024-07-23

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

资源文件列表(大概)

文件名
大小
c语言支持自己创建迷宫,并求解最短路径/
-
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/
-
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/
-
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/
-
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/labyrinth.cpp
10.71KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/labyrith.h
1.81KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/main.cpp
305B
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/
-
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/bk.jpg
12.23KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/key.wav
15.22KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/resource.h
456B
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/Script1.aps
32.84KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/Script1.rc
1.68KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/res/主界面.ico
2.19KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/迷宫2.dsp
4.43KB
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/迷宫2.dsw
535B
c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/c语言支持自己创建迷宫,并求解最短路径/迷宫2/迷宫2.exe
120KB
c语言支持自己创建迷宫,并求解最短路径/新建文件夹/
-

资源内容介绍

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 的初值为 0control = 0;// 默认控制权为 0 loadimage(&img, "res\\bk.jpg", 29, 29);// 加载图片}// 运行控制void FrameWindow::Run(){cleardevice();// 清屏NewBackground();// 绘制新背景图DrawSome();// 绘制些神马control = 0;// 首先将函数对程序程序的控制权置 0direct = 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 对应列, 将对应的位置置 1putimage(x * 30 + 1, y * 30 +1, &img);// 放置图片}break;case WM_RBUTTONDOWN:// 右键按下{Wall[y][x] = 0;// y 对应行, x 对应列, 将对应的位置置 0PrintGrid(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"));// 将此处标记为 Outif(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, ynode.x = entranceX;// 入口位置

用户评论 (0)

发表评论

captcha