自己用C++写的一个推箱子~~

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37387365/article/details/57433058

    自己写了一个推箱子,不过目前只有两关,打图太难了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,如有发现的话欢迎告知。

展开阅读全文

没有更多推荐了,返回首页