推箱子2.0版本,增加了通关功能,但是延迟偏高
#include<stdio.h> #include<Windows.h> #include<stdlib.h> #include<conio.h> #include<windef.h> //请设置属性为中文 //EM作品,未经许可不得转载 int x,SAVE[10][12]; //0:空地;1:墙壁;3:目的地;4:箱子;6:人;7:已完成;9:人在目的地 int map[2/*这里可以修改地图上限*/][10][12]= { { {1,1,1,1,1,0,0,0,0,0,0,0}, {1,0,0,0,1,0,0,0,0,0,0,0}, {1,0,4,0,1,0,1,1,1,1,1,1}, {1,0,4,6,1,0,1,0,0,0,3,1}, {1,1,1,4,1,1,1,0,0,0,3,1}, {0,1,0,0,0,0,0,0,0,0,3,1}, {0,1,0,0,0,1,0,0,0,0,0,1}, {0,1,0,0,0,1,0,0,0,0,0,1}, {0,1,1,1,1,1,0,0,0,0,0,1}, {0,0,0,0,0,1,1,1,1,1,1,1}, }, { {0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,1,1,1,1,0,0,0,0,0}, {0,1,0,0,0,0,1,1,1,1,1,1}, {1,1,4,1,1,0,1,0,0,0,0,1}, {1,0,6,0,1,0,0,0,0,0,0,1}, {1,0,0,1,1,1,0,0,0,0,0,1}, {1,0,0,0,4,0,0,4,0,0,0,1}, {1,0,3,3,1,0,4,0,0,0,1,1}, {1,1,3,3,1,0,0,0,1,1,1,0}, {0,1,1,1,1,1,1,1,1,0,0,0}, }, /*修改地图上限后可以在这里按照上面的提示以及格式增加/编辑地图*/ //增加地图 }; //打印地图 void PrintMap() { printf("PRESS Esc to exit\n"); for(int i=0;i<10;i++) { for(int j=0;j<12;j++) { switch(map[x][i][j]) { case 0: { printf(" "); break; } case 1: { printf("■"); break; } case 3: { printf("☆"); break; } case 4: { printf("□"); break; } case 6: { printf("♀"); break; } case 7: { printf("★"); break; } case 9: { printf("♀"); break; } } } printf("\n"); } } //获取坐标 POINT get() { POINT pos={-1,-1}; for(int i=0;i<=10;i++) for(int j=0;j<=12;j++) if(map[x][i][j]==6||map[x][i][j]==9) { pos.x=i; pos.y=j; return pos; } return pos; } void up() { POINT pos=get(); if(map[x][pos.x-1][pos.y]==0)//上面是空地 { map[x][pos.x-1][pos.y]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x-1][pos.y]==3)//上面是目的地 { map[x][pos.x-1][pos.y]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x-1][pos.y]==4)//上面是箱子 { if(map[x][pos.x-2][pos.y]==0)//箱子上面是空地 { map[x][pos.x-2][pos.y]=4; map[x][pos.x-1][pos.y]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x-2][pos.y]==3)//箱子上面是目的地 { map[x][pos.x-2][pos.y]=7; map[x][pos.x-1][pos.y]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } else if(map[x][pos.x-1][pos.y]==7)//上面已完成 { if(map[x][pos.x-2][pos.y]==0)//箱子上面是空地 { map[x][pos.x-2][pos.y]=4; map[x][pos.x-1][pos.y]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x-2][pos.y]==3)//箱子上面是目的地 { map[x][pos.x-2][pos.y]=7; map[x][pos.x-1][pos.y]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } } void left() { POINT pos=get(); if(map[x][pos.x][pos.y-1]==0)//左边是空地 { map[x][pos.x][pos.y-1]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x][pos.y-1]==3)//左边是目的地 { map[x][pos.x][pos.y-1]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x][pos.y-1]==4)//左边是箱子 { if(map[x][pos.x][pos.y-2]==0)//箱子左边是空地 { map[x][pos.x][pos.y-2]=4; map[x][pos.x][pos.y-1]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } if(map[x][pos.x][pos.y-2]==3)//箱子左边是目的地 { map[x][pos.x][pos.y-2]=7; map[x][pos.x][pos.y-1]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } else if(map[x][pos.x][pos.y-1]==7)//左边已完成 { if(map[x][pos.x][pos.y-2]==0)//箱子左边是空地 { map[x][pos.x][pos.y-2]=4; map[x][pos.x][pos.y-1]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x][pos.y-2]==3)//箱子左边是目的地 { map[x][pos.x][pos.y-2]=7; map[x][pos.x][pos.y-1]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } } void down() { POINT pos=get(); if(map[x][pos.x+1][pos.y]==0)//下面是空地 { map[x][pos.x+1][pos.y]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x+1][pos.y]==3)//下面是目的地 { map[x][pos.x+1][pos.y]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x+1][pos.y]==4)//下面是箱子 { if(map[x][pos.x+2][pos.y]==0)//箱子下面是空地 { map[x][pos.x+2][pos.y]=4; map[x][pos.x+1][pos.y]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x+2][pos.y]==3)//箱子下面是目的地 { map[x][pos.x+2][pos.y]=7; map[x][pos.x+1][pos.y]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } else if(map[x][pos.x+1][pos.y]==7)//下面已完成 { if(map[x][pos.x+2][pos.y]==0)//箱子下面是空地 { map[x][pos.x+2][pos.y]=4; map[x][pos.x+1][pos.y]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x+2][pos.y]==3)//箱子下面是目的地 { map[x][pos.x+2][pos.y]=7; map[x][pos.x+1][pos.y]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } } void right() { POINT pos=get(); if(map[x][pos.x][pos.y+1]==0)//右边是空地 { map[x][pos.x][pos.y+1]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x][pos.y+1]==3)//右边是目的地 { map[x][pos.x][pos.y+1]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x][pos.y+1]==4)//右边是箱子 { if(map[x][pos.x][pos.y+2]==0)//箱子右边是空地 { map[x][pos.x][pos.y+2]=4; map[x][pos.x][pos.y+1]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x][pos.y+2]==3)//箱子右边是目的地 { map[x][pos.x][pos.y+2]=7; map[x][pos.x][pos.y+1]=6; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } else if(map[x][pos.x][pos.y+1]==7)//右边已完成 { if(map[x][pos.x][pos.y+2]==0)//箱子右边是空地 { map[x][pos.x][pos.y+2]=4; map[x][pos.x][pos.y+1]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } else if(map[x][pos.x][pos.y+2]==3)//箱子右边是目的地 { map[x][pos.x][pos.y+2]=7; map[x][pos.x][pos.y+1]=9; if(map[x][pos.x][pos.y]==9) map[x][pos.x][pos.y]=3; else map[x][pos.x][pos.y]=0; } } } void save() { system("cls"); for(int i=0;i<10;i++) for(int j=0;j<12;j++) SAVE[i][j]=map[x][i][j]; printf("GAME SAVED"); int Esc=getch(); } void save_1st() { system("cls"); for(int i=0;i<10;i++) for(int j=0;j<12;j++) SAVE[i][j]=map[x][i][j]; } void reset_() { system("cls"); for(int i=0;i<10;i++) for(int j=0;j<12;j++) map[x][i][j]=SAVE[i][j]; printf("GAME RESETED"); int Esc=getch(); } void help() { system("cls"); printf("press \"wasd\" or arrow keys to move\nPRESS S to save\nPRESS R to reset"); int Esc=getch(); } int box() { int s=0; for(int i=0;i<10;i++) for(int j=0;j<12;j++) if(map[x][i][j]==4)s++; return s; } void play() { while(1) { //清屏 system("cls"); //打印地图 PrintMap(); char arrow=getch(); switch(arrow) { case 'w':case 72:up(); break; case 's':case 80:down(); break; case 'a':case 75:left(); break; case 'd':case 77:right(); break; case 'S':save(); break; case 'R':reset_(); break; case 27:return; } if(box()==0)x++; } } int main() { //标题 SetConsoleTitle("box"); //窗口大小 system("mode con cols=26 lines=12"); save_1st(); char mode; while(1) { system("cls"); printf("PRESS\na:play\nb:help\nc:exit"); mode=getch(); switch(mode) { case 'a':play();break; case 'b':help();break; case 'c':return 0; } } }
如果大家对bug有修改意见,欢迎在下方留言来获取许可以复制,谢谢配合!
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。#include<stdio.h>#include<Windows.h>#include<stdlib.h>#include<conio.h>#include<windef.h>//请设置属性为中文//EM作品,未经许可不得转载int x,SAVE[10][12];//0:空地;1:墙壁;3:目的地;4:箱子;6:人;7:已完成;9:人在目的地int map[2][10][12]={{{1,1,1,1,1,0,0,0,0,0,0,0},{1,0,0,0,1,0,0,0,0,0,0,0},{1,0,4,0,1,0,1,1,1,1,1,1},{1,0,4,6,1,0,1,0,0,0,3,1},{1,1,1,4,1,1,1,0,0,0,3,1},{0,1,0,0,0,0,0,0,0,0,3,1},{0,1,0,0,0,1,0,0,0,0,0,1},{0,1,0,0,0,1,0,0,0,0,0,1},{0,1,1,1,1,1,0,0,0,0,0,1},{0,0,0,0,0,1,1,1,1,1,1,1},},{{0,0,0,0,0,0,0,0,0,0,0,0},{0,1,1,1,1,1,1,0,0,0,0,0},{0,1,0,0,0,0,1,1,1,1,1,1},{1,1,4,1,1,0,1,0,0,0,0,1},{1,0,6,0,1,0,0,0,0,0,0,1},{1,0,0,1,1,1,0,0,0,0,0,1},{1,0,0,0,4,0,0,4,0,0,0,1},{1,0,3,3,1,0,4,0,0,0,1,1},{1,1,3,3,1,0,0,0,1,1,1,0},{0,1,1,1,1,1,1,1,1,0,0,0},},};//打印地图void PrintMap(){printf("PRESS Esc to exit\n");for(int i=0;i<10;i++){for(int j=0;j<12;j++){switch(map[x][i][j]){case 0:{printf(" ");break;}case 1:{printf("■");break;}case 3:{printf("☆");break;}case 4:{printf("□");break;}case 6:{printf("♀");break;}case 7:{printf("★");break;}case 9:{printf("♀");break;}}}printf("\n");}}//获取坐标POINT get(){POINT pos={-1,-1};for(int i=0;i<=10;i++)for(int j=0;j<=12;j++)if(map[x][i][j]==6||map[x][i][j]==9){pos.x=i;pos.y=j;return pos;}return pos;}void up(){POINT pos=get();if(map[x][pos.x-1][pos.y]==0)//上面是空地{map[x][pos.x-1][pos.y]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x-1][pos.y]==3)//上面是目的地{map[x][pos.x-1][pos.y]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x-1][pos.y]==4)//上面是箱子{if(map[x][pos.x-2][pos.y]==0)//箱子上面是空地{map[x][pos.x-2][pos.y]=4;map[x][pos.x-1][pos.y]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x-2][pos.y]==3)//箱子上面是目的地{map[x][pos.x-2][pos.y]=7;map[x][pos.x-1][pos.y]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}elseif(map[x][pos.x-1][pos.y]==7)//上面已完成{if(map[x][pos.x-2][pos.y]==0)//箱子上面是空地{map[x][pos.x-2][pos.y]=4;map[x][pos.x-1][pos.y]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x-2][pos.y]==3)//箱子上面是目的地{map[x][pos.x-2][pos.y]=7;map[x][pos.x-1][pos.y]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}}void left(){POINT pos=get();if(map[x][pos.x][pos.y-1]==0)//左边是空地{map[x][pos.x][pos.y-1]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x][pos.y-1]==3)//左边是目的地{map[x][pos.x][pos.y-1]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x][pos.y-1]==4)//左边是箱子{if(map[x][pos.x][pos.y-2]==0)//箱子左边是空地{map[x][pos.x][pos.y-2]=4;map[x][pos.x][pos.y-1]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}if(map[x][pos.x][pos.y-2]==3)//箱子左边是目的地{map[x][pos.x][pos.y-2]=7;map[x][pos.x][pos.y-1]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}elseif(map[x][pos.x][pos.y-1]==7)//左边已完成{if(map[x][pos.x][pos.y-2]==0)//箱子左边是空地{map[x][pos.x][pos.y-2]=4;map[x][pos.x][pos.y-1]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x][pos.y-2]==3)//箱子左边是目的地{map[x][pos.x][pos.y-2]=7;map[x][pos.x][pos.y-1]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}}void down(){POINT pos=get();if(map[x][pos.x+1][pos.y]==0)//下面是空地{map[x][pos.x+1][pos.y]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x+1][pos.y]==3)//下面是目的地{map[x][pos.x+1][pos.y]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x+1][pos.y]==4)//下面是箱子{if(map[x][pos.x+2][pos.y]==0)//箱子下面是空地{map[x][pos.x+2][pos.y]=4;map[x][pos.x+1][pos.y]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x+2][pos.y]==3)//箱子下面是目的地{map[x][pos.x+2][pos.y]=7;map[x][pos.x+1][pos.y]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}elseif(map[x][pos.x+1][pos.y]==7)//下面已完成{if(map[x][pos.x+2][pos.y]==0)//箱子下面是空地{map[x][pos.x+2][pos.y]=4;map[x][pos.x+1][pos.y]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x+2][pos.y]==3)//箱子下面是目的地{map[x][pos.x+2][pos.y]=7;map[x][pos.x+1][pos.y]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}}void right(){POINT pos=get();if(map[x][pos.x][pos.y+1]==0)//右边是空地{map[x][pos.x][pos.y+1]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x][pos.y+1]==3)//右边是目的地{map[x][pos.x][pos.y+1]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x][pos.y+1]==4)//右边是箱子{if(map[x][pos.x][pos.y+2]==0)//箱子右边是空地{map[x][pos.x][pos.y+2]=4;map[x][pos.x][pos.y+1]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x][pos.y+2]==3)//箱子右边是目的地{map[x][pos.x][pos.y+2]=7;map[x][pos.x][pos.y+1]=6;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}elseif(map[x][pos.x][pos.y+1]==7)//右边已完成{if(map[x][pos.x][pos.y+2]==0)//箱子右边是空地{map[x][pos.x][pos.y+2]=4;map[x][pos.x][pos.y+1]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}elseif(map[x][pos.x][pos.y+2]==3)//箱子右边是目的地{map[x][pos.x][pos.y+2]=7;map[x][pos.x][pos.y+1]=9;if(map[x][pos.x][pos.y]==9)map[x][pos.x][pos.y]=3;elsemap[x][pos.x][pos.y]=0;}}}void save(){system("cls");for(int i=0;i<10;i++)for(int j=0;j<12;j++)SAVE[i][j]=map[x][i][j];printf("GAME SAVED");int Esc=getch();}void save_1st(){system("cls");for(int i=0;i<10;i++)for(int j=0;j<12;j++)SAVE[i][j]=map[x][i][j];}void reset_(){system("cls");for(int i=0;i<10;i++)for(int j=0;j<12;j++)map[x][i][j]=SAVE[i][j];printf("GAME RESETED");int Esc=getch();}void help(){system("cls");printf("press \"wasd\" or arrow keys to move\nPRESS S to save\nPRESS R to reset");int Esc=getch();}int box(){int s=0;for(int i=0;i<10;i++)for(int j=0;j<12;j++)if(map[x][i][j]==4)s++;return s;}void play(){while(1){//清屏system("cls");//打印地图PrintMap();char arrow=getch();switch(arrow){case 'w':case 72:up();break;case 's':case 80:down();break;case 'a':case 75:left();break;case 'd':case 77:right();break;case 'S':save();break;case 'R':reset_();break;case 27:return;}if(box()==0)x++;}}int main(){//标题SetConsoleTitle("box");//窗口大小system("mode con cols=26 lines=12");save_1st();char mode;while(1){system("cls");printf("PRESS\na:play\nb:help\nc:exit");mode=getch();switch(mode){case 'a':play();break;case 'b':help();break;case 'c':return 0;}}}
