6.C语言迷宫程序界面版
写迷宫程序首先需要安装图形库easyX 安装地址链接:https://pan.baidu.com/s/1qZwFn3m 密码:ozge
项目截图:
//左上角是七点,右下角是终点,蓝色表示的是走过的路径,红色表示的是当前位置,采用的是深度优先遍历

mg.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h>
#include <mmsystem.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "conio.h"
#pragma comment(lib,"winmm.lib") //每一个格子的像素
#define ELEM 20
//界面的宽和高
#define WINDOW_WIDTH 500
#define WINDOW_HEIGHT 500 //枚举四个方向
typedef enum DIR{ up = , down = , left = , right = }DIR; //当前到的位置
int cur_x, cur_y;
//一共走的步数
int total_count = ; //初始化游戏
void GameInit();
//绘制游戏
void GamePaint();
//判断能不能走
bool judge(int cur_x, int cur_y, char dir);
//人工操作移动
void move();
//判断能否成功走出来
bool judgeSuc(int,int);
main.cpp
#include "mg.h" //初始化地图
//0表示没走过的点,1表示障碍,2表示当前在的位置,3表示已经走过的路径
int map[WINDOW_HEIGHT / ELEM][WINDOW_WIDTH / ELEM] = { }; void main()
{
//初始化游戏
GameInit();
//以下是实现人工操作
//while (1)
//{
// //如果没有键盘按下
// while (!_kbhit())
// {
// GamePaint();
// run(cur_x, cur_y);
// }
// move();
//}
system("pause");
} //初始化游戏界面,并初始化地图
void GameInit()
{
//设置窗口大小
initgraph(WINDOW_HEIGHT, WINDOW_WIDTH);
//设置窗口颜色
setbkcolor(LIGHTGRAY);
//强制绘图,显示界面
cleardevice(); //初始化时间种子,随机生成一个地图,并且判断地图能不能走出来
srand(time());
do
{
for (int i = ; i < WINDOW_HEIGHT / ELEM; i++)
{
for (int j = ; j < WINDOW_WIDTH / ELEM; j++)
{
int num = rand() % ;
if (num < )
map[i][j] = ;
else
map[i][j] = ;
}
}
//左上角位置是人的初始位置
map[][] = ;
//右下角
map[WINDOW_HEIGHT / ELEM - ][WINDOW_WIDTH / ELEM - ] = ;
GamePaint();
} while (judgeSuc(,) == false);//如果不能走出来则继续生成迷宫
} //绘制
void GamePaint()
{
//按行绘制
for (int y = ; y < WINDOW_HEIGHT / ELEM; y++)
{
for (int x = ; x < WINDOW_WIDTH / ELEM; x++)
{
//没有走过
if (map[y][x] == )
{
//设置画笔颜色
setcolor(RED);
//设置填充颜色
setfillcolor(DARKGRAY);
//填充矩形
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
//画矩形
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
} //障碍物
if (map[y][x] == )
{
setcolor(RED);
setfillcolor(BLACK);
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
} //当前位置
if (map[y][x] == )
{
setcolor(RED);
setfillcolor(RED);
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
} //已经走过的路径
if (map[y][x] == )
{
setcolor(RED);
setfillcolor(GREEN);
fillrectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
rectangle(x*ELEM, y*ELEM, (x + )*ELEM, (y + )*ELEM);
}
}
}
} //判断能不能走
bool judge(int cur_x,int cur_y,char dir)
{
switch (dir)
{
case up:
if (cur_y - < || map[cur_y - ][cur_x] == || map[cur_y - ][cur_x] == )
{
return false;
}
break;
case down:
if (cur_y + > WINDOW_HEIGHT / ELEM - || map[cur_y + ][cur_x] == || map[cur_y + ][cur_x] == )
{
return false;
}
break;
case left:
if (cur_x - < || map[cur_y][cur_x - ] == || map[cur_y][cur_x - ] == )
{
return false;
}
break;
case right:
if (cur_x + > WINDOW_HEIGHT / ELEM - || map[cur_y][cur_x + ] == || map[cur_y][cur_x + ] == )
{
return false;
}
break;
} return true;
} //判断地图能否走出去
bool judgeSuc(int cur_x, int cur_y)
{
total_count++;//走一次步数加一
map[cur_y][cur_x] = ;//把走过的标记 if (cur_x == WINDOW_WIDTH / ELEM - && cur_y == WINDOW_HEIGHT / ELEM - )
{
char res[];
sprintf(res, "成功走出迷宫,一共走了%d步", total_count);
MessageBoxA(,res, "提示",);
//return true;
return false;
}
else
{
//右下左上
if (judge(cur_x, cur_y, right))
{
//下一个走到的位置设置为2
map[cur_y][cur_x + ] = ;
//绘制当前状态,并且等待100ms
GamePaint();
Sleep();
//从下一个位置开始走
judgeSuc(cur_x+, cur_y);
//递归还原
total_count--;
} if (judge(cur_x, cur_y, down))
{
map[cur_y + ][cur_x] = ;
GamePaint();
Sleep();
judgeSuc(cur_x, cur_y+);
total_count--;
} if (judge(cur_x, cur_y, left))
{
map[cur_y][cur_x - ] = ;
map[cur_y][cur_x] = ;
GamePaint();
Sleep();
judgeSuc(cur_x-, cur_y);
total_count--;
} if (judge(cur_x, cur_y, up))
{
map[cur_y - ][cur_x] = ;
map[cur_y][cur_x] = ;
GamePaint();
Sleep();
judgeSuc(cur_x, cur_y-);
total_count--;
} if (total_count == )
{
return false;
}
}
} //向各个方向移动
void move()
{
//方向
char dir;
dir = _getch(); //各个方向判断
switch (dir)
{
case up:
if (judge(cur_x, cur_y, up))
{
map[cur_y - ][cur_x] = ;
map[cur_y][cur_x] = ;
cur_y -= ;
}
break;
case down:
if (judge(cur_x, cur_y, down))
{
map[cur_y + ][cur_x] = ;
map[cur_y][cur_x] = ;
cur_y += ;
}
break;
case left:
if (judge(cur_x, cur_y, left))
{
map[cur_y][cur_x - ] = ;
map[cur_y][cur_x] = ;
cur_x -= ;
}
break;
case right:
if (judge(cur_x, cur_y, right))
{
map[cur_y][cur_x + ] = ;
map[cur_y][cur_x] = ;
cur_x += ;
}
break;
}
}
6.C语言迷宫程序界面版的更多相关文章
- Hybrid App是如何实现网页语言与程序语言的混合?谁占主体?
[编者按]本文作者@徐珂铭,一位看好Html5的移动互联网的从业人士.喜爱玩技术,会点JAVA.HTML及CSS,有自己的想法及姑且能表达想法的文字,因此有了自己的文章. 基于HTML5的Web Ap ...
- 通过反汇编C语言小程序学习Liunx汇编语言
大家好! 我是来自山东师范大学的吴乐. 今天在<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...
- windows系统下c语言暂停程序
原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { ...
- Linux下简单C语言小程序的反汇编分析
韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOO ...
- C语言应用程序的内存图
1.综述 c语言应用程序加载到内存,这时它所占据的内存分为四个区,分别为栈Stack,堆Heap,静态存储区Static Area,代码存储区Code Area,这四个区分别放置应用程序的不同部分,从 ...
- c语言小程序以及java生成注释文档方法
c语言小程序:sizeof和strlen() sizeof运算符以字节为单位给出数据的大小,strlen()函数以字符为单位给出字符串的长度,字符和字节不是一回事. char类型用于存储字母和标点符号 ...
- C语言编程程序的内存如何布局
重点关注以下内容: C语言程序在内存中各个段的组成 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过 ...
- C语言小程序——推箱子(窄字符和宽字符)
C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...
- Linux C语言小程序
Linux C语言小程序 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include & ...
随机推荐
- shell学习日志
0.shell的变量同环境变量不同,存在用户环境区. 变量赋值的方式是: variable_name = variable_value a= "hello" $a对a进行取值 关于 ...
- SCIP,Clp,Gurobi和Cplex安装
SCIP安装 1.在自己的家目录下建立目录scip,并将获得的压缩包考入该文件夹并解压缩 tar -zxvf scipoptsuite-5.0.0.tgz 2.进入目录scipoptsuite-5.0 ...
- HTML一些标记
4)a标签也可以转换样式为按钮 <a class="btn btn-primary" href="#" role="button"&g ...
- Mysql学习总结(28)——MySQL建表规范与常见问题
一. 表设计 库名.表名.字段名必须使用小写字母,"_"分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB ...
- NIO框架之MINA源代码解析(一):背景
"你们的agent占了好多系统的port.把我们的非常多业务系统都给整死了,给我们造成了非常大的损失.要求你们的相关领导下周过来道歉" -- 来自我们的一个客户. ...
- Beat 'Em Up Game Starter Kit (横版格斗游戏) cocos2d-x游戏源代码
浓缩精华.专注战斗! 游戏的本质是什么?界面?养成?NoNo! 游戏来源于对实战和比赛的模拟,所以它的本源就是对抗.就是战斗! 是挥洒热血的一种方式! 一个游戏最复杂最难做的是什么?UI?商城? ...
- 使用Qt.labs.settings来存储应用的设置
我在曾经的文章中,讲述了怎样使用U1db及SQLite offline storage API来存储应用的一些状态.在这篇文章中,我将介绍怎样使用Qt.labs.settings来存储应用的状态.更加 ...
- 转:移动建站工具(一):分秒钟将Web网站移动化
作者唐小引 移动建站工具Web移动化简易开发MobifyTOPMobile Joomla!MoFuseWordPress优化 摘要:时下移动端显然已是诸多企业都想要占领的重要阵地.但限于较小的屏幕 ...
- HDU 1022 Train Problem I 模拟栈题解
火车进站,模拟一个栈的操作,额外的栈操作,查看能否依照规定顺序出栈. 数据量非常少,故此题目非常easyAC. 直接使用数组模拟就好. #include <stdio.h> const i ...
- zzulioj--1807--小明在努力(递归)
1807: 小明在努力 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 95 Solved: 35 SubmitStatusWeb Board Des ...