代码如下,时间太晚,有空补注释:
#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 ...
随机推荐
- [资料分享]组件方式开发 Web App全站
-
【USACO】sprime
有了前面的基础,做这道题真是so easy啊. 因为要分解后每个数都是素数,所以采用先生成短的素数,长的素数在短素数的基础上生成. 比如长度为1的素数只有 2 3 5 7, 那么符合要求的长度为2的素 ...
-
栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]
原文地址:http://www.cnblogs.com/xy8.cn/articles/1227228.html 一.栈和托管堆 通用类型系统(CTS)区分两种基本类型:值类型和引用类型.它 ...
-
笔记一:OOAD与UML
一.面向对象的概念与方法 1. 面向对象 1.1. 面向对象是一种系统建模技术 1.2. 面向对象编程是按照OO的方法学来开发程序的过程 1.3. 通过分析系统内对象的交互来描述或建模一个系统 1. ...
-
Java基础 成员变量的继承与覆盖
通过继承可以得到父类的成员变量,子类的成员变量包括从父类继承的成员变量(包括从祖先类中继承的成员变量)以及子类中重新定义的成员变量.本次介绍内容包括:可以继承哪些成员?如果子类和父类出现了相同的成员变 ...
-
C#正则表达式提取HTML中IMG标签的SRC地址
一般来说一个 HTML 文档有很多标签,比如“<html>”.“<body>”.“<table>”等,想把文档中的 img 标签提取出来并不是一件容易的事.由于 i ...
-
【Unity】1.0 第1章 Unity—3D游戏开发和虚拟现实应用开发的首选
分类:Unity.C#.VS2015 创建日期:2016-03-23 一.简介 Unity是跨平台2D.3D游戏和虚拟现实高级应用程序的专业开发引擎,是由Unity Technologies公司研制的 ...
-
python发送邮件方法总结
python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点. 一.相关模块介绍 发送邮件主要用到了smtplib和ema ...
-
Odoo 8.0 new API 概述
相对于7来说,8的api改进了不少,用官方的话来说就是更加面向对象了. 下面探究一下具体的改动. 准备知识:python装饰器的使用 http://blog.csdn.net/thy38/articl ...
-
物流管理系统(数据库+后台+springMVC+Mybatis+layui)
数据库:mysql create database WBG_logistics; use WBG_logistics; #1管理员表 create table admin( a_id int prim ...