迷宫游戏C语言代码讲解

迷宫游戏C语言代码讲解
迷宫游戏C语言代码讲解

/*迷宫游戏by CDQ*/

/*

vc++ 6.0 编译成功

本程序参照网上一个特殊算法随机生成迷宫

该算法优点:

效率高,从入口到出口只有唯一路径,入口出口自己设定

该算法缺点:

宽度高度都必须为奇数,只能生成n*m矩阵迷宫

*/

#include

#include

#include

#include

#define Height 31 //迷宫的高度,必须为奇数

#define Width 25 //迷宫的宽度,必须为奇数

#define Wall 1

#define Road 0

#define Start 2

#define End 3

#define Esc 5

#define Up 1

#define Down 2

#define Left 3

#define Right 4

int map[Height+2][Width+2];

void gotoxy(int x,int y) //移动坐标

{

COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ); }

void hidden()//隐藏光标

{

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_CURSOR_INFO cci;

GetConsoleCursorInfo(hOut,&cci);

cci.bVisible=0;//赋1为显示,赋0为隐藏

SetConsoleCursorInfo(hOut,&cci);

}

void create(int x,int y) //随机生成迷宫

{

int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向

int i,j,t;

//将方向打乱

for(i=0;i<4;i++)

{

j=rand()%4;

t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;

t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;

}

map[x][y]=Road;

for(i=0;i<4;i++)

if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) {

map[x+c[i][0]][y+c[i][1]]=Road; create(x+2*c[i][0],y+2*c[i][1]);

}

}

int get_key() //接收按键

{

char c;

while(c=getch())

{

if(c==27) return Esc; //Esc

if(c!=-32)continue;

c=getch();

if(c==72) return Up; //上

if(c==80) return Down; //下

if(c==75) return Left; //左

if(c==77) return Right; //右

}

return 0;

}

void paint(int x,int y) //画迷宫

{

gotoxy(2*y-2,x-1);

switch(map[x][y])

{

case Start:

printf("入");break; //画入口

case End:

printf("出");break; //画出口

case Wall:

printf("※");break; //画墙

case Road:

printf(" ");break; //画路

}

}

void game()

{

int x=2,y=1; //玩家当前位置,刚开始在入口处int c; //用来接收按键

while(1)

{

gotoxy(2*y-2,x-1);

printf("☆"); //画出玩家当前位置

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(30,24);

printf("到达终点,按任意键结束");

getch();

break;

}

c=get_key();

if(c==Esc)

{

gotoxy(0,24);

5

回复

1楼

2011-12-07 15:46

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

break;

}

switch(c)

{

case Up: //向上走

if(map[x-1][y]!=Wall) {

paint(x,y);

x--;

}

break;

case Down: //向下走if(map[x+1][y]!=Wall) {

paint(x,y);

x++;

}

break;

case Left: //向左走

if(map[x][y-1]!=Wall) {

paint(x,y);

y--;

}

break;

case Right: //向右走

if(map[x][y+1]!=Wall) {

paint(x,y);

y++;

}

break;

}

}

}

int main()

{

int i,j;

srand((unsigned)time(NULL)); //初始化随即种子

hidden(); //隐藏光标

for(i=0;i<=Height+1;i++)

for(j=0;j<=Width+1;j++)

if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫

map[i][j]=Road;

else map[i][j]=Wall;

create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数

for(i=0;i<=Height+1;i++) //边界处理

{

map[i][0]=Wall;

map[i][Width+1]=Wall;

}

for(j=0;j<=Width+1;j++) //边界处理

{

map[0][j]=Wall;

map[Height+1][j]=Wall;

}

map[2][1]=Start; //给定入口

map[Height-1][Width]=End; //给定出口

for(i=1;i<=Height;i++)

for(j=1;j<=Width;j++) //画出迷宫

paint(i,j);

game(); //开始游戏

getch();

return 0;

}

回复收起回复

2楼

2011-12-07 15:46

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

首先,先挂上代码。然后说部分废话,读代码好处非常之多,提高技术,增加理解力,以及获得不同思路等。读代码甚至对比写代码来说,学习效率有过之而无不及.文章针对初级又在初级之上,没有一定的基础看不懂,有一定的基础就可以跟着这篇帖子,做出你自己的C 语言随机迷宫,这里的做出并不是抄代码,而是变为你真正的知识,在没有参考的时候,也可以流畅的写出你的代码.

然后我们开始分析代码..

先看头文件。

#include //包涵标准输入输出函数

#include //控制台输入输出库,非标准库哦

#include //WINDOWS.H是主要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。具体包涵了什么。。太多了自行百度

#include //包涵时间和日期处理函数

#define Height 21 //迷宫的高度,必须为奇数

#define Width 21 //迷宫的宽度,必须为奇数

#define Wall 1 //即字面意思墙

#define Road 0 //即字面意思路

