1. 程式人生 > >自己用C++寫的一個推箱子~~

自己用C++寫的一個推箱子~~

    自己寫了一個推箱子,不過目前只有兩關,打圖太難了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,如有發現的話歡迎告知。