C语言实现迷宫小游戏
代码如下,时间太晚,有空补注释:
#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语言实现迷宫小游戏的更多相关文章
- c++迷宫小游戏
c++迷宫小游戏 一.总结 一句话总结: 显示:根据map数组输出图像 走动:修改map数组的值,每走一步重新刷新一下图像就好 1.如果走函数用z(),出现输入s会向下走多步的情况,原因是什么? 向下 ...
- 我用数据结构花了一夜给女朋友写了个h5走迷宫小游戏
目录 起因 分析 画线(棋盘) 画迷宫 方块移动 结语 @(文章目录) 先看效果图(在线电脑尝试地址http://biggsai.com/maze.html): 起因 又到深夜了,我按照以往在公众号写 ...
- 用Java语言编写的迷宫小游戏软件
可查看本项目的github 源码链接,撒娇打滚求 star 哦~~ღ( ´・ᴗ・ ` )比心 本仓库代码是经过 eclipse 编译运行过的,一般情况下将本仓库代码下载下来之后,使用 eclipse ...
- 简单的C语言猜数字小游戏
猜数字小游戏可谓是C语言最为基础的一个知识点了,我们可以在此基础上进行延伸,实现随机数的猜测,然后是加入再来一局的模式,等等.这里是抛砖引玉,希望你能做出你的经典之作. #include <st ...
- C语言实现2048小游戏
目录 2048 一.设计思路 1.游戏规则 2.思路 二.代码实现 1.存储结构 2.初始化游戏数据 3.向左合并 4.其他方向合并 5.产生新的方块 6.源代码 7.实例演示 三.问题 2048 一 ...
- 基于HTML5的WebGL实现的2D3D迷宫小游戏
为了实现一个基于HTML5的场景小游戏,我采用了HT for Web来实现,短短200行代码,我就能实现用"第一人称"来操作前进后退上下左右,并且实现了碰撞检测. 先来看下实现的效 ...
- c语言----<项目>_小游戏<2048>
2048 小游戏 主要是针对逻辑思维的一个训练. 主要学习方面:1.随机数产生的概率.2.行与列在进行移动的时候几种情况.3.MessageBox的使用 #include <iostream&g ...
- h5小球走迷宫小游戏源码
无意中找到的一个挺有意思的小游戏,关键是用h5写的,下面就分享给大家源码 还是先来看小游戏的截图 可以用键盘的三个键去控制它,然后通关 下面是源代码 <!doctype html> < ...
- 利用c语言做简单的迷宫小游戏
#include <stdio.h> #define ROW 6 #define COL 6 // 封装打印地图的函数 void printMap(c ...
随机推荐
- 习题集1a:研究方法入门
1.课程实践编号 课程实践编号 随着对习题集“PS 1a:研究方法入门”和其他习题集的了解,你可能会发现进度栏中的习题编号并非一直是连续的. 对于存在两个习题集的课程,如果一个习题集看上去“缺失”习题 ...
- 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结
20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...
- 使用控制台对Redis执行增删改查命令
使用控制台对Redis执行增删改查命令 在上一篇里,我们已经安装了redis.这一篇我们将一起来学习如何使用"控制台"管理Redis 首先肯定是打开一个控制台,在windows系统 ...
- Win10 清理自带APP
如果想一次性把它们全都删掉,请输入: Get-AppxPackage -AllUsers | Remove-AppxPackage 但是如果你先建一个账户,以上应用就会再次全部出现,不想这样的话可以输 ...
- (二)文档请求不同源之window.postMessage跨域
一.基本原理 HTML5为了解决跨域,引入了跨文档通信API(Cross-document messaging).这个API为window对象新增了一个window.postMessage方法,允许跨 ...
- YII2 console中引用其他模块(子项目)的model时出现model找不到命名空间的问题解决
YII2 console中写定时任务, 想使用其他模块的model, 在 console的yii.php 入口文件中引入其他模块的配置文件, 否者会出现model等命名空间找不到的问题. 还有, 命名 ...
- django——视图层
1. 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...
- BZOJ 5118
矩阵乘也是可以欧拉定理的HHH 所以幂次就是$(2^n-1) ~ mod ~ \varphi(p)$就好了 const ll p=1125899839733759ll; inline ll mu(ll ...
- Hibernate 映射一对一关联关系
基于外键的方式: 附上代码: public class Manager { private Integer mgrId; private String mgrName; private Departm ...
- ElasticSearch + Canal 开发千万级的实时搜索系统
公司是做社交相关产品的,社交类产品对搜索功能需求要求就比较高,需要根据用户城市.用户ID昵称等进行搜索. 项目原先的搜索接口采用SQL查询的方式实现,数据库表采用了按城市分表的方式.但随着业务的发展, ...