• Bio

    //游戏名:《酋长追寻》,作者:xtmg·xsf ,特别感谢cjb,核弹djb,zdw 
    //游戏简介:让‘杜’绕过‘坤’的阻碍成功到达‘章’,‘套’可以增加 破冰次数、左上次数并且还有隐藏功能。 
    //操作:1上,2左上,3左,0重启(另外加一行列),4核弹(破冰) 
    //新增: 人机模式,颜色字体,胜率计算,自定义棋盘 
    //于2023.6.19日更新完毕 
    #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=60;//初始行列数
    bool renji=0;
    bool replay=0;
    int shengju=0; 
    float shenglv;
    
    void pobing()//破冰!!! 
    {
    	Sleep(500);
    	char k='B';
    	for(int i=1;i<=150;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)printf("%*s",2,"");
    			else if(a[i][j]==1)
    			{
    				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);
    				printf("%s","杜");
    				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    				
    			}
    			else if(a[i][j]==2)
    			{
    				printf("%s","坤");
    
    			}
    			else if(a[i][j]==3)
    			{
    				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
    				printf("%s","蔚");
    				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    			}
    			else if(a[i][j]==4)
    			{
    				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4);
    				printf("%s","套");
    				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    			}						
    		}
    		cout<<endl; 
    	}
    	printf("%s%i%*s","上:",cnt1,2,"");
    	printf("%s%i%*s","左上:",cnt2,2,"");
    	printf("%s%i%*s","左:",cnt3,2,"");
    	printf("%s%i%*s","破冰:",boom,2,"");
    	printf("%s%i%*s","行列数:",cnt,2,"");
    	printf("%s%i%*s","胜局:",shengju,2,"");
    	printf("%s%.1f%s%*s\n","胜率:",shenglv,"%",2,"");
    	
    }
    
    void add(int xnow,int ynow)//增加障碍物 
    {
    	if(a[xnow+1][ynow]==2&&a[xnow][ynow+1]==2&&a[xnow+1][ynow+1]==2)return;
    	
    	
    	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;
    	cnt2=sqrt(3*cnt)+int(cnt/30)-1;
    	cnt3=cnt;
    	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();
    	for(int i=1;i<=cnt+1;i++)
    	{
    		a[i][cnt+1]=2;
    		a[cnt+1][i]=2;
    	}
    	
    	
    	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<<"酒店大套餐(3次左上,1个破冰)"<<endl;
    				boom+=1;
    				cnt2+=3;			
    			}			
    			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的(加2次左上)"<<endl;
    					cnt2+=2;
    				}
    				else if(p==7||p==8)
    				{
    					cout<<"春意套(灵魂出窍套)(隐藏功能)"<<endl;
    					xnow+=3;
    					ynow+=3;
    					a[xnow][ynow]=1;
    				}
    				else{
    					cout<<"这是安全的(加一次破冰)"<<endl;
    					boom++;
    				}	
    			}
    			//胜率计算 
    			int aaa=min(cnt-xnow,cnt-ynow)+1;
    			shenglv=((cnt2+boom)*150.0/aaa);
    			int bbb=abs(xnow-ynow);
    			int bianliang1=aaa-cnt2-boom;
    			if(bianliang1<=0)bianliang1=1;
    			shenglv-=(bbb-boom)*150.0/bianliang1;
    			if(shenglv<=0)shenglv=0.99;
    			if(shenglv>=100)shenglv=100;
    			
    			print();
    		}
    	
    	}
    
    	cnt++;
    	shengju++;
    	return;
    }
    
    void renzhiyin()
    {
    	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+1;i++)
    	{
    		for(int j=1;j<=cnt+1;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();
    	for(int i=1;i<=cnt+1;i++)
    	{
    		a[i][cnt+1]=2;
    		a[cnt+1][i]=2;
    	}
    	
    	while(a[cnt][cnt]==3)
    	{
    		int i=99;
    		if(a[xnow+1][ynow]==2&&a[xnow][ynow+1]==2&&a[xnow+1][ynow+1]==2)
    		{
    			if(boom>0)
    			{
    				
    				i=4;
    			}
    			if(boom==0)i=0;
    			
    		} 
    		else if(a[xnow+1][ynow]==2&&a[xnow][ynow+1]==2)
    		{
    			if(cnt2>0)i=2;
    			if(cnt2==0)
    			{
    				if(boom>0)
    				{
    					
    					i=4;
    				}
    				if(boom==0)i=0;
    			}
    		}
    		else if(a[xnow+1][ynow]==2)i=3;			
    		else if(a[xnow][ynow+1]==2)i=1;
    		
    		if(i==99)
    		{
    			if(xnow>=ynow)i=3;
    			if(xnow<ynow)i=1;
    		}
    		
    		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<<"酒店大套餐(3次左上,2个破冰)"<<endl;
    				boom+=2;
    				cnt2+=3;			
    			}			
    			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的(加2次左上)"<<endl;
    					cnt2+=2;
    				}
    				else if(p==7||p==8)
    				{
    					cout<<"春意套(灵魂出窍套)(隐藏功能)"<<endl;
    					xnow+=2;
    					ynow+=2;
    					a[xnow][ynow]=1;
    				}
    				else{
    					cout<<"这是安全的(加一次破冰)"<<endl;
    					boom++;
    				}				
    			}
    			//胜率计算 
    			int aaa=min(cnt-xnow,cnt-ynow)+1;
    			if(zhufu==1)shenglv=((cnt2*2+boom)*150.0/aaa);
    			else shenglv=((cnt2+boom)*150.0/aaa);
    			int bbb=abs(xnow-ynow);
    			int bianliang1=aaa-cnt2-boom;
    			if(bianliang1<=0)bianliang1=1;
    			shenglv-=(bbb-boom)*150.0/bianliang1;
    			if(shenglv<=0)shenglv=0.99;
    			if(shenglv>=100)shenglv=99.9;
    			
    			print();
    		}
    		Sleep(450);
    	
    	}
    
    	shengju++;
    	cnt++;
    
    	return;
    }
    
    int main()//主程序 
    {
    	std::ios::sync_with_stdio(false);
    	srand(time(NULL));
    	cout<<"欢迎来到《酋长追寻》,作者xsf,特别感谢cjb,djb,zdw"<<endl;
    	Sleep(1000);
    	cout<<"模式选择:1——自己操作     2——人机模式  (输入1或2)"<<endl;
    	int ans;
    	cin>>ans;
    	cout<<"请输入行列数(建议20~60)";
    	int cntc;
    	cin>>cntc;
    	cnt=cntc;
    	//人机模式 
    	if(ans==2){
    			renji=1;
    		if(renji=1)
    		{
    			renzhiyin();
    			while(replay=1)renzhiyin();
    		}
    	}
    	//正常模式 
    	else{
    		play();
    		while(replay=1)play();
    	}
    
    	return 0;
    }
    
  • Recent Activities