您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C语言推箱子课程设计(附报告)
1(注:VC运行时,分别新建两个文件BotIt.cpp和Maps.h,再在同一目录下运行其中cpp)代码部分文件“BoxIt.cpp”如下:#includestdio.h#includeconio.h#includestdlib.h#includeMaps.h#defineAISLE//走廊#defineN_AISLE0#defineWALL■//墙壁#defineN_WALL1#defineAIM※//未放箱子的目标#defineN_AIM2#defineBOX□//未在目标位置的箱子#defineN_BOX3#defineMAN♀//人#defineN_MAN4#defineBOX_OK▲//■已经在目标位置的箱子[即已放箱子的目标]#defineN_BOX_OK5#defineMAN_IN*#defineN_MAN_IN6#defineESC0x1B#defineUP'w'#defineDOWN's'#defineLEFT'a'#defineRIGHT'd'#defineRESTART'r'#defineSAVE'x'#definePF(a)printf(%s,a)2structPoint{intx;inty;}man_p;/*小人坐标*///structFilename{intnum;charname[20];}filename[10];//intN;/*存档总人数*/intM;/*关数*/intstep;/*步数*/charx;voidwelcome();voidingame();voidplaygame(intmap[14][16]);/*玩游戏*/voiddisplaymap(intmap[14][16]);/*展示当前游戏界面*/voidfindman(int&a,int&b,intmap[14][16]);/*找到小人坐标位置*/unsignedchargetKey();/*获得有效按键返回按键值*/intgetmap(Pointp,intmap[14][16]);/*获得点p的地图值*/voidmoveman(Pointman_p,Pointmanf_p,intX,intY,intmap[14][16]);/*人移动*/voidmovebox(Pointbox_p,Pointboxf_p,intmap[14][16]);/*移箱子*/intwin(intmap[14][16]);/*判断当无※时赢*/voidchoosemap(intmap[14][16],inti);/*选关*/voidchangemap(intmap[14][16],intmapx[14][16]);/*换地图*/voidsave();/*保存当前*/intread();/*读取存档*/inta=0,b=0,c=0,d=0;//system(colora);intmain(){x='0';while(x!='4'){welcome();if(x=='3'&&read()==0)continue;if(x!='4')ingame();}return0;}voiddisplaymap(intmap[14][16]){inti,j;system(cls);printf(\t\t\tMisson%d\n\n,M);for(i=0;i14;i++){for(j=0;j16;j++){switch(map[i][j]){3caseN_AISLE:PF();break;caseN_WALL:PF(WALL);break;caseN_AIM:PF(AIM);break;caseN_BOX:PF(BOX);break;caseN_MAN:PF(MAN);break;caseN_BOX_OK:PF(BOX_OK);break;caseN_MAN_IN:PF(MAN_IN);default:;}}if(i==2)printf(Pressthekey:);if(i==3)printf('w'、'a'、's'、'd'tocontrol♀);if(i==5)printf('r'toreplay);if(i==7)printf('x'tosave);if(i==9)printf('ESC'backtothemenu);if(i==12)printf(Step:%d,step);PF(\n);}}voidplaygame(intmap[14][16]){intX,Y;Pointmanf_p,manff_p;//findman(man_p.x,man_p.y,map);displaymap(map);step=0;while(win(map)==0){findman(man_p.x,man_p.y,map);//printf(输入:);switch(getKey()){caseDOWN:4//printf(\n下\n);manf_p.x=man_p.x;manff_p.x=man_p.x;manf_p.y=man_p.y+1,manff_p.y=man_p.y+2;X=0,Y=1;break;caseUP://printf(\n上\n);manf_p.x=man_p.x;manff_p.x=man_p.x;manf_p.y=man_p.y-1,manff_p.y=man_p.y-2;X=0,Y=-1;break;caseLEFT://printf(\n左\n);manf_p.x=man_p.x-1;manff_p.x=man_p.x-2;manf_p.y=man_p.y;manff_p.y=man_p.y;X=-1,Y=0;break;caseRIGHT://printf(\n右\n);manf_p.x=man_p.x+1;manff_p.x=man_p.x+2;manf_p.y=man_p.y;manff_p.y=man_p.y;X=1,Y=0;break;caseSAVE:save();continue;caseRESTART:changemap(map,map0);M--;continue;caseESC:system(cls);changemap(map,map0);M=44;continue;default:;}//printf(\n人位置[%d%d]\n,man_p.y,man_p.x);//printf(\n人前方[%d%d]人前前方[%d%d]\n,manf_p.y,manf_p.x,manff_p.y,manff_p.x);switch(getmap(manf_p,map)){caseN_AISLE://0caseN_AIM://2moveman(man_p,manf_p,X,Y,map);5break;caseN_BOX://3caseN_BOX_OK://5if(getmap(manff_p,map)==N_AISLE||getmap(manff_p,map)==N_AIM){movebox(manf_p,manff_p,map);moveman(man_p,manf_p,X,Y,map);}break;default:;}displaymap(map);}if(M==42)printf(\n\tCongratulation!PassAll!!!\n\n\n\t);}voidfindman(int&a,int&b,intmap[14][16]){inti,j;for(i=0;i14;i++)for(j=0;j16;j++)if(map[i][j]==N_MAN||map[i][j]==N_MAN_IN)a=j,b=i;}unsignedchargetKey(){unsignedcharkey;do{key=getch();}while(key!=RESTART&&key!=ESC&&key!=LEFT&&key!=RIGHT&&key!=UP&&key!=DOWN&&key!='x'&&key!=0x1B&&key!='r');returnkey;}intgetmap(Pointp,intmap[14][16]){//printf(\n前方值%d\n,map[p.y][p.x]);returnmap[p.y][p.x];}voidmoveman(Pointman_p,Pointmanf_p,intX,intY,intmap[14][16]){map[manf_p.y][manf_p.x]=(map[manf_p.y][manf_p.x]==N_AIM||map[manf_p.y][manf_p.x]==N_BOX_OK)?N_MAN_IN:N_MAN;6map[man_p.y][man_p.x]=map[man_p.y][man_p.x]==N_MAN_IN?N_AIM:N_AISLE;//printf(\n移动后—小人位置值%d\n,map[manf_p.y][manf_p.x]);//printf(\n移动后—原小人位置值%d\n,map[man_p.y][man_p.x]);man_p.x+=X,man_p.y+=Y;step++;}voidmovebox(Pointbox_p,Pointboxf_p,intmap[14][16]){map[boxf_p.y][boxf_p.x]=map[boxf_p.y][boxf_p.x]==N_AISLE?N_BOX:N_BOX_OK;map[box_p.y][box_p.x]=map[box_p.y][box_p.x]==N_BOX?N_AISLE:N_AIM;}intwin(intmap[14][16]){inti,j;for(i=0;i14;i++)for(j=0;j16;j++)if(map[i][j]==2||map[i][j]==6)return0;return1;}voidchoosemap(intmap[14][16],inti){switch(i){case1:changemap(map,map1);break;case2:changemap(map,map2);break;case3:changemap(map,map3);break;case4:changemap(map,map4);break;case5:changemap(map,map5);break;case6:changemap(map,map6);break;case7:changemap(map,map7);break;case8:changemap(map,map8);break;case9:changemap(map,map9);break;case10:changemap(map,map10);break;case11:changemap(map,map11);break;case12:changemap(map,map12);break;case13:changemap(map,map13);break;case14:changemap(map,map14);break;case15:changemap(map,map15);break;case16:changemap(map,map16);break;case17:changemap(map,map17);break;7case18:changemap(map,map18);break;case19:changemap(map,map19);break;case20:changemap(map,map20);break;case21:changemap(map,map21);break;case22:changemap(map,map22);break;case23:changemap(map,map23);break;case24:changemap(map,map24);break;case25:changemap(map,map25);break;case26:changemap(map,map26);bre
本文标题:C语言推箱子课程设计(附报告)
链接地址:https://www.777doc.com/doc-1508375 .html