C语言推箱子游戏
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(y=9,x=2;x<=5;x++)
wall(x+4,y+10);
for(y=1,x=3;x<=8;x++)
wall(x+4,y+10);
for(x=3,y=3;x<=5;x++)
wall(x+4,y+10);
for(x=5,y=8;x<=9;x++)
wall(x+4,y+10);
for(x=7,y=4;x<=9;x++)
/*输出小人*/
state[x-2][y]='b'; /*墙体位置的状态标识*/
break;
/*按下下键的操作*/
case 'd':state[x+1][y]=0;
printf(" "); box(x+2,y); man(x+1,y);
state[x+2][y]='b'; break; /*按下左键的操作*/ case 'l':state[x][y-1]=0;
winer *pass1()/* 第一关的图象初始化 */
{
int x,y;
winer *win=NULL,*pw;/*初始化胜利Βιβλιοθήκη Baidu志*/ /*对围墙进行输出*/
for(x=1,y=5;y<=9;y++)
wall(x+4,y+10);
/*纵向画墙*/
for(y=5,x=2;x<=5;x++)
wall(x+4,y+10);
/* 移动在空地上的箱子到空地上 */ movebox(int x,int y,char a) {
switch(a)
{
/*按下上键的操作*/
case 'u':state[x-1][y]=0; /*空地位置的状态标识*/
printf(" ");
box(x-2,y);
/*输出箱子*/
man(x-1,y);
实现过程
运行Turbo C,新建一个C源文件,命名为PushBox.c,在这个源文件中编写程序代码。下面是主要的 实现过程。
(1)游戏界面实现。
玩家可以使用上下左右键来控制推箱子的方向,如果游戏无法继续,可以按下空格键,回到本关游 戏的开始,重新游戏。如果顺利完成游戏,玩家只要按下任意键即可进入游戏下一关。具体实现代码如 下:
同样的方法可以绘制后面关卡的界面。
(2)游戏控制模块的实现。
玩家在进入游戏后,使用上下左右键来操作游戏,在不同位置,游戏程序会调用不同的自定义函数来移动箱子,下面 具体介绍不同的自定义控制函数。
将箱子在空地之间进行移动,如果推动方向是空地则向前移动一个位置,如果推动方向是墙,箱子则原地不动,实现
函数如下所示:
printf(" "); box(x,y-2); man(x,y-1);
state[x][y-2]='b'; break; /*按下右键的操作*/ case 'r':state[x][y+1]=0; printf(" "); box(x,y+2);
man(x,y+1);
state[x][y+2]='b'; break; default: break;
} }
在箱子移动到目标位置后,如果为了下面步骤的需要,需要将箱子再次从目标位置移动到空地位置, 具体实现函数如下:
/* 移动在目的地上的箱子到空地上 */ goaltoarea(int x,int y,char a) { switch(a) { case 'u':state[x-1][y]='g'; printf(" "); box(x-2,y); man(x-1,y); state[x-2][y]='b'; break; case 'd':state[x+1][y]='g'; printf(" "); box(x+2,y); man(x+1,y); state[x+2][y]='b'; break; case 'l':state[x][y-1]='g'; printf(" "); box(x,y-2); man(x,y-1); state[x][y-2]='b'; break; case 'r':state[x][y+1]='g'; printf(" "); box(x,y+2); man(x,y+1); state[x][y+2]='b'; break; default: break; } }
(3)游戏说明模块的实现。 玩家在进入游戏后,游戏界面的右侧就会显示出游戏的操作使用说明,如使用上下左右键来控制
小人推箱子的方向以及如何回到本关游戏的开始。实现函数如下所示:
void init() { int i,j; for(i=0;i<20;i++) for(j=0;j<20;j++) state[i][j]=0; _AL=3; _AH=0; geninterrupt(0x10); gotoxy(30,4); printf("Welcome to BIGBOX world!"); gotoxy(30,6); printf("You can press up,down,left,right to control."); gotoxy(30,8); printf("Press Esc to quit it."); gotoxy(30,10); printf("Press space to reset the game."); }
wall(x+4,y+10);
for(x=9,y=5;y<=7;y++)
wall(x+4,y+10);
for(x=8,y=2;y<=3;y++)
wall(x+4,y+10);
wall(5+4,4+10);
wall(5+4,7+10);
wall(3+4,2+10);
/*初始化箱子位置*/ box(3+4,6+10); box(3+4,7+10); box(4+4,7+10); /*初始化目标位置*/ goal1(4+4,2+10,&win,&pw); goal1(5+4,2+10,&win,&pw); goal1(6+4,2+10,&win,&pw); /*初始化人的位置*/ man(2+4,8+10); return win; }
概述
推箱子是一个很有情趣的益智游戏,也是一个经典的游戏。这款游戏需要玩家有着综合性的思维去考虑 每一步的行走路线,可以培养玩家的综合性思维,提高远性思考的能力,使人在考虑问题的时候要全面考虑, 而不只考虑眼前的问题,行一时之便,可能后继无路。所以开发了本游戏供人们娱乐和训练思维之用。本游 戏通过操作键盘的上下左右键来操控游戏中游戏中的小人来推动箱子到目标位置。当玩家把所有的箱子都推 到目标位置,游戏会提示玩家进入下一关,本游戏共分四关。 推箱子游戏运行效果如图19.1所示。
图19.1 推箱子游戏运行界面
设计思路
制作推箱子游戏的设计思路如下: (1)明确推箱子游戏的游戏规则,如将空地上的箱子全部推到目标位置即可过关,推到墙角的箱 子不能再被推动。 (2)主函数中用一个while循环来实现游戏的运行。 (3)使用bioskey()函数检测键盘按键,并执行相应的动作。 (4)定义二维数组ghouse用来记录屏幕上各点的状态。 (5)自定义move()函数处理按下键盘后,人物移动。
技术要点
由于游戏中,要不停移动人物和箱子,那么也就要不停地对光标进行定位,下面就对光标的定 位函数gotoxy()进行介绍。 gotoxy()函数用于在文本窗口中设置光标,函数原型如下:
void gotoxy(int x, int y);
参数说明:x为窗口中的行,y为窗口的列。 本函数没有返回值,只是将光标定位到窗口中的指定位置。