#define Start 2 //入口

#define End 3 //终点

#define Esc 5 //退出

#define Up 1 //上,下,左,右

#define Down 2

#define Left 3

#define Right 4

这里为什么要用宏,什么情况下使用宏,可能要问为什么不直接用12345来代替。简单的来说就是提供一个方便,并增加一定的效率。还有重要的一点就是增加代码的可读性。尽量避免用01234这样无意义的数字而使用宏定义能良好的提高开发效率,在小程序中可能不算什么,但是在大程序可就不一样了,然而宏定义也并非只能定义简单的1234 。

接下来我们看一共有几个函数

void gotoxy(int x,int y) //既字面含义移动坐标

void create(int x,int y) //字面含义创建迷宫

void hidden() //隐藏光标(注并非鼠标)

int get_key() //得到按键

void paint(int x,int y) //绘制迷宫

void game() //游戏相关操作

先不要管main函数里的代码,我们先逐个分析一下函数

先来看看gotoxy() 接受两个参数,代码如下

void gotoxy(int x,int y) //移动坐标

{

COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );

}

看到这里可能就有很多人蒙了COORD是个什么东西?COORD实际上是一个结构体包括结构体成员SHORT X,SHORT Y;

typedef struct COORD { SHORT X; SHORT Y;} COORD, *PCOORD;暂时先不管他是做什么的,先看看SetConsoleCursorPosition这个API的声明他接受两个参数,作用是定位光标位置,需要配合COORD 使用

BOOL WINAPI SetConsoleCursorPosition( __in HANDLE hConsoleOutput, //句柄就不介绍了__in COORD dwCursorPosition // COORD原来是SetConsoleCursorPosition的形参之一); GetStdHandle 声明如下:

HANDLE WINAPI GetStdHandle( //获得输入、输出/错误的屏幕缓冲区的句柄。__in DWORD nStdHandle );

而其参数nStdHandle的值可以为下面几种类型的一种:STD_INPUT_HANDLE 标准输入的句柄STD_OUTPUT_HANDLE 标准输出的句柄STD_ERROR_HANDLE 标准错误的句柄

这么说出来其实也并非很容易理解,我们用一个小程序来举例

回复收起回复

3楼

2011-12-07 15:46

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

#include

#include

int main(void)

{

COORD cod;

cod.X=5;

cod.Y=4;

SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), cod ); }

编译一下程序,就能理解这两个函数是做什么的了

gotoxy() 就讲到这里

下面讲第二个函数

声明:void create(int x,int y)

void create(int x,int y) //随机生成迷宫

{

int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向// 这里的四个方向乃是0,1 1,0 0,-1 -1,0 代表着上下左右

int i,j,t;

//将方向打乱

for(i=0;i<4;i++)

{

j=rand()%4;

t=c[0];c[0]=c[j][0];c[j][0]=t;

t=c[1];c[1]=c[j][1];c[j][1]=t;

}

map[x][y]=Road;

for(i=0;i<4;i++)

if(map[x+2*c[0]][y+2*c[1]]==Wall) //

{

map[x+c[0]][y+c[1]]=Road;

create(x+2*c[0],y+2*c[1]);

}

}

这个函数中的算法根据源代码作者所说是从网上找的.然后搜了搜.我去略长,略长,转到论坛压力略大略大还分别有不会离散数学的和使用深度优先遍历..两种版本,最主要的是带图了,推荐亲自前去观看吧https://www.360docs.net/doc/4718600363.html,/view/f22455126edb6f1aff001f13.html ,带上图理解比较容易..所以想要理解算法部分,还是看连接文章吧

然后我们接着说一下int get_key()

函数如下:

int get_key() //接收按键

{

char c;

while(c=getch())

{

if(c==27) return Esc; //Esc

if(c!=-32)continue;

c=getch();

if(c==72) return Up; //上

if(c==80) return Down; //下

if(c==75) return Left; //左

if(c==77) return Right; //右

}

return 0;

}

其实理解这个函数很容易getch() 为无回显获取一个字符,什么叫无回显获取一个字符?写一个小程序来测试一下

#include

#include

int main()

{

char a;

a=getch();

putch(a);

}

可以发现只会进行输出,而输入时不会显示所输入字符。可能会有人疑惑ESC的ASCII 确实是27 可是其他的是什么呀?ASCII中是没有上下左右的值的,这里的值是键盘控制码,不是ASCII!注意了!关于获取某个按键的值可以用以下程序

#include

#include

int main()

{

int key;

key = getch();

while( key != 27 ) //键入值不为ESC

{

printf("%d\n", key);

key = getch();

}

}

回复收起回复

4楼

2011-12-07 15:47

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

继续看看paint 函数

函数如下

void paint(int x,int y) //画迷宫

