//游戏名:《酋长追寻》,作者:xtmg·xsf 
//游戏简介:让‘杜’绕过‘坤’的阻碍成功到达‘章’,‘套’可以增加破冰次数
//操作:1上,2左上,3左,0重启(加一行列),4核打击(破冰) 
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;

int a[1005][1005];
int cnt1,cnt2,cnt3;// 使用次数 
int boom=1; 
bool zhufu=0;
int cnt=50;//初始行列数

bool replay=0;

void pobing()//破冰!!! 
{
	Sleep(500);
	char k='B';
	for(int i=1;i<=237;i++)
	{
		for(int j=1;j<=i;j++)cout<<k;
		cout<<endl;	
	}	
	cout<<"必";
	Sleep(500);
	cout<<"杀";
	Sleep(500);
	cout<<"技:"<<endl;
	Sleep(500);
	cout<<"破冰!";
	Sleep(1000);
	cout<<endl;
	cout<<endl;	
} 

void print()//打印棋盘(表格) 
{
	for(int i=cnt;i>0;i--)
	{
		for(int j=cnt;j>0;j--)
		{			
			if(a[i][j]==0)cout<<"  ";
			else if(a[i][j]==1)cout<<"杜";
			else if(a[i][j]==2)cout<<"坤";
			else if(a[i][j]==3)cout<<"蔚";
			else if(a[i][j]==4)cout<<"套";						
		}
		cout<<endl; 
	}
	cout<<"上:"<<cnt1<<"  "<<"左上:"<<cnt2<<"  "<<"左:"<<cnt3<<"  "<<"破冰:"<<boom<<"  "<<"行列数:"<<cnt<<endl;	
}

void add(int xnow,int ynow)//增加障碍物 
{
	if(zhufu==1)
	{	
		int kk=rand()%4+1;
		if(kk==1)return;
	}
	int k=rand()%3+1;
	if(k==1&&a[xnow+1][ynow]!=3&&a[xnow+1][ynow]!=4)
	{
		if(a[xnow+1][ynow]==2)
		{
			add(xnow,ynow);
			return;
		}
		a[xnow+1][ynow]=2;
	}
	else if(k==2&&a[xnow+1][ynow+1]!=3&&a[xnow+1][ynow+1]!=4)
	{
		if(a[xnow+1][ynow+1]==2)
		{
			add(xnow,ynow);
			return;
		}
		a[xnow+1][ynow+1]=2;
	}
	else if(k==3&&a[xnow][ynow+1]!=3&&a[xnow][ynow+1]!=4)
	{
		if(a[xnow][ynow+1]==2)
		{
			add(xnow,ynow);
			return;
		}
		a[xnow][ynow+1]=2;
	}
	return;
} 
void play()//开始游戏 
{	
	zhufu=0;
	boom=true;
	
	cnt1=cnt-2;
	cnt2=sqrt(3*cnt)+int(cnt/30)-1;
	cnt3=cnt-2;
	replay=0;
	
	for(int i=1;i<=cnt;i++)for(int j=1;j<=cnt;j++)a[i][j]=0;
		
	a[cnt/4][3*cnt/5]=4;
	a[3*cnt/5][cnt/4]=4;
	a[cnt/2][cnt/2]=4;
	a[3*cnt/4][3*cnt/4]=4;
	a[cnt/4][cnt/4]=4;
	
	a[1][1]=1;
	a[cnt][cnt]=3;
	int xnow=1,ynow=1;
	
	print();
	print();
	print();
	
	while(a[cnt][cnt]==3)
	{
		int i=getchar()-48;				
		if(i>=0&&i<=4)
		{			
			if(i==4&&boom>=1)
			{
				boom--;
				for(int k=1;k<=cnt;k++)for(int l=1;l<=cnt;l++)if(a[k][l]==2)a[k][l]=0;
				pobing();					
			} 
			if(i==0)
			{
				replay=1;
				cnt++;
				return;
			}
			
			if(i==1&&a[xnow+1][ynow]!=2&&cnt1>0)
			{
				a[xnow][ynow]=0;
				xnow++;
				a[xnow][ynow]=1;
				cnt1--;
				add(xnow,ynow);
			}
			if(i==2&&a[xnow+1][ynow+1]!=2&&cnt2>0)
			{
				a[xnow][ynow]=0;
				ynow++;
				xnow++;
				a[xnow][ynow]=1;
				cnt2--;
				add(xnow,ynow);
			}
			if(i==3&&a[xnow][ynow+1]!=2&&cnt3>0)
			{
				a[xnow][ynow]=0;
				ynow++;
				a[xnow][ynow]=1;
				cnt3--;
				add(xnow,ynow);
			}
			if(xnow==cnt/4&&ynow==3*cnt/5)
			{
				cout<<"获得祝福:有1/4概率不生成'坤'"<<endl;
				zhufu=1;				
			}
			if(xnow==3*cnt/5&&ynow==cnt/4)
			{
				cout<<"酒店大套餐"<<endl;
				boom+=2;
				cnt2+=2;			
			}			
			if((xnow==cnt/2)&&(ynow==cnt/2)||(xnow==cnt/4&&ynow==cnt/4)||(xnow==3*cnt/4&&ynow==3*cnt/4))
			{
				int p=rand()%12+1;			
				if(p==1||p==2)
				{
					cout<<"这是‘三无劣质’"<<endl;
					add(xnow,ynow);
					 
				}
				else if(p==3||p==4||p==5||p==6)
				{
					cout<<"这是2和3的"<<endl;
					cnt2+=2;
				}
				else if(p==7||p==8)
				{
					cout<<"春意套(灵魂出窍套)"<<endl;
					xnow+=2;
					ynow+=2;
					a[xnow][ynow]=1;
				}
				else{
					cout<<"这是安全的"<<endl;
					boom++;
				}				
			}
			print();
		}	
	}
	if(a[cnt][cnt]==1)cnt++;
	return;
}

int main()//主程序 
{
	srand(time(NULL));
	
	play();
	while(replay=1)play();

	return 0;
}