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

项目截图:

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

mg.h

  1. #pragma once
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include <stdio.h>
  4. #include <graphics.h>
  5. #include <mmsystem.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8. #include <string.h>
  9. #include "conio.h"
  10. #pragma comment(lib,"winmm.lib")
  11.  
  12. //每一个格子的像素
  13. #define ELEM 20
  14. //界面的宽和高
  15. #define WINDOW_WIDTH 500
  16. #define WINDOW_HEIGHT 500
  17.  
  18. //枚举四个方向
  19. typedef enum DIR{ up = , down = , left = , right = }DIR;
  20.  
  21. //当前到的位置
  22. int cur_x, cur_y;
  23. //一共走的步数
  24. int total_count = ;
  25.  
  26. //初始化游戏
  27. void GameInit();
  28. //绘制游戏
  29. void GamePaint();
  30. //判断能不能走
  31. bool judge(int cur_x, int cur_y, char dir);
  32. //人工操作移动
  33. void move();
  34. //判断能否成功走出来
  35. bool judgeSuc(int,int);

main.cpp

  1. #include "mg.h"
  2.  
  3. //初始化地图
  4. //0表示没走过的点,1表示障碍,2表示当前在的位置,3表示已经走过的路径
  5. int map[WINDOW_HEIGHT / ELEM][WINDOW_WIDTH / ELEM] = { };
  6.  
  7. void main()
  8. {
  9. //初始化游戏
  10. GameInit();
  11. //以下是实现人工操作
  12. //while (1)
  13. //{
  14. // //如果没有键盘按下
  15. // while (!_kbhit())
  16. // {
  17. // GamePaint();
  18. // run(cur_x, cur_y);
  19. // }
  20. // move();
  21. //}
  22. system("pause");
  23. }
  24.  
  25. //初始化游戏界面,并初始化地图
  26. void GameInit()
  27. {
  28. //设置窗口大小
  29. initgraph(WINDOW_HEIGHT, WINDOW_WIDTH);
  30. //设置窗口颜色
  31. setbkcolor(LIGHTGRAY);
  32. //强制绘图,显示界面
  33. cleardevice();
  34.  
  35. //初始化时间种子,随机生成一个地图,并且判断地图能不能走出来
  36. srand(time());
  37. do
  38. {
  39. for (int i = ; i < WINDOW_HEIGHT / ELEM; i++)
  40. {
  41. for (int j = ; j < WINDOW_WIDTH / ELEM; j++)
  42. {
  43. int num = rand() % ;
  44. if (num < )
  45. map[i][j] = ;
  46. else
  47. map[i][j] = ;
  48. }
  49. }
  50. //左上角位置是人的初始位置
  51. map[][] = ;
  52. //右下角
  53. map[WINDOW_HEIGHT / ELEM - ][WINDOW_WIDTH / ELEM - ] = ;
  54. GamePaint();
  55. } while (judgeSuc(,) == false);//如果不能走出来则继续生成迷宫
  56. }
  57.  
  58. //绘制
  59. void GamePaint()
  60. {
  61. //按行绘制
  62. for (int y = ; y < WINDOW_HEIGHT / ELEM; y++)
  63. {
  64. for (int x = ; x < WINDOW_WIDTH / ELEM; x++)
  65. {
  66. //没有走过
  67. if (map[y][x] == )
  68. {
  69. //设置画笔颜色
  70. setcolor(RED);
  71. //设置填充颜色
  72. setfillcolor(DARKGRAY);
  73. //填充矩形
  74. fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  75. //画矩形
  76. rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  77. }
  78.  
  79. //障碍物
  80. if (map[y][x] == )
  81. {
  82. setcolor(RED);
  83. setfillcolor(BLACK);
  84. fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  85. rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  86. }
  87.  
  88. //当前位置
  89. if (map[y][x] == )
  90. {
  91. setcolor(RED);
  92. setfillcolor(RED);
  93. fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  94. rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  95. }
  96.  
  97. //已经走过的路径
  98. if (map[y][x] == )
  99. {
  100. setcolor(RED);
  101. setfillcolor(GREEN);
  102. fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  103. rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
  104. }
  105. }
  106. }
  107. }
  108.  
  109. //判断能不能走
  110. bool judge(int cur_x,int cur_y,char dir)
  111. {
  112. switch (dir)
  113. {
  114. case up:
  115. if (cur_y - < || map[cur_y - ][cur_x] == || map[cur_y - ][cur_x] == )
  116. {
  117. return false;
  118. }
  119. break;
  120. case down:
  121. if (cur_y + > WINDOW_HEIGHT / ELEM - || map[cur_y + ][cur_x] == || map[cur_y + ][cur_x] == )
  122. {
  123. return false;
  124. }
  125. break;
  126. case left:
  127. if (cur_x - < || map[cur_y][cur_x - ] == || map[cur_y][cur_x - ] == )
  128. {
  129. return false;
  130. }
  131. break;
  132. case right:
  133. if (cur_x + > WINDOW_HEIGHT / ELEM - || map[cur_y][cur_x + ] == || map[cur_y][cur_x + ] == )
  134. {
  135. return false;
  136. }
  137. break;
  138. }
  139.  
  140. return true;
  141. }
  142.  
  143. //判断地图能否走出去
  144. bool judgeSuc(int cur_x, int cur_y)
  145. {
  146. total_count++;//走一次步数加一
  147. map[cur_y][cur_x] = ;//把走过的标记
  148.  
  149. if (cur_x == WINDOW_WIDTH / ELEM - && cur_y == WINDOW_HEIGHT / ELEM - )
  150. {
  151. char res[];
  152. sprintf(res, "成功走出迷宫,一共走了%d步", total_count);
  153. MessageBoxA(,res, "提示",);
  154. //return true;
  155. return false;
  156. }
  157. else
  158. {
  159. //右下左上
  160. if (judge(cur_x, cur_y, right))
  161. {
  162. //下一个走到的位置设置为2
  163. map[cur_y][cur_x + ] = ;
  164. //绘制当前状态,并且等待100ms
  165. GamePaint();
  166. Sleep();
  167. //从下一个位置开始走
  168. judgeSuc(cur_x+, cur_y);
  169. //递归还原
  170. total_count--;
  171. }
  172.  
  173. if (judge(cur_x, cur_y, down))
  174. {
  175. map[cur_y + ][cur_x] = ;
  176. GamePaint();
  177. Sleep();
  178. judgeSuc(cur_x, cur_y+);
  179. total_count--;
  180. }
  181.  
  182. if (judge(cur_x, cur_y, left))
  183. {
  184. map[cur_y][cur_x - ] = ;
  185. map[cur_y][cur_x] = ;
  186. GamePaint();
  187. Sleep();
  188. judgeSuc(cur_x-, cur_y);
  189. total_count--;
  190. }
  191.  
  192. if (judge(cur_x, cur_y, up))
  193. {
  194. map[cur_y - ][cur_x] = ;
  195. map[cur_y][cur_x] = ;
  196. GamePaint();
  197. Sleep();
  198. judgeSuc(cur_x, cur_y-);
  199. total_count--;
  200. }
  201.  
  202. if (total_count == )
  203. {
  204. return false;
  205. }
  206. }
  207. }
  208.  
  209. //向各个方向移动
  210. void move()
  211. {
  212. //方向
  213. char dir;
  214. dir = _getch();
  215.  
  216. //各个方向判断
  217. switch (dir)
  218. {
  219. case up:
  220. if (judge(cur_x, cur_y, up))
  221. {
  222. map[cur_y - ][cur_x] = ;
  223. map[cur_y][cur_x] = ;
  224. cur_y -= ;
  225. }
  226. break;
  227. case down:
  228. if (judge(cur_x, cur_y, down))
  229. {
  230. map[cur_y + ][cur_x] = ;
  231. map[cur_y][cur_x] = ;
  232. cur_y += ;
  233. }
  234. break;
  235. case left:
  236. if (judge(cur_x, cur_y, left))
  237. {
  238. map[cur_y][cur_x - ] = ;
  239. map[cur_y][cur_x] = ;
  240. cur_x -= ;
  241. }
  242. break;
  243. case right:
  244. if (judge(cur_x, cur_y, right))
  245. {
  246. map[cur_y][cur_x + ] = ;
  247. map[cur_y][cur_x] = ;
  248. cur_x += ;
  249. }
  250. break;
  251. }
  252. }