{

gotoxy(2*y-2,x-1);

switch(map[x][y])

{

case Start:

printf("入");break; //画入口

case End:

printf("出");break; //画出口

case Wall:

printf("※");break; //画墙

case Road:

printf(" ");break; //画路

}

}

这个函数实际上比较容易理解,他首先将光标指向入口,然后在main函数中遍历整个map 数组,画出地图。也可以不用入出※空格这些来做地图比如改一下

switch(map[x][y])

{

case Start:

printf("1");break; //画入口

case End:

printf("2");break; //画出口

case Wall:

printf("3");break; //画墙

case Road:

printf("4");break; //画路

}

然后就应该能理解了这部分是怎么做到的

接下来我们看最后一个函数void game() //游戏相关操作

void game()

{

int x=2,y=1; //玩家当前位置,刚开始在入口处

int c; //用来接收按键

while(1)

{

gotoxy(2*y-2,x-1); //这里的含义是到达入口处

printf("☆"); //画出玩家当前位置

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(30,24);

printf("到达终点,按任意键结束");

getch();

break;

}

c=get_key();

if(c==Esc)

{

gotoxy(0,24);

break;

}

switch(c)

{

case Up: //向上走

if(map[x-1][y]!=Wall)

{

paint(x,y);

x--;

}

break;

case Down: //向下走

if(map[x+1][y]!=Wall)

{

paint(x,y);

x++;

}

break;

case Left: //向左走

if(map[x][y-1]!=Wall)

{

paint(x,y);

y--;

}

break;

case Right: //向右走

if(map[x][y+1]!=Wall)

{

paint(x,y);

y++;

}

break;

}

}

}

事实上这个函数也不是很难理解所有函数除了算法部分都不难理解,就看用不用心去读代码了

就像注释那样,gotoxy(2*y-2,x-1); 到达入口处用☆当玩家,然后先进行判断是否到达终点,如果达到终点或按ESC则结束游戏,负责就开始接受按键,进行移动,说是移动实际上就是不断变化map[x][y] x和y的值并进行判断是否到达终点,按下ESC如果没有则根据x++ x-- y++ y-- 来进行上下左右后改变所在二维数组中的位置打个比方

a[2][2]

分别有a[0][0]a[0][1] 11

a[1][0]a[1][1] 21 如果处在2的位置那么按下上也就是说数组元素a[1][0]变成了a[0][0] 如果用这里用a[x][y]来进行表示,那么就是等于x--;其他同理

回复收起回复

5楼

2011-12-07 15:47

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

最后我们来看一下main函数

int main()

{

int i,j;

srand((unsigned)time(NULL)); //初始化随即种子

hidden(); //隐藏光标

for(i=0;i<=Height+1;i++)

for(j=0;j<=Width+1;j++)

if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫

map[j]=Road;

else map[j]=Wall;

create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数

for(i=0;i<=Height+1;i++) //边界处理

{

map[0]=Wall;

map[Width+1]=Wall;

}

for(j=0;j<=Width+1;j++) //边界处理

{

map[0][j]=Wall;

map[Height+1][j]=Wall;

}

map[2][1]=Start; //给定入口

map[Height-1][Width]=End; //给定出口

for(i=1;i<=Height;i++)

for(j=1;j<=Width;j++) //画出迷宫

paint(i,j);

game(); //开始游戏

getch();

return 0;

}

先是srand来初始化随机种子为create打下基础

然后给map赋值输出后成四面全是墙,中间全是路的也就是000

010

000 //0是墙,1是路这样

然后用create生成正式的迷宫,根据rand来随机生成路线

之后重新处理边界,以及定义入口点和出口点,可以试着删掉

for(i=0;i<=Height+1;i++) //边界处理

{

map[0]=Wall;

map[Width+1]=Wall;

}

for(j=0;j<=Width+1;j++) //边界处理

{

map[0][j]=Wall;

map[Height+1][j]=Wall;

}

这段如果在入口处按左,你会发现BUG了!!

删掉这两段

map[2][1]=Start; //给定入口

map[Height-1][Width]=End; //给定出口

导致你一旦从入字走出,就再也走出不迷宫

最后使用print函数根据数组元素的值画出迷宫.

用game进行游戏循环并判断游戏是否结束

第一次写源码分析..蛋疼..尤其是发帖发了N次终于不知道为什么百度不和谐了最后..我爱C语言么么哒

回复(1) 收起回复

6楼

2011-12-07 15:48

举报|

zhaozhenyi403: 楼主好人,有时间研究下举报| 2013-2-1 23:50 回复

我也说一句

薛智艾

叶月无影

终于完整了..

回复收起回复

7楼

2011-12-07 16:05

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

给加精的同学来么么哒

回复收起回复

8楼

2011-12-07 16:22

举报|

我也说一句

EAgleLeo

...又来一遍,,,,

回复收起回复

9楼

2011-12-07 17:13

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

引用J半僊(10楼)

[图片]我想说4楼那打乱方向那段循环少了[i] 木有啊

