湖南商学院2(2)

2019-06-05 13:47

图(4)推箱子游戏初始状态

③ winer *initStep2(),初始化游戏的第二关。

图(5)推箱子游戏第二关

④ winer *initStep3(),初始化游戏的第三关。

图(6)推箱子游戏第三关

⑤ winer *initStep4(),初始化游戏的第四关。

第 6 页 共 26 页

图(7)推箱子游戏第四关

其中初始化屏幕函数的详细代码如下: void init() {

int i,j;

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

for(j=0;j<20;j++)

/*屏幕20*20范围内状态初始化为0,表示什么都没有*/ status[i][j]=0;

/*设置寄存器AX低位,80*25彩色方式显示*/

_AL=3;

/*设置寄存器AX高位*/ _AH=0;

geninterrupt(0x10);

/*移动光标到指定位置输出屏幕信息*/ gotoxy(41,4);

printf(\ gotoxy(41,6);

printf(\ gotoxy(41,8);

printf(\ gotoxy(41,10);

printf(\ gotoxy(40,12);

printf(\ gotoxy(40,14);

printf(\ gotoxy(18,24);

printf(\ gotoxy(40,4); _CX=01; _AH=0xa;

第 7 页 共 26 页

_AL=24;

geninterrupt(0x10); gotoxy(40,6); _CX=01; _AH=0xa; _AL=25;

geninterrupt(0x10); gotoxy(40,8); _CX=01; _AH=0xa; _AL=27;

geninterrupt(0x10); gotoxy(40,10); _CX=01; _AH=0xa; _AL=26;

geninterrupt(0x10); }

3、画图模块

该模块主要用于画图操作,包括画墙、画箱子、画目的地和画小人等。该模块包括以下几个函数。

① void printWall(int x,int y),用于画墙。

② void printBox(int x,int y),在空白地(非目的地)画箱子。 ③ void printBoxDes(int x,int y),在目的地画箱子。void printDestination(int x,int y),画目的地函数。

④ void printDestination1(int x,int y,winer **win,winer **pw),画目的地函数,并记录每个目的地的位置。

⑤ void printMan(int x,int y),画小人函数。 其中画墙函数的代码如下: void printWall(int x,int y) {

putoutChar(y-1,x-1,219,GREEN,BLACK);/*以黑色为背景画绿色墙,用小方块表示*/

status[x][y]='w'; /*记录状态为墙*/ }

4、移动箱子模块

该模块是实现箱子的移动。根据游戏规则,箱子可以在空地之间、目的地之间、空地和目的地之间来回移动,因此,实现本模块共有以下4个函数。

① void moveBoxSpacetoSpace(int x,int y,char a),把箱子从空地移动到空地。 ② void moveBoxDestoSpace(int x,int y,char a),把箱子从目的地移动到空地。 ③ void moveBoxSpacetoDes(int x,int y,char a),把箱子从空地移动到目的地。 ④ void moveBoxDestoDes(int x,int y,char a),把箱子从目的地移动到目的地。 其中从空地移动箱子到空地函数的详细代码如下: void moveBoxSpacetoSpace(int x,int y,char a)

第 8 页 共 26 页

{

switch(a)

{

case 'u':/*如果按向上键*/ status[x-1][y]=0;/*重设((x-1),y)位置的状态为0*/ printf(\清空(x,y)处原有的小人*/ printBox(x-2,y);/*在((x-2),y)处重新画箱子*/ printMan(x-1,y); /*在((x-1),y)处重新画小人*/ status[x-2][y]='b';/*重设((x-2),y)位置的状态为箱子*/ break;

case 'd':/*如果按向下键*/ status[x+1][y]=0; printf(\ printBox(x+2,y); printMan(x+1,y); status[x+2][y]='b';

break;

case 'l':/*如果按向左键*/ status[x][y-1]=0; printf(\ printBox(x,y-2); printMan(x,y-1); status[x][y-2]='b';

break;

case 'r':/*如果按向右键*/ status[x][y+1]=0; printf(\ printBox(x,y+2); printMan(x,y+1); status[x][y+2]='b'; break; default: break; } }

5、移动小人模块

移动小人模块是本程序的核心模块,仅由move()函数来实现。Move()函数控制小人的移动,并调用画图模块、移动箱子模块中的函数来实现箱子的重画、移动等操作。其操作流程可参见图(三)。部分代码如下: void move(int x,int y,char a) {

switch(a)

{

case 'u':

第 9 页 共 26 页

if(!judge(x-1,y))/*如果(x-1,y)即小人的下一步状态为墙*/ {

gotoxy(y,x); /*则跳转到(y,x),并跳出循环*/ break;

}

else

if(judge(x-1,y)==1||judge(x-1,y)==3)

{ /*如果小人的下一步状态为目的地或者什么都没有*/ if(judge(x,y)==3) /*如果当前状态为目的地*/ {

printDestination(x,y);/*画目的地*/

printMan(x-1,y); /*在新位置重新画小人*/ break; }

else /*如果下一步状态为0*/ {

printf(\/*输出空字符,覆盖当前状态的小人*/ printMan(x-1,y); /*在下一步重新画小人*/ break; }

}

else if(judge(x-1,y)==2) /*如果下一步状态是箱子*/

{

if(judge(x-2,y)==1) /*如果下下一步为空*/ {

moveBoxSpacetoSpace(x,y,'u'); /*则将箱子从空地向上移动到空地*/ if(judge(x,y)==3) /*如果当前状态为目的地*/ printDestination(x,y); /*画目的地*/ gotoxy(y,x-1); }

else if(judge(x-2,y)==3) /*如果下下一步为目的地*/ {

moveBoxSpacetoDes(x,y,'u'); /*则将箱子从空地向上移动到目的地*/ if(judge(x,y)==3)

printDestination(x,y); gotoxy(y,x-1); } else

gotoxy(y,x); break;

}

6、功能控制模块

功能控制模块包括屏幕输出功能、关卡重置功能和坐标位置状态的判断功能。该模块包括以下几个函数。

第 10 页 共 26 页


湖南商学院2(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:论文提纲

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: