代码如下,时间太晚,有空补注释:

 #include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#define n 21
#define m 37
#define up 1
#define down 2
#define left 3
#define right 4
#define Key_Up 72
#define Key_Down 80
#define Key_Right 77
#define Key_Left 75
typedef struct Point
{
int x;
int y;
int pos;
}point;
HANDLE h_out_buf;//缓冲技术解决闪屏
COORD coord={,};
DWORD bytes=;
char data[n+][m*+];
int maze[n+][m+];
point p[];
int l=;
point start,end;
void add(point t)
{
p[l]=t;
l++;
}
void add_neibor(point t)//将当前点周围的邻墙加入数组中
{
point q;
if(t.x+<=n)
{
q=t;
q.x=t.x+;
q.pos=down;
add(q);
}
if(t.x->=)
{
q=t;
q.x=t.x-;
q.pos=up;
add(q);
}
if(t.y+<=m)
{
q=t;
q.y=t.y+;
q.pos=right;
add(q);
}
if(t.y->=)
{
q=t;
q.y=t.y-;
q.pos=left;
add(q);
}
}
void del(int index)
{
int i;
for(i=index;i<l-;i++)
p[i]=p[i+];
l--;
}
void show_maze()
{
int i,j;
for(i=;i<n+;i++)
{
for(j=;j<m+;j++)
{
if(!maze[i][j])
{
data[i][*j]='*';
data[i][*j+]=' ';
}
else if(maze[i][j]==)
{
data[i][*j]=' ';
data[i][*j+]=' ';
}
else if(maze[i][j]==)
{
data[i][*j]=;
data[i][*j+]=' ';
}
else
{
data[i][*j]=;
data[i][*j+]=' ';
}
}
}
for(i=;i<n+;i++)
{
coord.Y=i;
WriteConsoleOutputCharacterA(h_out_buf, data[i], *j, coord, &bytes);
}
SetConsoleActiveScreenBuffer(h_out_buf);
}
void creat_maze()
{
int i,j,x,y;
point q;
memset(maze,,sizeof(maze));
srand((unsigned)time(NULL));
start.x=;
start.y=;
end.x=n;
end.y=m;
maze[][]=;
add_neibor(start);
while(l)
{
int r=rand()%l;
if(p[r].pos==up)
{
x=p[r].x-;
y=p[r].y;
}
if(p[r].pos==down)
{
x=p[r].x+;
y=p[r].y;
}
if(p[r].pos==left)
{
x=p[r].x;
y=p[r].y-;
}
if(p[r].pos==right)
{
x=p[r].x;
y=p[r].y+;
}
if(maze[x][y]==)
{
maze[p[r].x][p[r].y]=;
maze[x][y]=;
q.x=x;
q.y=y;
add_neibor(q);
}
del(r);
}
maze[start.x][start.y]=;
maze[end.x][end.y]=;
}
void win()
{
int i,j;
char a[]="CONGRATULATIONS!";
char b[]="YOU WIN THIS GAME!";
char c[]="AUTHOR:天道铸魂";
char d[]="按任意键结束游戏";
memset(data,,sizeof(data));
for(i=;i<n+;i++)
{
for(j=;j<m+;j++)
{
data[i][*j]=' ';
data[i][*j+]=' ';
}
}
strcpy(data[]+,a);
strcpy(data[]+,b);
strcpy(data[]+,c);
strcpy(data[]+,d);
for(i=;i<n+;i++)
{
coord.Y=i;
WriteConsoleOutputCharacterA(h_out_buf, data[i], *j, coord, &bytes);
}
SetConsoleActiveScreenBuffer(h_out_buf);
}
void play_game()
{
int key1,key;
point now;
now.x=now.y=;
while()
{
show_maze();
if(now.x==n&&now.y==m)
{
system("cls");
win();
break;
}
key1=getch();
key=getch();
if(key==Key_Up)
{
if(now.x->)
{
if(maze[now.x-][now.y])
{
maze[now.x][now.y]=;
now.x--;
maze[now.x][now.y]=;
}
}
}
else if(key==Key_Down)
{
if(now.x+<=n)
{
if(maze[now.x+][now.y])
{
maze[now.x][now.y]=;
now.x++;
maze[now.x][now.y]=;
}
}
}
else if(key==Key_Left)
{
if(now.y->)
{
if(maze[now.x][now.y-])
{
maze[now.x][now.y]=;
now.y--;
maze[now.x][now.y]=;
}
} }
else if(key==Key_Right)
{
if(now.y+>)
{
if(maze[now.x][now.y+])
{
maze[now.x][now.y]=;
now.y++;
maze[now.x][now.y]=;
}
}
}
}
}
void start_game()
{
creat_maze();
play_game();
}
int main()
{
h_out_buf = CreateConsoleScreenBuffer(GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CONSOLE_TEXTMODE_BUFFER,NULL);
CONSOLE_CURSOR_INFO cci;
cci.bVisible = ;
cci.dwSize = ;
SetConsoleCursorInfo(h_out_buf, &cci);
start_game();
return ;
}

