6.C语言迷宫程序界面版
写迷宫程序首先需要安装图形库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语言迷宫程序界面版相关推荐
- c语言制作贪吃小白入门,小白入门——easyx界面版“贪吃蛇”的C语言实现(详细)...
小白入门--easyx界面版"贪吃蛇"的C语言实现(详细) 作者:顽石 前言:C语言初学者都是在控制台上开发一些小游戏什么,由于没有界面(比如图片.音乐,不能做出拥有自己风格的程序 ...
- 用栈、回溯算法设计迷宫程序
目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...
- A - 小C语言--词法分析程序
Description 小C语言文法 <程序>→<main关键字>(){<声明序列><语句序列>} <声明序列>→<声明序列>& ...
- c语言迷宫求解毕业设计,毕业设计(论文)-基于Windows平台C语言实现迷宫游戏的设计.doc...
基于Windows平台C语言实现迷宫游戏的设计 摘 要 随着科技的日益发展,计算机信息知识越来越被人们所认知和使用,在当今知识爆炸的时代计算机毫无疑问成为人们常用的日常工具,而Windows和C语言都 ...
- 做程序界中的死神,锻造合适的斩魂刀
标题解读:标题中的死神,是源自<死神>动漫里面的角色,斩魂刀是死神的武器,始解是斩魂刀的初始解放形态,卐解是斩魂刀的觉醒解放形态,也是死神的大招.意旨做程序界中程序员的佼佼者,一步一步最终 ...
- 做程序界的死神,获取自己的斩魂刀
标题解读:标题中的死神,是源自<死神>动漫里面的角色,斩魂刀是死神的武器,始解是斩魂刀的初始解放形态,卐解是斩魂刀的觉醒解放形态,也是死神的大招.意旨做程序界中程序员的佼佼者,一步一步最终 ...
- 程序界的高手传奇(转)
程序界的高手传奇(转)[@more@] (1)MIT BBS上说微软电话面试的一道题就是"Who do you think is the best coder, and why?" ...
- 做程序界中的死神,提升斩魂刀
标题解读:标题中的死神,是源自<死神>动漫里面的角色,斩魂刀是死神的武器,始解是斩魂刀的初始解放形态,卐解是斩魂刀的觉醒解放形态,也是死神的大招.意旨做程序界中程序员的佼佼者,一步一步最终 ...
- c语言笔试程序改错题,C语言笔试--程序改错题.doc
C语言笔试--程序改错题 铜尖刮佛烁休凹汝宰或贷呵茎丑傅汞访沾犹扯视自女垂桶癌苞详阴疾澜赏斑萝厩蕴莽钢邹叶疹单樊捣前烬吊崖匝企送跃赫鳃投媳暴棺蹲后牡膊谗甲柜侍叠磐燥陷懦昧颈芝矢肪灌就冷沽梗挑评保崎士羡 ...
最新文章
- python自动输出_python自动化报告的输出
- 达观杯_构建模型(四)贝叶斯
- 在JAVA中线程到底起到什么作用
- arcgis python脚本实现从界面选择输入输出_arcgis python脚本实现从界面选择输入输出_ArcGIS Python编程案例(2)-使用ArcPy编写脚本......
- jQuery插件开发的基本形式
- 【转】logback 常用配置详解(序)logback 简介
- [JavaWeb-MySQL]多表查询(内连接,外连接,子查询)
- JUnit单元测试的几个规律总结
- PHP如何获取用户IP地址
- Gson解析数组和list容器
- atomic头文件编译_atomic
- 和一群程序猿的旧金山优胜美地之旅
- audio插入背景音乐_vue.js怎么添加背景音乐
- 设计解谜游戏的30堂课
- 【组织架构】中国铁路武汉局集团有限公司
- Dubbo后台管理和监控中心部署
- redis实现单点登录系统
- 字节跳动抖音ios客户端开发实习生一面面经
- java学习四个月以来的想法
- wine葡萄酒数据集KNNSVM分类实验
热门文章
- 一家互联网电商公司面向对象的编程笔试题目
- ElasticSearch常用命令记录
- java 自定义注解 生成json_SpringBoot:自定义注解实现后台接收Json参数
- UE4学习-在虚幻编辑器中打开VS的三种方式
- php 函数 配置文件,php的几个配置文件函数
- 调用视频流html代码,如何将/“流”视频文件发送到HTML5视频标签
- linux7做服务器,centos7 搭建yum服务器
- zabbix mysql复制延迟_mysql 主从复制延迟监控
- double类型最大值_Java后端精选基础教程:Java 中的基本数据类型「连载 6」
- php+compose+使用,docker使用 docker-compose配置PHP环境(php+nginx+mysql)及启动