您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C语言-推箱子实验报告
1福建工程学院计算机与信息科学系实验报告2011–2012学年第1学期任课老师:聂明星课程名称结构化程序设计班级1002座号15姓名林左权实验题目推箱子实验时间实验开始日期:9/15报告提交日期:9/20实验目的、要求一、实验题目:设计一个简单实用推箱子游戏程序。二、推箱子游戏介绍推箱子游戏1981年由日本人今林宏行首创,是在1982年12月由ThinkingRabbit公司首次发行,名“仓库番”。游戏规则:在设定的游戏地图里面,箱子只可以推,不可以拉,而且一次只能推动一个。胜利条件:把所有的箱子都推到目的地。1.图1-1推箱子游戏截图三、程序设计要求:2.地图大小为20*20,‘#’表示墙,‘0’表示箱子,‘*’表示‘人’,‘X’表示空位置,可以放箱子。初始地图如图2-1所示,光标显示在’*’下方。2图2-1推箱子初始地图3.使用方向键↑↓←→进行移动,在前进方向上没有墙阻挡时,可以一次移动‘人’(‘*’表示)一格;当‘人’与箱子(‘0’表示)相连接,如果对应方向没有墙‘#’阻挡,按方向键,则可以将箱子推动一格。4.当‘人’将箱子‘0’推入到空位置‘X’后,‘X’消失。5.当所有的箱子‘0’被推入箱子,游戏结束,在屏幕输出“YouWin!”。6.游戏过程中按‘空格’键,游戏结束。7.游戏过程中按‘ESC’键,游戏结束。实验步骤与内容:1、主要设计思想;(1)用状态数组status[20][20]保存每个坐标的信息,用bioskey函数接受键盘上的按键,以获取信息。算法思路(当人的四周都没有阻碍的情况下就可以自由行动;当人的相应某个方向上有墙壁的时候,人就不能往相应的方向上行走;当人的相应方向有箱子,箱子的对应方向是墙壁的话也不能推动箱子行走;当人或箱子就在目标地,退出来时候要回复原来目标地的标志X)2、主要数据结构及其解释(1)textcolor(10);/*给标识符的颜色换成浅绿色*/clrscr();/*清屏后才会显示出换色后的图案*/(2)/*保存原来status[20][20]的信息,因为status[20][20]的信息在人移动的时候会改变*/charstatus1[20][20];(3)/*loop是用来当用户按下空格键的时候从新开始*/loop:gotoloop;(4)gotoxy(40,5);/*跳到(40.5)这个坐标*/printf(*standforpeople.);/*输出一些控制信息*/3gotoxy(40,6);printf(#standforwall.);gotoxy(40,7);printf(*standforpeople.);gotoxy(40,8);printf(UseSpacetorestart!);gotoxy(40,9);printf(UseEsctoexit!);(5)/*打印status[20][20]里面的所有内容*/for(i=0;i20;i++){for(j=0;j20;j++)printf(%c,status[i][j]);printf(\n);}(6)/*判断是否所有目标位子都有箱子*/if(status[3][13]=='0'&&status[3][15]=='0')if(status[5][13]=='0'&&status[8][6]=='0')if(status[11][16]=='0'&&status[12][13]=='0')if(status[14][7]=='0'){clrscr();gotoxy(5,20);printf(YOUWIN!);}(7)/*一直循环知道有键按下的时候结束*/while(bioskey(1)==0);/*把从键盘接受的键的ASCII码保存在key里面*/key=bioskey(0);(8)/*当按下up键的时候,执行的一些算法操作,详情见主要设计思想*/if(key==0x4800)/*0x4800up*/if(y1){if(status[i-1][j]=='#');elseif(status[i-1][j]=='0'){if(status[i-2][j]=='#');elseif(status[i-2][j]=='0');4else{status[i-1][j]='';status[i-2][j]='0';printf();gotoxy(x,--y);printf(*);gotoxy(x,--y);printf(0);y++;gotoxy(x,y);i--;}}elseif(status[i][j]=='X'){printf(X);gotoxy(x,--y);printf(*);gotoxy(x,y);i--;}else{printf();gotoxy(x,--y);printf(*);gotoxy(x,y);i--;}}else;(9)/*当按下down键的时候,执行的一些算法操作,详情见主要设计思想*/elseif(key==0x5000)/*0x5000down*/if(y20){if(status[i+1][j]=='#');elseif(status[i+1][j]=='0'){if(status[i+2][j]=='#');elseif(status[i+2][j]=='0');else5{status[i+1][j]='';status[i+2][j]='0';printf();gotoxy(x,++y);printf(*);gotoxy(x,++y);printf(0);y--;gotoxy(x,y);i++;}}elseif(status[i][j]=='X'){printf(X);gotoxy(x,++y);printf(*);gotoxy(x,y);i++;}else{printf();gotoxy(x,++y);printf(*);gotoxy(x,y);i++;}}else;elseif(key==0x4b00)/*0x4b00left*/if(x1){if(status[i][j-1]=='#');elseif(status[i][j-1]=='0'){if(status[i][j-2]=='#');elseif(status[i][j-2]=='0');else{status[i][j-1]='';status[i][j-2]='0';6printf();gotoxy(--x,y);printf(*);gotoxy(--x,y);printf(0);x++;gotoxy(x,y);j--;}}elseif(status[i][j]=='X'){printf(X);gotoxy(--x,y);printf(*);gotoxy(x,y);j--;}else{printf();gotoxy(--x,y);printf(*);gotoxy(x,y);j--;}}else;(10)/*当按下left键的时候,执行的一些算法操作,详情见主要设计思想*/elseif(key==0x4b00)/*0x4b00left*/if(x1){if(status[i][j-1]=='#');elseif(status[i][j-1]=='0'){if(status[i][j-2]=='#');elseif(status[i][j-2]=='0');else{status[i][j-1]='';status[i][j-2]='0';7printf();gotoxy(--x,y);printf(*);gotoxy(--x,y);printf(0);x++;gotoxy(x,y);j--;}}elseif(status[i][j]=='X'){printf(X);gotoxy(--x,y);printf(*);gotoxy(x,y);j--;}else{printf();gotoxy(--x,y);printf(*);gotoxy(x,y);j--;}}else;(11)/*当按下right键的时候,执行的一些算法操作,详情见主要设计思想*/elseif(key==0x4d00)/*0x4d00right*/if(x20){if(status[i][j+1]=='#');elseif(status[i][j+1]=='0'){if(status[i][j+2]=='#');elseif(status[i][j+2]=='0');else{status[i][j+1]='';status[i][j+2]='0';8printf();gotoxy(++x,y);printf(*);gotoxy(++x,y);printf(0);x--;gotoxy(x,y);j++;}}elseif(status[i][j]=='X'){printf(X);gotoxy(++x,y);printf(*);gotoxy(x,y);j++;}else{printf();gotoxy(++x,y);printf(*);gotoxy(x,y);j++;}}else;(12)/*按下空格时重新开始游戏*/elseif(key==0x3920)/*空格*/{clrscr();x=y=2;strcpy(status[0],status1[0]);gotoloop;}(13)/*exit退出程序*/elseif(key==0x011b)exit(0);9三、流程图(见附录1)四、实验截图(见附录2)五、所有源代码;#includestdio.h#includebios.h#includectype.h#includestring.hintmain(){intkey,x=2,y=2,i,j;charstatus[20][20]={{####################},{#*############},{#0#####},{####0######X#X#},{########},{#X###},{###############},{######0#},{####X0##},{#########},{#0#########},{###X#},{########X###},{##########},{#0###X#######},{##0##},{#########},{##########},{###########},{####################}};charstatus1[20][20];textcolor(10);clrscr();loop:gotoxy(40,5);printf(*standforpeople.);gotoxy(40,6);printf(#standforwall.);gotoxy(40,7);printf(*standforpeople.);gotoxy(40,8);printf(UseSpacetorestart!);gotoxy(40,9);10printf(UseEsctoexit!);strcpy(status1[0],status[0]);gotoxy(1,1);printf(\b);for(i=0;i20;i++){for(j=0;j20;j++)printf(%c,status[i][j]);printf(\n);}gotoxy(x,y);i=1;j=1;while(1){if(status[3][13]=='0'&&status[3][15]=='0')if(status[5][13]=='0'&&status[8][6]=='0')if(status[11][16]=='0'&&status[12][13]=='0')if(status[14][7]=='0'){clrscr();gotoxy(5,20);printf(YOUWIN!);}else;while(bioskey(1)==0);key=bioskey(0);if(key==0x4800)/*0x4800up*/if(y1){if(status[i-1][j]=='#');elseif(st
本文标题:C语言-推箱子实验报告
链接地址:https://www.777doc.com/doc-5086789 .html