写迷宫程序首先需要安装图形库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 = 72, down = 80, left = 75, right = 77}DIR;
20
21 //当前到的位置
22 int cur_x, cur_y;
23 //一共走的步数
24 int total_count = 0;
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] = { 0 };
  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(0));
 37     do
 38     {
 39         for (int i = 0; i < WINDOW_HEIGHT / ELEM; i++)
 40         {
 41             for (int j = 0; j < WINDOW_WIDTH / ELEM; j++)
 42             {
 43                 int num = rand() % 10;
 44                 if (num < 7)
 45                     map[i][j] = 0;
 46                 else
 47                     map[i][j] = 1;
 48             }
 49         }
 50         //左上角位置是人的初始位置
 51         map[0][0] = 2;
 52         //右下角
 53         map[WINDOW_HEIGHT / ELEM - 1][WINDOW_WIDTH / ELEM - 1] = 0;
 54         GamePaint();
 55     } while (judgeSuc(0,0) == false);//如果不能走出来则继续生成迷宫
 56 }
 57
 58 //绘制
 59 void GamePaint()
 60 {
 61     //按行绘制
 62     for (int y = 0; y < WINDOW_HEIGHT / ELEM; y++)
 63     {
 64         for (int x = 0; x < WINDOW_WIDTH / ELEM; x++)
 65         {
 66             //没有走过
 67             if (map[y][x] == 0 )
 68             {
 69                 //设置画笔颜色
 70                 setcolor(RED);
 71                 //设置填充颜色
 72                 setfillcolor(DARKGRAY);
 73                 //填充矩形
 74                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 75                 //画矩形
 76                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 77             }
 78
 79             //障碍物
 80             if (map[y][x] == 1)
 81             {
 82                 setcolor(RED);
 83                 setfillcolor(BLACK);
 84                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 85                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 86             }
 87
 88             //当前位置
 89             if (map[y][x] == 2)
 90             {
 91                 setcolor(RED);
 92                 setfillcolor(RED);
 93                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 94                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
 95             }
 96
 97             //已经走过的路径
 98             if (map[y][x] == 3)
 99             {
100                 setcolor(RED);
101                 setfillcolor(GREEN);
102                 fillrectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*ELEM);
103                 rectangle(x*ELEM, y*ELEM, (x + 1)*ELEM, (y + 1)*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 - 1 < 0 || map[cur_y - 1][cur_x] == 1 || map[cur_y - 1][cur_x] == 3)
116         {
117             return false;
118         }
119         break;
120     case down:
121         if (cur_y + 1 > WINDOW_HEIGHT / ELEM - 1 || map[cur_y + 1][cur_x] == 1 || map[cur_y + 1][cur_x] == 3)
122         {
123             return false;
124         }
125         break;
126     case left:
127         if (cur_x - 1 < 0 || map[cur_y][cur_x - 1] == 1 || map[cur_y][cur_x - 1] == 3)
128         {
129             return false;
130         }
131         break;
132     case right:
133         if (cur_x + 1 >  WINDOW_HEIGHT / ELEM - 1 || map[cur_y][cur_x + 1] == 1 || map[cur_y][cur_x + 1] == 3)
134         {
135             return false;
136         }
137         break;
138     }
139
140     return true;
141 }
142
143
144 //判断地图能否走出去
145 bool judgeSuc(int cur_x, int cur_y)
146 {
147     total_count++;//走一次步数加一
148     map[cur_y][cur_x] = 3;//把走过的标记
149
150     if (cur_x == WINDOW_WIDTH / ELEM - 1 && cur_y == WINDOW_HEIGHT / ELEM - 1)
151     {
152         char res[100];
153         sprintf(res, "成功走出迷宫,一共走了%d步", total_count);
154         MessageBoxA(0,res, "提示",0);
155         //return true;
156         return false;
157     }
158     else
159     {
160         //右下左上
161         if (judge(cur_x, cur_y, right))
162         {
163             //下一个走到的位置设置为2
164             map[cur_y][cur_x + 1] = 2;
165             //绘制当前状态,并且等待100ms
166             GamePaint();
167             Sleep(100);
168             //从下一个位置开始走
169             judgeSuc(cur_x+1, cur_y);
170             //递归还原
171             total_count--;
172         }
173
174         if (judge(cur_x, cur_y, down))
175         {
176             map[cur_y + 1][cur_x] = 2;
177             GamePaint();
178             Sleep(100);
179             judgeSuc(cur_x, cur_y+1);
180             total_count--;
181         }
182
183         if (judge(cur_x, cur_y, left))
184         {
185             map[cur_y][cur_x - 1] = 2;
186             map[cur_y][cur_x] = 0;
187             GamePaint();
188             Sleep(100);
189             judgeSuc(cur_x-1, cur_y);
190             total_count--;
191         }
192
193         if (judge(cur_x, cur_y, up))
194         {
195             map[cur_y - 1][cur_x] = 2;
196             map[cur_y][cur_x] = 0;
197             GamePaint();
198             Sleep(100);
199             judgeSuc(cur_x, cur_y-1);
200             total_count--;
201         }
202
203         if (total_count == 1)
204         {
205             return false;
206         }
207     }
208 }
209
210 //向各个方向移动
211 void move()
212 {
213     //方向
214     char dir;
215     dir = _getch();
216
217     //各个方向判断
218     switch (dir)
219     {
220     case up:
221         if (judge(cur_x, cur_y, up))
222         {
223             map[cur_y - 1][cur_x] = 2;
224             map[cur_y][cur_x] = 0;
225             cur_y -= 1;
226         }
227         break;
228     case down:
229         if (judge(cur_x, cur_y, down))
230         {
231             map[cur_y + 1][cur_x] = 2;
232             map[cur_y][cur_x] = 0;
233             cur_y += 1;
234         }
235         break;
236     case left:
237         if (judge(cur_x, cur_y, left))
238         {
239             map[cur_y][cur_x - 1] = 2;
240             map[cur_y][cur_x] = 0;
241             cur_x -= 1;
242         }
243         break;
244     case right:
245         if (judge(cur_x, cur_y, right))
246         {
247             map[cur_y][cur_x + 1] = 2;
248             map[cur_y][cur_x] = 0;
249             cur_x += 1;
250         }
251         break;
252     }
253 }

转载于:https://www.cnblogs.com/xiaochi/p/8297707.html

6.C语言迷宫程序界面版相关推荐

  1. c语言制作贪吃小白入门,小白入门——easyx界面版“贪吃蛇”的C语言实现(详细)...

    小白入门--easyx界面版"贪吃蛇"的C语言实现(详细) 作者:顽石 前言:C语言初学者都是在控制台上开发一些小游戏什么,由于没有界面(比如图片.音乐,不能做出拥有自己风格的程序 ...

  2. 用栈、回溯算法设计迷宫程序

    目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...

  3. A - 小C语言--词法分析程序

    Description 小C语言文法 <程序>→<main关键字>(){<声明序列><语句序列>} <声明序列>→<声明序列>& ...

  4. c语言迷宫求解毕业设计,毕业设计(论文)-基于Windows平台C语言实现迷宫游戏的设计.doc...

    基于Windows平台C语言实现迷宫游戏的设计 摘 要 随着科技的日益发展,计算机信息知识越来越被人们所认知和使用,在当今知识爆炸的时代计算机毫无疑问成为人们常用的日常工具,而Windows和C语言都 ...

  5. 做程序界中的死神,锻造合适的斩魂刀

    标题解读:标题中的死神,是源自<死神>动漫里面的角色,斩魂刀是死神的武器,始解是斩魂刀的初始解放形态,卐解是斩魂刀的觉醒解放形态,也是死神的大招.意旨做程序界中程序员的佼佼者,一步一步最终 ...

  6. 做程序界的死神,获取自己的斩魂刀

    标题解读:标题中的死神,是源自<死神>动漫里面的角色,斩魂刀是死神的武器,始解是斩魂刀的初始解放形态,卐解是斩魂刀的觉醒解放形态,也是死神的大招.意旨做程序界中程序员的佼佼者,一步一步最终 ...

  7. 程序界的高手传奇(转)

    程序界的高手传奇(转)[@more@] (1)MIT BBS上说微软电话面试的一道题就是"Who do you think is the best coder, and why?" ...

  8. 做程序界中的死神,提升斩魂刀

    标题解读:标题中的死神,是源自<死神>动漫里面的角色,斩魂刀是死神的武器,始解是斩魂刀的初始解放形态,卐解是斩魂刀的觉醒解放形态,也是死神的大招.意旨做程序界中程序员的佼佼者,一步一步最终 ...

  9. c语言笔试程序改错题,C语言笔试--程序改错题.doc

    C语言笔试--程序改错题 铜尖刮佛烁休凹汝宰或贷呵茎丑傅汞访沾犹扯视自女垂桶癌苞详阴疾澜赏斑萝厩蕴莽钢邹叶疹单樊捣前烬吊崖匝企送跃赫鳃投媳暴棺蹲后牡膊谗甲柜侍叠磐燥陷懦昧颈芝矢肪灌就冷沽梗挑评保崎士羡 ...

最新文章

  1. python自动输出_python自动化报告的输出
  2. 达观杯_构建模型(四)贝叶斯
  3. 在JAVA中线程到底起到什么作用
  4. arcgis python脚本实现从界面选择输入输出_arcgis python脚本实现从界面选择输入输出_ArcGIS Python编程案例(2)-使用ArcPy编写脚本......
  5. jQuery插件开发的基本形式
  6. 【转】logback 常用配置详解(序)logback 简介
  7. [JavaWeb-MySQL]多表查询(内连接,外连接,子查询)
  8. JUnit单元测试的几个规律总结
  9. PHP如何获取用户IP地址
  10. Gson解析数组和list容器
  11. atomic头文件编译_atomic
  12. 和一群程序猿的旧金山优胜美地之旅
  13. audio插入背景音乐_vue.js怎么添加背景音乐
  14. 设计解谜游戏的30堂课
  15. 【组织架构】中国铁路武汉局集团有限公司
  16. Dubbo后台管理和监控中心部署
  17. redis实现单点登录系统
  18. 字节跳动抖音ios客户端开发实习生一面面经
  19. java学习四个月以来的想法
  20. wine葡萄酒数据集KNNSVM分类实验

热门文章

  1. 一家互联网电商公司面向对象的编程笔试题目
  2. ElasticSearch常用命令记录
  3. java 自定义注解 生成json_SpringBoot:自定义注解实现后台接收Json参数
  4. UE4学习-在虚幻编辑器中打开VS的三种方式
  5. php 函数 配置文件,php的几个配置文件函数
  6. 调用视频流html代码,如何将/“流”视频文件发送到HTML5视频标签
  7. linux7做服务器,centos7 搭建yum服务器
  8. zabbix mysql复制延迟_mysql 主从复制延迟监控
  9. double类型最大值_Java后端精选基础教程:Java 中的基本数据类型「连载 6」
  10. php+compose+使用,docker使用 docker-compose配置PHP环境(php+nginx+mysql)及启动