回复收起回复

11楼

2011-12-07 18:06

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

引用J半僊(12楼)

4楼的============================================================ 下面讲第二个函数声明:void create(int x,int y) void create(int x,int y) //随机生成迷宫{ int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向// 这里的四个方向乃是0,1 1,0 0,-1 -1,0 代表着上下左右int i,j,t; //...

t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;

t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;

看最上面的代码. 复制没复制上可能是

回复收起回复

13楼

2011-12-07 20:20

举报|

我也说一句

lzp65090502

楼主好啊,请问一下不用方向键用鼠标或着触屏可以怎么改一下????急求

li_personal@https://www.360docs.net/doc/4718600363.html,

拜谢大虾。。。。

回复收起回复

14楼

2011-12-07 20:54

举报|

我也说一句

未来未来

追忆曾经_

团子家族

10

引用lzp65090502 (14楼)

楼主好啊,请问一下不用方向键用鼠标或着触屏可以怎么改一下????急求li_personal@https://www.360docs.net/doc/4718600363.html, 拜谢大虾。。。。

鼠标应该好说触屏我去哪知道去?不过不知道能不能在控制台下用鼠标控制

回复收起回复

15楼

2011-12-07 21:00

举报|

我也说一句

lzp65090502

引用追忆曾经_ (15楼)

鼠标应该好说触屏我去哪知道去?不过不知道能不能在控制台下用鼠标控制

鼠标如何操作啊???求解释一下啊,,,

我现在的情况主要是我们有一个嵌入式的系统,把它下载到那个上面的话最好就是能触屏,鼠标的话也可以,,,

回复收起回复

16楼

2011-12-07 21:06

c语言小游戏编程

程序设计实践 大作业 学号:20100302XXXX 姓名:XXX 班级:信息10-3班 实验题目:射击类飞机游戏 页脚内容1

成绩: 一.实验题目: 射击类飞机游戏 二.实验目的: 通过c语言编写一个射击类的打飞机小游戏,可以通过键盘来进行游戏,操作方法是“a”“d”“w”或者“←”“↑”“→”来控制,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次生还机会,游戏结束后可选择是否重新开始游戏…… 三.对游戏的改进: 这个游戏是我对一个小游戏进行的改造升级版,添加了颜色函数、终止函数,选择类函数,使游戏实现了可以终止,不再是分数、死亡数一直增加但是没有结束的情况;增加了颜色函数,使得游戏看起来更加的舒适;增加了终止函数,使游戏在死亡三次后自动结束游戏,并且可以选择是否重新开始游戏;另外增添了设置函数,使得可以对游戏进行设置,改变游戏大小,调整飞机运行速度等等,是游戏更加的人性化…… 四.实验内容 页脚内容2

编写出c语言代码,运行程序,并调试程序,最终实现游戏的功能。本程序主要包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,包含了不同的功能,对原来的程序作出了很大的改进,用到的主要语句有getche语句、for语句、while语句、printf语句、switch语句等等,添加了颜色函数,实现了诸多功能。可以在页面上显示制作人的主要信息等等…… 【流程图见打印版】 五.源程序: #include 页脚内容3

#include #include #include #define N 35 #define up 72 #define left 75 #define right 77 void run();//游戏控制函数 void yn();//设置是否继续游戏函数 void print(int [][N]);//输出函数 void movebul(int [][N]);//子弹移动函数 void movepla(int [][N]);//敌机移动函数 void setting(void);//设置函数 void menu(void);//菜单函数 int scr[22][N]={0},pl=9,width=24,speed=3,density=30,score=0,death=0;//全局变量:界面、我机初始位、界面宽度、敌机速度、敌机密度、得分、死亡 页脚内容4

C语言编程游戏代码

#include #include #include #include #include #define L 1 #define LX 15 #define L Y 4 static struct BLOCK { int x0,y0,x1,y1,x2,y2,x3,y3; int color,next; intb[]={{0,1,1,1,2,1,3,1,4,1},{1,0,1,3,1,2,1,1,4,0},{1,1,2,2,1,2,2,1,1,2},{0,1,1,1,1,0,2,0,2,4}, {0,0,0,1,1,2,1,1,2,3},{0,0,1,0,1,1,2,1,3,8},{1,0,1,1,2,2,2,1,2,5},{0,2,1,2,1,1,2,1,2,6},{0,1,0,2,1,1,1 ,0,3,9},{0,1,1,1,1,2,2,2,3,10},{1,1,1,2,2,1,2,0,3,7},{ 1,0,1,1,1,2,2,2,7,12},{0,1,1,1,2,1,2,0,7,13},{0 ,0,1,2,1,1,1,0,7,14},{0,1,0,2,1,1,2,1,7,11},{0,2,1,2,1,1,1,0,5,16},{0,1,1,1,2,2,2,1,5,17},{1,0,1,1,1, 2,2,0,5,18},{0,0,0,1,1,11,2,1,5,15},{0,1,1,1,1,0,2,1,6,2,0},{0,1,1,2,1,1,1,0,6,21},{0,1,1,2,1,1,2,1,6 ,22},{1,0,1,1,1,2,2,1,6,19}}; static int d[10]={33000,3000,1600,1200,900,800,600,400,300,200}; int Llevel,Lcurrent,Lnext,Lable,lx,ly,Lsum; unsigned Lpoint; int La[19][10],FLAG,sum; unsigned ldelay; void scrint(),datainit(),dispb(),eraseeb(); void throw(),judge(),delayp(),move(0,note(0,show(); int Ldrop(),Ljudge(),nextb(),routejudge(); } main() { char c; datainit(); Label=nextb(); Label=Ldrop(); while(1){ delayp(); if(Label!=0) { Ljudge(); Lable=nextb(); } ldelay--; if(ldelay==0)

