自己寫了一個推箱子,不過目前隻有兩關,打圖太難了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;
}
很醜orz
興許可能會有bug,如有發現的話歡迎告知。