写迷宫程序首先需要安装图形库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语言迷宫程序界面版的更多相关文章

  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. 微信小程序的开启授权,当单机取消授权后 再次授权

    //单机去搜索 toSearch:function(){ this.getLocation(res => { console.log('成功') wx.navigateTo({ url: `.. ...

  2. CSDN 轻松周赛赛题:能否被8整除

    轻松周赛赛题:能否被8整除 题目详情 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 ...

  3. RecyclerView借助ItemTouchHelper实现拖动和滑动删除功能

    RecyclerView是官方推荐代替ListView的空间,怎样实现RecyclerView列表元素的拖动呢? 官方提供了ItemTouchHelper类使用过程例如以下: 定义ItemTouchH ...

  4. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第12章 | 图形用户界面

    Python支持的工具包非常多.但没有一个被觉得标准的工具包.用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: http://wxpython.org/ ------ ...

  5. Codeforces 559B Equivalent Strings 等价串

    题意:给定两个等长串a,b.推断是否等价.等价的含义为:若长度为奇数,则必须是同样串.若长度是偶数,则将两串都均分成长度为原串一半的两个子串al,ar和bl,br,当中al和bl等价且ar和br等价, ...

  6. tp5使用oss存储图片

    1.申请Access Key ID和Access Key Secret,以及创建好你的Bucket 2.通过composer安装oss插件 通过cmd,到项目的目录下,输入下面的指令. compose ...

  7. poj--2083--Fractal(dfs)

    Fractal Time Limit: 1000MS   Memory Limit: 30000KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  8. Numpy科学计算工具

    Numpy初探 Numpy基础数据结构 Numpy数组是一个多维数组,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的原数据 导入该库: import numpy as np 多维数组 ...

  9. 版本控制器:SVN(精讲)

    版本控制器:SVN 1 开发中的实际问题 1.1 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流——需求之一:备份! 1.2 这个项目 ...

  10. ajax中Post和Get请求方式的区别?

    ajax中Post和Get请求方式的区别: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示. 2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的 ...