900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 推箱子c语言代码有注释 C语言推箱子源代码推箱子代码完善

推箱子c语言代码有注释 C语言推箱子源代码推箱子代码完善

时间:2019-06-26 05:38:08

相关推荐

推箱子c语言代码有注释 C语言推箱子源代码推箱子代码完善

《C语言推箱子源代码推箱子代码完善》由会员分享,可在线阅读,更多相关《C语言推箱子源代码推箱子代码完善(10页珍藏版)》请在人人文库网上搜索。

1、include #include #include typedef struct MAP/地图int wall502;/墙int box92;/箱子int des92;/终点int overlap92;/箱子与终点的重叠位置int all,now;/总箱子个数,到位箱子个数int x,y;/起点 MAP,*map;/全局变量/int U=1,D=2,L=3,R=4; /定义按键状态/int jump;int ofx=10,ofy=9; /定义xy偏移量int player2;/玩家位置int nextp2,nextb2;/玩家下一步位置,箱子下一步位置MAP Pass5;/关卡数组map Gr。

2、oup,p;/关卡数组指针,当前关卡指针int level;/关卡等级int status;/玩家状态int boxc92,overlapc92;/箱子状态栈,重叠箱子状态栈int nowbox;/当前到位箱子个数int reset;/是否重玩/声明全部函数/void Pos(int x,int y)/设置光标位置COORD pos;HANDLE hOutput;pos.X=x;pos.Y=y;hOutput=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOutput,pos);system(color 3B);void w。

3、elcometogame()/开始界面system(title 程序设计之推箱子);Pos(28,3);printf(欢迎来到推箱子!);Pos(50,24);printf( 软件1603 刘刈 n);Pos(27,9);printf(用.控制人物的移动。);Pos(27,10);printf(按空格键重新开始此局。);Pos(27,11);printf(按ESC结束游戏。n);Pos(0,22);system(pause);if(GetAsyncKeyState(VK_ESCAPE)system(cls);Pos(34,14);printf(欢迎下次再玩。);Pos(25,20);p。

4、rintf(请按任意键退出。);getch();exit(0);system(cls);void inputmap(int a2)/创建地图数据int i,k;p-x=a00;p-y=a01;/玩家坐标p-all=a10;p-now=a11;/箱子状态for(k=0,i=2; inow; i+,k+) /输入重叠箱子信息p-overlapk0=ai0;p-overlapk1=ai1;for(k=0; inow+p-all; i+,k+) /输入终点信息p-desk0=ai0;p-desk1=ai1;for(k=0; inow+2*p-all; i+,k+) /输入箱子信息p-boxk0=ai0。

5、;p-boxk1=ai1;for(k=0; ai0!=666; i+,k+) /输入墙的信息p-wallk0=ai0;p-wallk1=ai1;void initgame()/初始化游戏/00,01是玩家起始位置,10,11是箱子个数和到位个数,/之后是重叠箱子位置,终点位置,箱子位置,墙位置int a0502= 4,4,4,0,1,4,3,1,4,6,6,3,3,3,3,4,4,5,5,3,0,3,0,4,0,5,1,3,1,5,2,0,2,1,2,2,2,3,2,5,3,0,3,5,3,6,3,7,4,0,4,1,4,2,4,7,5,2,5,4,5,5,5,6,5,7,6,2,6,4,7,。

6、2,7,3,7,4,666,666,a1502= 1,1,3,0,7,3,7,4,7,5,2,2,2,3,3,2,0,0,0,1,0,2,0,3,0,4,1,0,1,4,1,5,1,6,1,7,1,8,2,0,2,4,2,5,2,8,3,0,3,8,4,0,4,1,4,2,4,3,4,4,4,8,5,4,5,6,5,7,5,8,6,2,6,3,6,4,6,7,7,2,7,7,8,2,8,3,8,4,8,5,8,6,8,7,666,666,a2502= 2,3,4,0,2,4,2,5,3,4,3,5,2,2,4,3,6,4,7,3,0,2,0,3,0,4,0,5,1,0,1,1,1,2,1,5,。

7、1,6,2,0,2,6,3,0,3,2,3,6,4,0,4,2,4,4,4,5,4,6,5,0,5,2,5,6,6,0,6,6,7,0,7,1,7,6,8,1,8,4,8,5,8,6,9,1,9,2,9,3,9,4,666,666,a3502= 1,2,5,1,3,6,1,5,1,6,2,6,3,6,4,6,2,2,2,3,2,5,3,4,3,6,0,1,0,2,0,3,0,4,0,5,0,6,0,7,1,0,1,1,1,3,1,4,1,7,2,0,2,7,3,0,3,7,4,0,4,1,4,2,4,3,4,7,5,3,5,4,5,5,5,6,5,7,666,666;Group=Pass;p=。

8、Group+0;inputmap(a0);p=Group+1;inputmap(a1);p=Group+2;inputmap(a2);p=Group+3;inputmap(a3);void printfoverlap(int b92)/打印重叠箱子位置int i;for(i=0; iwall00+ofx),p-wall01+ofy);printf();for(i=1; p-walli0!=0 | p-walli1!=0; i+) /打印墙Pos(2*(p-walli0+ofx),p-walli1+ofy);printf();for(i=0; p-desi0!=0 | p-desi1!=0; i。

9、+) /打印终点Pos(2*(p-desi0+ofx),p-desi1+ofy);printf();for(i=0; p-boxi0!=0 | p-boxi1!=0; i+) /打印箱子Pos(2*(p-boxi0+ofx),p-boxi1+ofy);printf();printfoverlap(p-overlap);/打印重叠箱子位置Pos(2*(p-x+ofx),p-y+ofy);/打印玩家位置printf();Pos(79,29);void copybox(int copy92,int b92)/复制箱子信息int i;for(i=0; iwalli0!=0|p-walli1!=0; i。

10、+) /判断玩家下一步是否与墙重合if(p-walli0=nextp0&p-walli1=nextp1)con=0;/重合使con为0break;if(con=1)/1下一步没有墙for(i=0,con=2; boxci0!=0|boxci1!=0; i+) /判断下一步是否有箱子if(boxci0=nextp0&boxci1=nextp1)con=3;/下一步有箱子使con为3j=i;/保存要移动的箱子break;if(con=3)/3下一步有箱子trans(nextb,nextp);/更新盒子下一步for(i=1,con=4; p-walli0!=0|p-walli1!=0; i+) /判。

