湖南商学院2(3)

2019-06-05 13:47

① void putoutChar(int y,int x,char fc,char bc),在屏幕上指定的位置输出指定的字符。

② int judge(int x,int y),判断位置(x,y)处的状态,状态值可参见“数据结构设计”部分。

③ void reset (int i),重置关卡。

其中在屏幕上的指定位置输出指定的字符函数的代码如下: void putoutChar(int y,int x,char ch,char fc,char bc) {

/*屏幕输出字符*/

printScreen[(x*160)+(y<<1)+0]=ch; /*指定字符颜色fc,背景色bc*/

printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc; }

7、主函数

主函数实现整个程序的控制,其游戏操作流程可参见图(二)。详细代码如下: void main() {

int key; /*记录按下的键*/

int x,y;

int s;/*记录未被推到目的地的箱子个数*/ int i=0; /*记录已经过了几关*/ winer *win,*pw;

_AL=3;/*设置寄存器AX低位*/ _AH=0; /*设置寄存器AX高位*/ geninterrupt(0x10); init();

win=initStep1();

do{

_AH=3; /*设置AH,读取光标位置*/ geninterrupt(0x10);

x=_DH+1;/*读取光标所在的行,加1*/ y=_DL+1; /*读取光标所在的列,加1*/

while(bioskey(1)==0);/*bioskey(1)返回0,直到有键按下*/ key=bioskey(0); /*返回按下的键*/ switch(key)

{

case 0x4800:/*如果按下向上键*/ move(x,y,'u'); break;

case 0x5000:/*如果按下向下键*/ move(x,y,'d');break;

case 0x4b00:/*如果按下向左键*/ move(x,y,'l');break;

case 0x4d00:/*如果按下向右键*/ move(x,y,'r');break;

第 11 页 共 26 页

case 0x3920:/*如果按下空格键*/ reset(i);break; default:break; } s=0;

pw=win;

while(pw) /*如果指针非空*/

{

if(status[pw->x][pw->y]=='m')/*如果目的地的状态为m,不是i,表示还有箱子未被推到目的地,该关还未完成*/

s++; /*未被推到目的地的箱子数*/ pw=pw->p;/*判断下一个目的地的状态*/ }/*该关完成*/ if(s==0)

{

free(win); /*释放分配的空间*/ gotoxy(15,20);

printf(\ getch(); i++;

switch(i) {

case 1:/*进入第二关*/ init();

win=initStep2(); break;

case 2:/*进入第三关*/ init();

win=initStep3(); break;

case 3:/*进入第四关*/ init();

win=initStep4(); break;

case 4:/*完成所有关*/ gotoxy(15,21);

printf(\ gotoxy(15,22);

printf(\ key=0x011b;/*设置键为Esc以便退出程序*/ getch();/*按任意键结束*/ break; default: break;

第 12 页 共 26 页

}

}

}while(key!=0x011b); _AL=3; _AH=0;

geninterrupt(0x10); }

四、参考文献

【1】《C程序设计(第三版)》,谭浩强编,清华大学出版社; 【2】《Turbo C 2.0实用大全》,常玉龙等编写,北京航空航天大学出版社; 【3】《C语言趣味程序百例精解》,陈朔鹰 陈英主编,北京理工大学出版社; 【4】《C游戏编程从入门到精通》,浦滨著, 北京希望电子出版社; 【5】《C函数实用手册》,张曜 郭立山 吴天著, 冶金工业出版社;

五、课程设计总结

推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带有这种游戏。它既能锻炼思维的严密性,又有很多乐趣。我个人也比较喜欢玩这个游戏,因此,我就借这个机会将这个推箱子游戏用C语言实现了出来,当然,我也借鉴了前人的一些技巧经验。由于时间仓促和本人水平有限,此游戏的制作显得有些粗糙,希望老师能够谅解,我以后将会再接再厉。

六、软件使用说明书

本游戏一共4关,由易到难,每一关都有初化、按键处理、重置及退出功能。

① 初始化包括屏幕初始化和每一关卡的初始化,屏幕被初始化宽80像素,高25像素。

② 按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为过关。

③ 每一关都可以重置,按空格键可以重置当前关。 ④ 按Esc键可以在任何时候退出游戏。

七、附录

#include #include #include #include #include #include typedef struct winer {

int x,y;

struct winer *p; }winer;

char status [20][20];

第 13 页 共 26 页

char far *printScreen=(char far* )0xB8000000; void putoutChar(int y,int x,char ch,char fc,char bc); 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 init();

winer *initStep1(); winer *initStep2(); winer *initStep3(); winer *initStep4();

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); int judge(int x, int y);

void move(int x, int y, char a); void reset(int i);

void putoutChar(int y,int x,char ch,char fc,char bc) {

printScreen[(x*160)+(y<<1)+0]=ch;

printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc; } void printWall(int x,int y) {

putoutChar(y-1,x-1,219,GREEN,BLACK); status[x][y]='w'; } void printBox(int x,int y) {

putoutChar(y-1,x-1,10,WHITE,BLACK); status[x][y]='b'; }

void printDestination1(int x,int y,winer **win,winer **pw) {

winer *qw;

putoutChar(y-1,x-1,003,YELLOW,BLACK); status[x][y]='m'; if(*win==NULL) {

*win=*pw=qw=(winer* )malloc(sizeof(winer)); (*pw)->x=x; (*pw)->y=y; (*pw)->p=NULL;} else {

qw=(winer* )malloc(sizeof(winer));

第 14 页 共 26 页

qw->x=x; qw->y=y;(*pw)->p=qw; (*pw)=qw;qw->p=NULL; } }

void printDestination(int x,int y) {

putoutChar(y-1,x-1,003,YELLOW,BLACK); status[x][y]='m'; } void printMan(int x,int y) {

gotoxy(y,x); _AL=02; _CX=01; _AH=0xa;

geninterrupt(0x10); }

void printBoxDes(int x,int y) {

putoutChar(y-1,x-1,10,YELLOW,BLACK); status[x][y]='i'; }

void init() {

int i,j;

for(i=0;i<20;i++) for(j=0;j<20;j++) status[i][j]=0; _AL=3; _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(40,4);

_CX=01;_AH=0xa;_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);

第 15 页 共 26 页


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

下一篇:论文提纲

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

马上注册会员

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