C语言实现迷宫小游戏的更多相关文章

  1. c++迷宫小游戏

    c++迷宫小游戏 一.总结 一句话总结: 显示:根据map数组输出图像 走动:修改map数组的值,每走一步重新刷新一下图像就好 1.如果走函数用z(),出现输入s会向下走多步的情况,原因是什么? 向下 ...

  2. 我用数据结构花了一夜给女朋友写了个h5走迷宫小游戏

    目录 起因 分析 画线(棋盘) 画迷宫 方块移动 结语 @(文章目录) 先看效果图(在线电脑尝试地址http://biggsai.com/maze.html): 起因 又到深夜了,我按照以往在公众号写 ...

  3. 用Java语言编写的迷宫小游戏软件

    可查看本项目的github 源码链接,撒娇打滚求 star 哦~~ღ( ´・ᴗ・ ` )比心 本仓库代码是经过 eclipse 编译运行过的,一般情况下将本仓库代码下载下来之后,使用 eclipse ...

  4. 简单的C语言猜数字小游戏

    猜数字小游戏可谓是C语言最为基础的一个知识点了,我们可以在此基础上进行延伸,实现随机数的猜测,然后是加入再来一局的模式,等等.这里是抛砖引玉,希望你能做出你的经典之作. #include <st ...

  5. C语言实现2048小游戏

    目录 2048 一.设计思路 1.游戏规则 2.思路 二.代码实现 1.存储结构 2.初始化游戏数据 3.向左合并 4.其他方向合并 5.产生新的方块 6.源代码 7.实例演示 三.问题 2048 一 ...

  6. 基于HTML5的WebGL实现的2D3D迷宫小游戏

    为了实现一个基于HTML5的场景小游戏,我采用了HT for Web来实现,短短200行代码,我就能实现用"第一人称"来操作前进后退上下左右,并且实现了碰撞检测. 先来看下实现的效 ...

  7. c语言----<项目>_小游戏<2048>

    2048 小游戏 主要是针对逻辑思维的一个训练. 主要学习方面:1.随机数产生的概率.2.行与列在进行移动的时候几种情况.3.MessageBox的使用 #include <iostream&g ...

  8. h5小球走迷宫小游戏源码

    无意中找到的一个挺有意思的小游戏,关键是用h5写的,下面就分享给大家源码 还是先来看小游戏的截图 可以用键盘的三个键去控制它,然后通关 下面是源代码 <!doctype html> < ...

  9. 利用c语言做简单的迷宫小游戏

                       #include <stdio.h> #define ROW 6 #define COL 6 // 封装打印地图的函数 void printMap(c ...

随机推荐

  1. 使用kubeadm创建kubernets集群

    参考:  http://docs.kubernetes.org.cn/459.html   https://blog.csdn.net/gui951753/article/details/833169 ...

  2. ISP PIPLINE (二) LensShading Correct

    what is the LSC? lens shading 分为:Y-shading , color shading. 在讲LSC之前,我们先来理解一个重要的术语--CRA(Chief ray ang ...

  3. 2017 ACM Jordanian Collegiate Programming Contest

    A. Chrome Tabs 当$n=1$时答案为$0$,当$k=1$或$k=n$时答案为$1$,否则答案为$2$. #include<cstdio> int T,n,k; int mai ...

  4. [模板][题解][Luogu1939]矩阵乘法加速递推(详解)

    题目传送门 题目大意:计算数列a的第n项,其中: \[a[1] = a[2] = a[3] = 1\] \[a[i] = a[i-3] + a[i - 1]\] \[(n ≤ 2 \times 10^ ...

  5. Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明

    Oracle命令行进行操作时可能出现"ORA-04076: 无效的 NEW 或 OLD 说明" 需要在条件语句中JOB前面添加“old.”即可(因为是在when条件里面,所以不用“ ...

  6. vue cli搭建项目

    1.首先电脑要在安装node环境下才能运行 2.全局安装webpack:npm install webpack -g 3.安装vue脚手架: npm install vue-cli -g 4.新建文件 ...

  7. Java虚拟机一 运行时数据区(栈、堆、方法区等)

    Java虚拟机的内存管理主要分两点:内存分配以及内存回收.· 一.内存分配图: 注: 所占区域的大小与实际的内存大小比例并无直接关系. 解读: 1.如图,分成两种颜色的内存区域,其中蓝色的是线程隔离的 ...

  8. __x__(7)0905第二天__HTML的发展

    HTML的发展 浏览器各个厂商有不同的标准,一个网页的兼容性非常差. 于是,W3C出来了,作为公益组织定义了HTML标准. 在 1993.6 实现并发布了第一个 HTML. 在 1995.11 开始创 ...

  9. hook NtTerminateProcess进行应用的保护

    这段时间在学习驱动,然后看到hook ssdt的代码,找了一个写的清晰的学习了一下:http://www.netfairy.net/?post=218 这里是hook NtOpenProcess,但是 ...

  10. | 线段树-地平线horizon

    [题目描述]:在地平线上有n个建筑物.每个建筑物在地平线上可以看成一个下边界和地平线重合的矩形.每个建筑物有三个描述(Li ,Ri,Hi),分别表示该建筑物的左边界,右边界,高度.输出输出这些建筑物在 ...