11、断箱子下一步是否与墙重合if(p-walli0=nextb0&p-walli1=nextb1)con=5;/箱子下一步与墙重合使con为5break;if(con=4)/4箱子下一步没有墙for(i=0,con=6; boxci0!=0|boxci1!=0; i+) /判断箱子下一步是否有其他箱子if(boxci0=nextb0&boxci1=nextb1)con=7;/箱子下一步有其他箱子使con为7break;if(con=6)/6箱子下一步没有墙并且也没有其他箱子Pos(2*(nextb0+ofx),nextb1+ofy);printf();Pos(2*(nextp0+ofx),next。

12、p1+ofy);printf();Pos(2*(player0+ofx),player1+ofy);printf( );for(i=0; p-desi0!=0|p-desi1!=0; i+) /当前玩家位置是否有终点标记if(p-desi0=player0&p-desi1=player1)Pos(2*(player0+ofx),player1+ofy);printf();break;for(i=0; p-desi0!=0|p-desi1; i+) /判断要移动的箱子是否在终点上if(p-desi0=boxcj0&p-desi1=boxcj1)nowbox-;/当前到位的箱子数减一for(k=0。

13、; kdesi0&overlapck1=p-desi1)overlapck0=0;overlapck1=0;break;break;for(i=0; p-desi0!=0|p-desi1; i+) /判断下一个箱子是否在终点上if(p-desi0=nextb0&p-desi1=nextb1)nowbox+;/当前到位的箱子数减加一for(k=0; kdesi0;overlapck1=p-desi1;break;break;printfoverlap(overlapc);Pos(79,29);boxcj0=nextb0;boxcj1=nextb1;player0=nextp0;player1=n。

14、extp1;else if(con=2)/2下一步没有墙没有箱子Pos(2*(nextp0+ofx),nextp1+ofy);printf();Pos(2*(player0+ofx),player1+ofy);printf( );for(i=0; p-desi0!=0|p-desi1!=0; i+) /当前玩家位置是否有终点标记if(p-desi0=player0&p-desi1=player1)Pos(2*(player0+ofx),player1+ofy);printf();break;Pos(79,29);player0=nextp0;player1=nextp1;status=0;vo。

15、id gamecircle()/控制游戏,根据当前按键保存玩家状态copybox(boxc,p-box);copybox(overlapc,p-overlap);player0=p-x;player1=p-y;nowbox=p-now;/还原游戏初始状态while(1)Sleep(80);if(GetAsyncKeyState(VK_ESCAPE)system(cls);Pos(34,14);printf(欢迎下次再玩。);Sleep(800);exit(0);if(GetAsyncKeyState(VK_SPACE)reset=1;break;else if(GetAsyncKeyState。

16、(VK_UP)status=U;else if(GetAsyncKeyState(VK_DOWN)status=D;else if(GetAsyncKeyState(VK_LEFT)status=L;else if(GetAsyncKeyState(VK_RIGHT)status=R;if(nowbox=p-all)/完成此局break;move();void startgame()/开始游戏while(1)system(cls);Pos(25,5);printf(第%d关,level+1);Pos(40,20);printf(按空格键重新开始此关游戏。);Pos(40,21);printf(。

17、按ESC键结束游戏。);loadmap();getch(); /防止第一次按键对游戏的影响gamecircle();if(reset=0)/reset为0不重玩break;else if(reset=1)/reset为1重玩reset=0;/ if(jump=0)/ break;/ else if(jump=1)/ jump=0;Sleep(300);int main()system(mode con cols=80 lines=25); /控制台宽度80,高度25welcometogame(); /欢迎界面initgame(); /初始化地图信息,创建关卡地图for(level=0; level4; level+) /开始游戏p=Group+level;startgame();system(cls);Pos(32,14);printf(您已通关!n);Pos(0,20);system(pause。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。