C编写的小游戏

C编写的小游戏 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

#i n c l u d e usingnamespacestd; constcharMOUSE='*'; constcharWAY=''; constcharWALL='@'; constcharPASS='.'; constcharIMPASS='X'; classGame{ public: Game(size_tuWidth,size_tuHeight):m_uWidth(uWidth),m_uHeigh t(uHeight),m_pcMaze(newchar[uWidth*uHeight]),m_mouse(0,1){ srand(time(NULL)); char(*pcMaze)[m_uWidth]=reinterpret_cast(m_pcMaze); for(size_ti=0;im_uWidth-5)) pcMaze[i][j]=WAY;

elseif(i==0||i==m_uHeight- 1||j==0||j==m_uWidth-1) pcMaze[i][j]=WALL; else pcMaze[i][j]=rand()%4WAY:WALL; } ~Game(void){ if(m_pcMaze){ delete[]m_pcMaze; m_pcMaze=NULL; } } voidRun(void){ for(Show();!Quit()&&Step();); } private: classMouse{ public: Mouse(size_tx,size_ty):m_x(x),m_y(y){} size_tGetX(void){returnm_x;} size_tGetY(void){returnm_y;} voidStepRight(void){

C语言小游戏程序设计

程序设计实验 大作业 学院: 班级: 学号: 指导老师: 姓名: 实验项目名称:猜数字游戏成绩:

一、实验要求 根据所学知识编写一个小游戏--猜数字游戏 二、实验目的 为了加深对编程课程的基本知识的理解和掌握,并且掌握编程和程序调试的技巧通过程序的设计训练和提高学生的基本技能,掌握字符串的表示方法和字符串函数的功能、编程软件操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高解决实际问题的能力,巩固语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。 三、功能模块分析 1.系统能够随机产生一个1到1000的数字 2.比较输入数字与随机产生数字的大小 3.选择是否继续游戏 四、修改处 1.将输出内容由英文变为汉字 2.改变背景及输出字体的颜色 3将随机产生的数值范围由1-100变为1-1000 四、设计思路 # include # include # include main() { void textbackground(int color); system("color fc"); int a,b; char c; srand(time(NULL)); a=1+(rand()%1000); printf("这有一个数字从1到1000.\n你能猜出它吗?\n输入你猜的数字.\n"); scanf("%d",&b); while(b!=-1) { if(b==a) { printf("恭喜你猜对了!\n你喜欢再玩一遍吗?(y or n)?");

C编写的小游戏

C编写的小游戏集团档案编码:[YTTR-YTPT28-YTNTL98-UYTYNN08]

#i n c l u d e usingnamespacestd; constcharMOUSE='*'; constcharWAY=''; constcharWALL='@'; constcharPASS='.'; constcharIMPASS='X'; classGame{ public: Game(size_tuWidth,size_tuHeight):m_uWidth(uWidth),m_uHeight(uHe ight),m_pcMaze(newchar[uWidth*uHeight]),m_mouse(0,1){ srand(time(NULL)); char(*pcMaze)[m_uWidth]=reinterpret_cast(m_p cMaze); for(size_ti=0;im_uWidth-5)) pcMaze[i][j]=WAY; elseif(i==0||i==m_uHeight- 1||j==0||j==m_uWidth-1) pcMaze[i][j]=WALL; else pcMaze[i][j]=rand()%4?WAY:WALL; } ~Game(void){ if(m_pcMaze){ delete[]m_pcMaze; m_pcMaze=NULL; } } voidRun(void){ for(Show();!Quit()&&Step();); } private: classMouse{ public: Mouse(size_tx,size_ty):m_x(x),m_y(y){} size_tGetX(void){returnm_x;} size_tGetY(void){returnm_y;} voidStepRight(void){

使用C语言编写简单小游戏

纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on line》.它是e 时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude <> /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们. 让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c", 2)来输出一个笑脸. 现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧! 2,心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构: struct move_point { int x, y;/*该点的位置,包括x坐标和y坐标*/ int xv, yv;/*该点在x轴,y轴的速度*/ }; 运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码: gotoxy, ;/*把光标移到指定的坐标*/ printf(" ");/*输出一个空格,把先前的字符擦去*/ 然后我们让物体按其速度运动: += ;/*水平方向按x轴的速度运动*/ += ;/*垂直方向按y轴的速度运动*/ 运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸: gotoxy, ; printf("%c\b", 2); /*输出ASCII码值为2的"笑脸"字符*/ 怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧! 3,交互的实现——让我们来控制笑脸运动 这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句: while (bioskey(1) == 0);/*等待按键*/ key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/ 然后用switch语句来判断按键以及执行相关操作,如下: switch (key) /*对变量key的值进行判断*/ { case UP: /*如果按的是向上键*/ … break; /*让物体向上运动,并退出switch*/

c语言编写的小游戏代码

用vc6.0新建一个Win32 Application工程,把附件代码拷贝进去即可。上下左右键控制蛇的方向,空格键用于启动或者停止游戏。 上下左右空格键 #include #include #include #define C_W 516 #define C_H 548 //#define C_W 1024 //#define C_H 1024 #define GO_RIGHT 0x01 #define GO_DOWN 0x02 #define GO_LEFT 0x03 #define GO_UP 0x04 #define SNAKE_NUMBER 30 typedef struct node_struct { unsigned char direction; unsigned char cnt; }s_node,*s_node_handle; s_node s_count[SNAKE_NUMBER ]; typedef struct SNAKE { unsigned char Head_X; unsigned char Head_Y; unsigned char Tail_X; unsigned char Tail_Y; unsigned char h_index; unsigned char t_index;

unsigned char food_state; unsigned char score; unsigned char snake_state; } Snake_Data,*Snake_Data_handle; Snake_Data snk_1; #define MAP_X 64 #define MAP_Y 64 unsigned char game_map[MAP_Y][MAP_X]; LRESULT CALLBACK Win_tetris_Proc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ) { snk_1.Head_X = 0x01;//head x snk_1.Head_Y = 0x00;//head y snk_1.Tail_X = 0x00;//tail x snk_1.Tail_Y = 0x00;//tail y snk_1.h_index=0; snk_1.t_index=0; snk_1.food_state=0; snk_1.score=0; snk_1.snake_state = 1; s_count[snk_1.h_index].cnt=2; s_count[snk_1.h_index].direction=GO_RIGHT; s_count[snk_1.t_index].cnt=2; s_count[snk_1.t_index].direction=GO_RIGHT; WNDCLASS wndcls; wndcls.cbClsExtra=0;

如何用c语言编写小游戏

如何用c语言编写小游戏 ----------------------------精品word文档值得下载值得拥有---------------------------------------------- 纯真童趣的《泡泡堂》,还有武林情仇, 笑傲江湖的《剑侠情缘on line》.它是e时代常谈的话题,是交互 式娱乐的主力军,是一种 高层次的综合艺术,更是一个民族的文 化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一 个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机 专业都要学习的一门基础 学科.一般来说,是比较枯燥的.那么,我 们能不能通过编一些小 游戏来提高它的趣味性呢?这样学习程 序设计,就不会是一件艰苦 ----------------------------精品word文档值得下载值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档值得下载值得拥有----------------------------------------------

,枯燥的事,它变得象电脑游戏一样充满 好奇,富有乐趣.这正是 我发贴的目的. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印 一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的 C程序: #incolude /*把输入输出函 数的头文件包含进来*/ int main() { printf("Hello, ----------------------------精品word文档值得下载值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档值得下载值得拥有---------------------------------------------- world!");/*在屏幕上输出字符串"Hell o,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,

C语言编写的迷宫小游戏_源代码

C语言编写的迷宫小游戏源代码 #include #include #include #include #include #define N 20/*迷宫的大小,可改变*/ int oldmap[N][N];/*递归用的数组,用全局变量节约时间*/ int yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/ int way[100][2],wayn=0;/*way数组是显示路线用的,wayn是统计走了几个格子*/ void Init(void);/*图形初始化*/ void Close(void);/*图形关闭*/ void DrawPeople(int *x,int *y,int n);/*画人工探索物图*/ void PeopleFind(int (*x)[N]);/*人工探索*/ void WayCopy(int (*x)[N],int (*y)[N]);/*为了8个方向的递归,把旧迷宫图拷贝给新数组*/ int FindWay(int (*x)[N],int i,int j);/*自动探索函数*/ void MapRand(int (*x)[N]);/*随机生成迷宫函数*/ void PrMap(int (*x)[N]);/*输出迷宫图函数*/ void Result(void);/*输出结果处理*/ void Find(void);/*成功处理*/ void NotFind(void);/*失败处理*/ void main(void)/*主函数*/ { int map[N][N]; /*迷宫数组*/ char ch; clrscr(); printf("\n Please select hand(1) else auto\n");/*选择探索方式*/ scanf("%c",&ch); Init(); /*初始化*/ MapRand(map);/*生成迷宫*/ PrMap(map);/*显示迷宫图*/ if(ch=='1') PeopleFind(map);/*人工探索*/ else FindWay(map,1,1);/*系统自动从下标1,1的地方开始探索*/ Result();/*输出结果*/ Close(); } void Init(void)/*图形初始化*/ {

c语言编写小游戏系列教程之推动箱子,C_C++,自学去

设为首页收藏本站 快捷导航论坛视频教程c/c++PHP 问答平台编程文章 个人空间搜索QQ 群 热搜:c 语言java 编程教程自学去 学 论坛 编程语言 C/C++ c 语言编写小游戏系列教程之推动箱子 返回列表 电梯直达 楼主admin 在线 |每日签到 |我的 |设置 |消息 |提醒(2) |门户管理 |管理中心 |退出积分: 9681 | 用户组: 管理员请输入搜索内容帖子 索删除主题|升降|置顶|直播|高亮|精华|图章|图标|关闭|移动|分类|复制|合并|分割|修复|警告|屏蔽|标签|生成文章 查看: 519|回复: 1[精品文章] c语言编写小游戏系列教程之推动箱子 [复制链接] admin 790主题3975帖子9681积分 管理员 发表于 2015-1-4 18:47:19 | 只看该作者 上节课:https://www.360docs.net/doc/4718600363.html,/thread-15448-1-1.html 上节课中 我们已经实现了人物的移动,大家的可以发现,人物可以移动,但是却不能推动箱子,还能穿过障碍物和箱子。 这节课,我们的人物,就是解决这两个问题,推动箱子,还有障碍物检测。 在这之前不得不先说一个问题,随着程序代码越来越多,我们一个文件中代码已经很长了,这样不利于代码的阅读和维护,所以这节课我们决定将代码 按照功能来分成不同的文件,类似模块化编程,每个功能就是一个模块。如何把代码放到多个文件呢? 把代码的申明部分放到,头文件中,实现部分 放到源文件中。 消息 新听众(3)坛友互动(1) 我的帖子(1)

积分 9681 IP 编辑禁止帖子清理 比如,关于箱子操作的函数以及箱子的结构体定义,我们就放在 box.h 中 函数的具体功能实现就放在 box.c 中。人物操作 就放在 person.h 和 person.c 中。其他的也是 类似。 头文件如何写? 我们看看例子,下面是 box.h 的所有内容 01. #ifndef _BOX_H_02. #define _BOX_H_ 03. 04. #include 05. 06. //定义箱子结构体07. typedef struct{08. int x;09. int y;10. char flag;11. int state;12. } box_t; 13. 14. //设置箱子位置 15. void set_box(box_t*, int x, int y); 16. //移动箱子,返回0表示成功移动,返回非0表示不能移动17. int move_box(box_t*, dir_t);18. //根据地图坐标获取指定box 19. box_t* get_box(int x, int y);20. 21. #endif 复制代码

纯C语言写的一个小型游戏-源代码

纯C语言写的一个小型游戏-源代码

/* A simple game*/ /*CopyRight: Guanlin*/ #include #include #include #include #include #include struct object_fix { char name[20]; char id[5]; char desc[500]; char action[30]; char im[5]; }; struct object_move { char name[20]; char id[5]; char desc[500]; int loc; int pwr; int strg; char im[5]; }; struct rover { char name[20]; char id[5]; char desc[500]; int pwr; int strg; int location[2]; char im[5]; }; struct map /* this is the map structure*/ { char data[20]; char add_data[20]; int amount; int x; /* this were the successor keeps it's x & y values*/ int y; }; struct location /*this structure is for the successor lister*/ { float height; char obj;

纯C语言写的一个小型游戏源代码

/* A simple game*/ /*CopyRight: Guanlin*/ #include #include #include #include #include #include struct object_fix { char name[20]; char id[5]; char desc[500]; char action[30]; char im[5]; }; struct object_move { char name[20]; char id[5]; char desc[500]; int loc; int pwr; int strg; char im[5]; }; struct rover { char name[20]; char id[5]; char desc[500]; int pwr; int strg; int location[2]; char im[5]; }; struct map /* this is the map structure*/ { char data[20]; char add_data[20]; int amount; int x; /* this were the successor keeps it's x & y values*/ int y; }; struct location /*this structure is for the successor lister*/ { float height;

C语言编程2048小游戏

C语言编程2048小游戏 /*By Reason*/ #include #include #include #include #include #include //为了读取方向键 #include using namespace std; //srand( (unsigned)time( NULL ) ); //随机数种子不能用在这里 int pane[4][4]; //棋盘 int N=1; //2的n次方 void showpane() //显示棋盘 { cout<

cout<

如何用c语言编写小游戏

如何用 c 语言编写小游戏 ------------------ 精品word 文档值得下载值得拥有---------------- 纯真童趣的《泡泡堂》, 还有武林情仇, 笑傲江湖的《剑侠情缘on line 》. 它是e 时代常谈的话题, 是交互式娱乐的主力军, 是一种高层次的综合艺术, 更是一个民族的文化, 世界观的全新传播方式 . 作为游戏玩家的我们, 是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础 学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ------------------ 精品word 文档值得下载值得拥有---------------- 精品word 文档值得下载值得拥有

, 枯燥的事, 它变得象电脑游戏一样充满 好奇, 富有乐趣. 这正是我发贴的目的. 1, 总是从Hello,world 开始学习编程的第一个程序, 一般就是打印一个亲切 的词语——"Hell o,world!". 让我们来看看这个最简单的 C程序: #incolude /* 把输入输出函数的头文件包含进来*/ int main() { printf("Hello, ------------------ 精品word 文档值得下载值得拥有---------------- 精品word 文档值得下载值得拥有------ world!");/* 在屏幕上输出字符串"Hell o,world!"*/ return 0;/* 退出main 函数, 并返回0*/ } 面我们发现几个值得改进的地方,1, 程序的运行结果一闪而过 .2, 每执行这个程序一次都能看见上次运行留下的字符.3, 我们还希望屏幕输 出一个笑脸来欢迎我们. ( 大家不要小看了这个笑脸曾经有人发贴专门问呢) 让我们来改进一下这个程序吧!

C语言程序设计扫雷游戏

C语言程序设计报告题目: 扫雷小游戏设计 电子通信与物理学院 日期: 2018 年 7 月 12 日指导教师评语

目录 1. 课程设计容 (1) 2. 课程设计目的 (1) 3. 背景知识 (1)

4. 工具/准备工作 (3) 5. 设计步骤、方法 (3) 5.1 (3) 5.2定义全局变量 (4) 5.3挖雷部分函数的分析 (5) 6. 设计结果及分析 (11) 7. 设计结论 (16) 8. 参考文献 (17) 附录 (17)

1. 课程设计容 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用C-free编写了与它功能相仿的挖地雷游戏,寓学于乐。 即:设计一个功能与Windows中的挖雷游戏相同的小游戏。 2. 课程设计目的 1.培养学生综合运用所学知识独立完成课题的能力。 2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 4.培养勇于探索、严谨推理、实事、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核

如何用C语言编写游戏

如何用C语言编写游戏 网络游戏是常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小 游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.这正是 我要写这文档目的. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello,

world!");/*在屏幕上输出字符串"Hello,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们 还希望屏幕输出一个笑脸来欢迎我们.(大家不要小看了这个笑脸 曾经有人发贴专门问呢)让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结 束.2,在printf语句前用clrscr函数清屏,要使用这个函数和get ch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有 许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可

如何用c语言编写小游戏

如何用 c 语言编写小游戏 精品word 文档值得下载值得拥有 纯真童趣的《泡泡堂》, 还有武林情仇, 笑傲江湖的《剑侠情缘on line》.它是e时代常谈的话题,是 交互 式娱乐的主力军,是一种 高层次的综合艺术, 更是一个民族的文化, 世界观的全新传 播方式 . 作为游戏玩家的我们,是不是想设计 个属于自己的游戏呢? 爱玩是人的天性, 而 C 语言是我们计算机专业都要学习的 一门基础学科. 一般来说, 是比较枯燥的. 那么,我们能不能 通过编一些小游戏来提高它的趣味性呢?这样学习程 序设计, 就不会是一件艰苦 精品word 文档值得下载值得拥有 精品word 文档值得下载值得拥有

, 枯燥的事, 它变得象电脑游戏一样充满好奇, 富有乐趣. 这正是我发贴的目的. 1, 总是从Hello,world 开始学习编程的第一个程序, 一般就是打印一个亲切的词语——"Hell o,world!". 让我们来看看这个最简单的 C程序: #incolude /* 把输入输出函数的头文件包含进来*/ int main() printf("Hello, 精品word 文档值得下载值得拥有 精品word 文档值得下载值得拥有 world!");/* 在屏幕上输出字符串"Hell o,world!"*/ return 0;/* 退出main 函数, 并返回0*/ 面我们发现几个值得改进的地方,1, 程序的运行结果一闪而过 .2, 每执行这个程序一次都能看见上次运行留下的字符.3, 我们还希望屏幕输出一个笑脸来欢迎我们. ( 大家不要小看了这个笑脸曾经有人发贴专门问呢) 让我们来改进一下这个程序吧! 1, 在return 语句的前面加一句:getch 精品word 文档值得下载值得拥有

相关主题
相关文档
最新文档