天天看点

物质模拟器4.0版 改了bug,爆炸时也可移动

之前的版本中,当物质发生爆炸时,“你”不可移动,且游戏玩法消失。经过改进,4.0版解决了这个问题,现在把它敲(复制)在下面: 

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h> 
using namespace std;
int playmap[10][10]={
{8,8,8,8,8,8,8,8,8,8},
{8,1,1,1,1,1,1,1,1,8},
{8,1,1,1,1,1,1,1,1,8},
{8,1,1,1,1,1,1,1,1,8},
{8,1,1,1,2,1,1,1,1,8},
{8,1,1,1,1,1,1,1,1,8},
{8,1,1,1,1,1,1,1,1,8},
{8,1,1,1,1,1,1,1,1,8},
{8,1,1,1,1,1,1,1,1,8},
{8,8,8,8,8,8,8,8,8,8},
};
void SetColorAndBackground(int ForgC, int BackC) {
	WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
int x,y;
int bao[10][10]={0};
int w=0;
int qwe=1;
int g=0;
int t,u;
char n;
int main(){
	system("cls");
	cout<<endl;
	cout<<"--------------------------------------物质模拟器-----------------------------------"<<endl;
	cout<<"游戏作者:dinosaursmallmi"<<endl;
	cout<<endl;
	cout<<"图标:“你”:你,“氢”:氢气,“油”:汽油,“硝”:硝酸,“箭”:火箭弹"<<endl; 
    	cout<<"按键:按e在“你”的上面释放氢气,按f在“你”的下面撒汽油,按r引爆所有能爆炸的东西,按c在“你”的下面撒硝酸,按空格向右发射火箭弹"<<endl;
    	cout<<"information:由于此游戏有防止炸自己的保护,你可以随心畅玩,躺在爆炸物堆里引爆也没事"<<endl; 
	cout<<"information:由于此游戏有防止炸自己的保护,你可以随心畅玩,躺在爆炸物堆里引爆也没事"<<endl; 
	system("pause");
	while(1)
	{
		system("cls");
		cout<<endl;
    	cout<<"--------------------------------------物质模拟器-----------------------------------"<<endl;
    	cout<<"游戏作者:dinosaursmallmi"<<endl;
    	cout<<endl;
    	cout<<"图标:“你”:你,“氢”:氢气,“油”:汽油,“硝”:硝酸,“箭”:火箭弹"<<endl; 
    	cout<<"按键:按e在“你”的上面释放氢气,按f在“你”的下面撒汽油,按r引爆所有能爆炸的东西,按c在“你”的下面撒硝酸,按空格向右发射火箭弹"<<endl;
    	cout<<"information:由于此游戏有防止炸自己的保护,你可以随心畅玩,躺在爆炸物堆里引爆也没事"<<endl; 
    	cout<<endl; 
		for(int a=0;a<10;a++)
		{
			for(int b=0;b<10;b++)
			{
				switch(playmap[a][b])
				{
					case 1:cout<<"  ";break;
					case 2:cout<<"你";break;
					case 8:cout<<"边";break;
					case 3:cout<<"氢";break;
					case 4:SetColorAndBackground(12,0);cout<<"火";SetColorAndBackground(15,0);break;
					case 5:SetColorAndBackground(11,0);cout<<"油";SetColorAndBackground(15,0);break;
					case 6:SetColorAndBackground(14,0);cout<<"硝";SetColorAndBackground(15,0);break;
					case 7:SetColorAndBackground(9,0);cout<<"箭";SetColorAndBackground(15,0);break;
				}
			}
			cout<<endl;
		}
		Sleep(30);		
		for(int a=0;a<10;a++)
		{
			for(int b=0;b<10;b++)
			{
				switch(bao[a][b])
				{
					case 0:
					    break;
					case 2:
						bao[a][b]=3;
						break;
					case 3:
						bao[a][b]=4;
						break;
					case 4:
						bao[a][b]=5;
						break;
					case 5:
						bao[a][b]=0;
						if(playmap[a][b]!=8&&playmap[a][b]!=2)
						{
						    playmap[a][b]=1;
						}
						break;			
				}
			}
		}
		for(int a=0;a<10;a++)
		{
			for(int b=0;b<10;b++)
			{
				if(playmap[a][b]==4&&bao[a][b]==0)
				{
					bao[a][b]=2;
				} 
			}
		}
		for(int c=0;c<10;c++)
		{
			for(int d=0;d<10;d++)
			{
				if(playmap[c][d]==2)
				{
					x=c;
					y=d;
				}
			}
		}
		if(kbhit())
		{
			n=getch();
			w=1;
		}
		if(w==1)
		{
			switch(n)
			{
				case 'w':
					if(playmap[x-1][y]==1)
					{
						playmap[x-1][y]=2;
				    	playmap[x][y]=1;
					}
					break;
					
				case 's':
					if(playmap[x+1][y]==1)
					{
						playmap[x+1][y]=2;
				    	playmap[x][y]=1;
					}
					break;
				
				case 'a':
					if(playmap[x][y-1]==1)
					{
						playmap[x][y-1]=2;
				    	playmap[x][y]=1;
					}
					break;	
				
				case 'd':
					if(playmap[x][y+1]==1)
					{
						playmap[x][y+1]=2;
				    	playmap[x][y]=1;
					}
					break;	
				
				case 'e':
					if(playmap[x-1][y]==1)
					{
						playmap[x-1][y]=3;
					}
					break;	
				
				case 'r':
					g=1;
					break;	
				
				case 'f':
					if(playmap[x+1][y]==1)
					{
						playmap[x+1][y]=5;
					}
					break;		
				
				case 'c':
					if(playmap[x+1][y]==1)
					{
						playmap[x+1][y]=6;
					}
					break;	
				
				case ' ':
					if(playmap[x][y+1]==1)
					{
						playmap[x][y+1]=7;
					}
					break;				
			}
		}
		w=0;
		if(g==1)
		{
			g=0;
			for(int f=0;f<10;f++)
			{
				for(int h=0;h<10;h++)
				{
					if(playmap[f][h]==3||playmap[f][h]==5)
					{
						t=f;
						u=h;
						playmap[t][u]=4;
						bao[t][u]=2;
						if(playmap[t+1][u]!=8&&playmap[t+1][u]!=2)
						    playmap[t+1][u]=4;bao[t+1][u]=2;
						if(playmap[t-1][u]!=8&&playmap[t-1][u]!=2)
						   	playmap[t-1][u]=4;bao[t-1][u]=2;
						if(playmap[t][u+1]!=8&&playmap[t][u+1]!=2)
						   	playmap[t][u+1]=4;bao[t][u+1]=2;
						if(playmap[t][u-1]!=8&&playmap[t][u-1]!=2)
						   	playmap[t][u-1]=4;bao[t][u-1]=2;
					}
					if(playmap[f][h]==6)
					{
						t=f;
						u=h;
						playmap[t][u]=4;
						bao[t][u]=2;
						if(playmap[t+1][u]!=8&&playmap[t+1][u]!=2)
						    playmap[t+1][u]=4;bao[t+1][u]=2;
						if(playmap[t-1][u]!=8&&playmap[t-1][u]!=2)
						   	playmap[t-1][u]=4;bao[t-1][u]=2;
						if(playmap[t][u+1]!=8&&playmap[t][u+1]!=2)
						   	playmap[t][u+1]=4;bao[t][u+1]=2;
						if(playmap[t][u-1]!=8&&playmap[t][u-1]!=2) 
						   	playmap[t][u-1]=4;bao[t][u-1]=2;
						if(playmap[t+2][u]!=8&&playmap[t+2][u]!=2)
						    playmap[t+2][u]=4;bao[t+2][u]=2;
						if(playmap[t-2][u]!=8&&playmap[t-2][u]!=2)
						   	playmap[t-2][u]=4;bao[t-2][u]=2;
						if(playmap[t][u+2]!=8&&playmap[t][u+2]!=2)
						   	playmap[t][u+2]=4;bao[t][u+2]=2;
						if(playmap[t][u-2]!=8&&playmap[t][u-2]!=2) 
						   	playmap[t][u-2]=4;bao[t][u-2]=2;
					}
				}
			}
		}
		for(int aa=0;aa<10;aa++)
		{
			for(int bb=0;bb<10;bb++)
			{
				if(playmap[aa][bb]==3)
				{
					if(playmap[aa-1][bb]!=1)
					{
						if(playmap[aa-1][bb-1]==1)
						{
							playmap[aa-1][bb-1]=3;
							playmap[aa][bb]=1;
						}
						else if(playmap[aa-1][bb+1]==1)
						{
							playmap[aa-1][bb+1]=3;
							playmap[aa][bb]=1;
						}
						break;
					}
					if(playmap[aa-1][bb]==1)
					{
						playmap[aa-1][bb]=3;
				    	playmap[aa][bb]=1;
					}		
				}
			}
		}
		for(int qw=0;qw<10;qw++)
		{
			for(int we=0;we<10;we++)
			{
				if(playmap[qw][we]==5)
				{
					if(playmap[qw+1][we]!=1)
					{
						if(playmap[qw+1][we-1]==1)
						{
							playmap[qw+1][we-1]=5;
							playmap[qw][we]=1;
							qwe=2;
						    break;
						}
						else if(playmap[qw+1][we+1]==1)
						{
							playmap[qw+1][we+1]=5;
							playmap[qw][we]=1;
							qwe=2;
						    break;
						}
					}
					if(playmap[qw+1][we]==1)
					{
						playmap[qw+1][we]=5;
				    	playmap[qw][we]=1;
				    	qwe=2;
				    	break;
					}	
				}
			}
			if(qwe==2)
			{
				qwe=1;
				break;
			}
		}
		for(int qw=0;qw<10;qw++)
		{
			for(int we=0;we<10;we++)
			{
				if(playmap[qw][we]==6)
				{
					if(playmap[qw+1][we]!=1)
					{
						if(playmap[qw+1][we-1]==1)
						{
							playmap[qw+1][we-1]=6;
							playmap[qw][we]=1;
							qwe=2;
						    break;
						}
						else if(playmap[qw+1][we+1]==1)
						{
							playmap[qw+1][we+1]=6;
							playmap[qw][we]=1;
							qwe=2;
						    break;
						}
					}
					if(playmap[qw+1][we]==1)
					{
						playmap[qw+1][we]=6;
				    	playmap[qw][we]=1;
				    	qwe=2;
				    	break;
					}	
				}
			}
			if(qwe==2)
			{
				qwe=1;
				break;
			}
		}
		for(int qw=0;qw<10;qw++)
		{
			for(int we=0;we<10;we++)
			{
				if(playmap[qw][we]==7)
				{
					if(playmap[qw][we+1]==1)
					{
						playmap[qw][we+1]=7;
						playmap[qw][we]=1;
						qwe=2;
						break;
					}
					else
					{
						playmap[qw][we]=4;
						bao[qw][we]=2;
						if(playmap[qw+1][we]!=8&&playmap[qw+1][we]!=2)
						    playmap[qw+1][we]=4;bao[qw+1][we]=2;
						if(playmap[qw-1][we]!=8&&playmap[qw-1][we]!=2)
						   	playmap[qw-1][we]=4;bao[qw-1][we]=2;
						if(playmap[qw][we+1]!=8&&playmap[qw][we+1]!=2)
						   	playmap[qw][we+1]=4;bao[qw][we+1]=2;
						if(playmap[qw][we-1]!=8&&playmap[qw][we-1]!=2) 
						   	playmap[qw][we-1]=4;bao[qw][we-1]=2;
					}
				}
			}
			if(qwe==2)
			{
				qwe=1;
				break;
			}
		}
	}
    return 0;
}