6.C语言迷宫程序界面版的更多相关文章

  1. Hybrid App是如何实现网页语言与程序语言的混合?谁占主体?

    [编者按]本文作者@徐珂铭,一位看好Html5的移动互联网的从业人士.喜爱玩技术,会点JAVA.HTML及CSS,有自己的想法及姑且能表达想法的文字,因此有了自己的文章. 基于HTML5的Web Ap ...

  2. 通过反汇编C语言小程序学习Liunx汇编语言

    大家好!    我是来自山东师范大学的吴乐.    今天在<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...

  3. windows系统下c语言暂停程序

    原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { ...

  4. Linux下简单C语言小程序的反汇编分析

    韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOO ...

  5. C语言应用程序的内存图

    1.综述 c语言应用程序加载到内存,这时它所占据的内存分为四个区,分别为栈Stack,堆Heap,静态存储区Static Area,代码存储区Code Area,这四个区分别放置应用程序的不同部分,从 ...

  6. c语言小程序以及java生成注释文档方法

    c语言小程序:sizeof和strlen() sizeof运算符以字节为单位给出数据的大小,strlen()函数以字符为单位给出字符串的长度,字符和字节不是一回事. char类型用于存储字母和标点符号 ...

  7. C语言编程程序的内存如何布局

    重点关注以下内容: C语言程序在内存中各个段的组成 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过 ...

  8. C语言小程序——推箱子(窄字符和宽字符)

    C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...

  9. Linux C语言小程序

    Linux C语言小程序 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include & ...

随机推荐

  1. BZOJ 3129 [SDOI2013]方程 (拓展Lucas)

    题目大意:给定一个方程$X_{1}+X_{2}+X_{3}+X_{4}+...+X_{n}=M$,$\forall X_{i}<=A_{i} (i<=n1)$ $\forall X_{i} ...

  2. spring boot ---web应用开发-错误处理

    一.错误的处理 方法一:Spring Boot 将所有的错误默认映射到/error, 实现ErrorController @Controller @RequestMapping(value = &qu ...

  3. HTTP 文件共享服务器工具 - chfs

    CuteHttpFileServer/chfs是一个免费的.HTTP协议的文件共享服务器,使用浏览器可以快速访问.它具有以下特点: 单个文件,整个软件只有一个可执行程序,无配置文件等其他文件 跨平台运 ...

  4. 紫书 习题8-14 UVa 1616(二分+小数化分数+精度)

    参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html (1)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...

  5. 第一个JavaWeb工程

    这个工程主要用来研究log4j,所以就只有一个页面,希望以后慢慢进步. java动态生成网页主要使用servlet.把请求拦截下来,处理后返回结果. 这里创建的是一个maven工程. 结构如下:

  6. Mysql学习总结(26)——MySQL子查询

    mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询. 1.理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后.出现在from后 ...

  7. Camera Calibration 相机标定:原理简介(三)

    3 绝对圆锥曲线 在进一步了解相机标定前,有必要了解绝对圆锥曲线(Absolute Conic)这一概念. 对于一个3D空间的点x,其投影空间的坐标为:x~=[x1,x2,x3,x4]T.我们定义无穷 ...

  8. Effective C++ 11-17

    11.为须要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符. 显然,由于动态内存分配,绝对会有深浅拷贝的问题,要重写拷贝构造函数.使其为深拷贝,才干实现真正意义上的拷贝.这是我理解的关于要声明拷 ...

  9. [android]DES/3DES/AES加密方式

    DES 支持8位加密解密,3Des支持24位,Aes支持32位.3Des是Des算法做三次.位数的单位是字节byte.不是bits. 3Des是把24位分成3组.第一组八位用来加密,第二组8位用于解密 ...

  10. hdoj--5562--Clarke and food(模拟)

    Clarke and food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...