自己用C++寫的一個推箱子~~
阿新 • • 發佈:2019-01-26
自己寫了一個推箱子,不過目前只有兩關,打圖太難了orz。(絕不是因為我太懶)
很醜orz#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; //*為到位 #為箱子 X為邊界 @為人物 O為目標點 int step;//關卡 int x,y;//人物座標 char m;//移動 bool flag=false;//是否勝利 bool flagm;//移動是否合法 char ans; char map[1000][1000]; bool flago=false; bool stepf=false; void check1()//檢查圖1 { flag=true; for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) { if(map[i][j]=='#'||flago==true) { flag=false; return; } } return; } void check2() { flag=true; for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) { if(map[i][j]=='#'||flago==true) { flag=false; return; } } return; } void output1()//輸出圖 1 { cout<<"推箱子 by 邯鄲一中swttc"<<endl; cout<<"*為到位 #為箱子 X為邊界 @為人物 O為目標點 wasd移動"<<endl; for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) { cout<<map[i][j]; if(j==8) cout<<endl; } return; } void output2() { cout<<"推箱子 by 邯鄲一中swttc"<<endl; cout<<"*為到位 #為箱子 X為邊界 @為人物 O為目標點 wasd移動"<<endl; for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) { cout<<map[i][j]; if(j==8) cout<<endl; } return; } void moved() { if(map[x][y+1]==' ') { map[x][y+1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x][y+1]=='#') { if(map[x][y+2]==' ') { map[x][y+2]='#'; map[x][y+1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x][y+2]=='O') { map[x][y+2]='*'; map[x][y+1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else flagm=false; } else if(map[x][y+1]=='O') { map[x][y+1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x][y+1]=='*') { if(map[x][y+2]==' ') { map[x][y+2]='#'; map[x][y+1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x][y+2]=='O') { map[x][y+2]='*'; map[x][y+1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else flagm=false; } else flagm=false; system("cls"); if(flagm==true) y+=1; switch(step) { case 1 : output1();break; case 2 : output2();break; } if(flagm==false) { cout<<"非法移動"; system("pause"); system("cls"); switch(step) { case 1 : output1();break; case 2 : output2();break; } } return; } void movea() { if(map[x][y-1]==' ') { map[x][y-1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x][y-1]=='#') { if(map[x][y-2]==' ') { map[x][y-2]='#'; map[x][y-1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x][y-2]=='O') { map[x][y-2]='*'; map[x][y-1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else flagm=false; } else if(map[x][y-1]=='O') { map[x][y-1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x][y-1]=='*') { if(map[x][y-2]==' ') { map[x][y-2]='#'; map[x][y-1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x][y-2]=='O') { map[x][y-2]='*'; map[x][y-1]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else flagm=false; } else flagm=false; system("cls"); if(flagm==true) y-=1; switch(step) { case 1 : output1();break; case 2 : output2();break; } if(flagm==false) { cout<<"非法移動"; system("pause"); system("cls"); switch(step) { case 1 : output1();break; case 2 : output2();break; } } return; } void movew() { if(map[x-1][y]==' ') { map[x-1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x-1][y]=='#') { if(map[x-2][y]==' ') { map[x-2][y]='#'; map[x-1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x-2][y]=='O') { map[x-2][y]='*'; map[x-1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else flagm=false; } else if(map[x-1][y]=='O') { map[x-1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x-1][y]=='*') { if(map[x-2][y]==' ') { map[x-2][y]='#'; map[x-1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x-2][y]=='O') { map[x-2][y]='*'; map[x-1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else flagm=false; } else flagm=false; system("cls"); if(flagm==true) x-=1; switch(step) { case 1 : output1();break; case 2 : output2();break; } if(flagm==false) { cout<<"非法移動"; system("pause"); system("cls"); switch(step) { case 1 : output1();break; case 2 : output2();break; } } return; } void moves() { if(map[x+1][y]==' ') { map[x+1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x+1][y]=='#') { if(map[x+2][y]==' ') { map[x+2][y]='#'; map[x+1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else if(map[x+2][y]=='O') { map[x+2][y]='*'; map[x+1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } } else flagm=false; } else if(map[x+1][y]=='O') { map[x+1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x+1][y]=='*') { if(map[x+2][y]==' ') { map[x+2][y]='#'; map[x+1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else if(map[x+2][y]=='O') { map[x+2][y]='*'; map[x+1][y]='@'; if(flago==false) map[x][y]=' '; if(flago==true) { map[x][y]='O'; flago=false; } flago=true; } else flagm=false; } else flagm=false; system("cls"); if(flagm==true) x+=1; switch(step) { case 1 : output1();break; case 2 : output2();break; } if(flagm==false) { cout<<"非法移動"; system("pause"); system("cls"); switch(step) { case 1 : output1();break; case 2 : output2();break; } } return; } void build1()//建圖 1 { for(int i=1;i<=3;i++) for(int j=1;j<=2;j++) map[i][j]=' '; for(int j=1;j<=2;j++) for(int i=6;i<=8;i++) map[j][i]=' '; for(int i=7;i<=8;i++) for(int j=1;j<=3;j++) map[i][j]=' '; for(int i=6;i<=8;i++) for(int j=7;j<=8;j++) map[i][j]=' '; map[1][3]=map[1][4]=map[1][5]=map[2][3]=map[2][5]=map[3][3]=map[3][5]=map[3][6]=map[3][7]=map[3][8]=map[4][1]=map[4][2]=map[4][3]=map[4][8]=map[5][1]=map[5][6]=map[5][7]=map[5][8]=map[6][1]=map[6][2]=map[6][3]=map[6][4]=map[6][6]=map[7][4]=map[7][6]=map[8][4]=map[8][5]=map[8][6]='X'; map[2][4]=map[5][2]=map[7][5]=map[4][7]='O'; map[3][4]=map[4][6]=map[5][5]=' '; map[4][4]=map[4][5]=map[5][3]=map[6][5]='#'; map[5][4]='@'; x=5; y=4; output1(); return; } void build2() { for(int i=1;i<=3;i++) map[i][1]=' '; for(int i=4;i<=8;i++) map[i][1]='X'; for(int i=1;i<=4;i++) map[i][2]='X'; for(int i=5;i<=7;i++) map[i][2]='O'; for(int i=1;i<=8;i++) map[8][i]='X'; for(int i=2;i<=5;i++) map[1][i]='X'; map[2][3]='@'; map[3][3]=' '; map[4][3]=map[5][3]='X'; map[6][3]='#'; map[7][3]=' '; map[2][4]=' '; map[3][4]='#'; for(int i=4;i<=7;i++) map[i][4]=' '; map[1][6]=map[1][7]=map[1][8]=' '; map[2][5]='X'; map[3][5]=' '; map[4][5]=map[5][5]='X'; map[6][5]=map[7][5]=' '; map[2][6]='X'; map[3][6]=map[4][6]=map[5][6]=' '; map[6][6]='X'; map[7][6]='#'; map[2][7]=map[3][7]=map[4][7]='X'; map[5][7]=map[6][7]=map[7][7]=' '; map[2][8]=map[3][8]=' '; map[4][8]=map[5][8]=map[6][8]=map[7][8]='X'; x=2; y=3; output2(); return; } int main() { do { flago=false; stepf=false; flag=false; cout<<"推箱子 by 邯鄲一中swttc"<<endl; cout<<"選擇關卡"<<endl; while(stepf==false) { cin>>step; system("cls"); switch(step) { case 1 : { build1(); stepf=true; break; } case 2 : { build2(); stepf=true; break; } default: {cout<<"推箱子 by 邯鄲一中swttc"<<endl;cout<<"目前沒有此關卡 請重新選擇"<<endl;} } } do { flagm=true; cin>>m; if(m=='w') movew(); if(m=='a') movea(); if(m=='s') moves(); if(m=='d') moved(); if(m!='a'&&m!='w'&&m!='s'&&m!='d') { cout<<"無效輸入"; system("pause"); system("cls"); switch(step) { case 1 : output1();break; case 2 : output2();break; } } switch(step) { case 1 : check1();break; case 2 : check2();break; } } while(flag==false); cout<<"你贏了"<<endl; cout<<"繼續Y 離開任意鍵"<<endl; cin>>ans; system("cls"); }while(ans=='Y'||ans=='y'); cout<<"推箱子 by 邯鄲一中swttc"<<endl; cout<<"再見"<<endl; return 0; }
興許可能會有bug,如有發現的話歡迎告知。