⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddz2.cpp

📁 EVC 下的斗地主源码,有AI机器人,运行环境是模拟器5
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			for(m = 0 ; m < num ; m++)
			{
				if(m !=  i  &&  m !=  j)
					analyse[n++] = temp[m] ; 
			}
			if(analyse[0] == analyse[1] && analyse[0] != temp[i])
			{
				return 1 ; 
			}
	}
	return 0 ; 
}
//找出最小的数值
int Min(int temp[] , int num)
{
	int i , min = temp[0] ; 
	for(i = 1 ; i < num ; i++)
	{
		if(temp[i] < min)
		{
			min = temp[i] ; 
		}
	}
	return min ; 
}
//是不是三对 , 要求不一样
int sd(int temp[])
{
	int i , j , m = 0 , n = 0 , num = 6 , t[3] ; 
	for (i = 0 ; i < num ; i++)
	for (j = i+1 ; j < num ; j++)
	{
		if(temp[i] == temp[j])
				t[m++] = j ; 			//
		if((m  >  1)  &&  (temp[t[m-2]]  ==  temp[t[m-1]]))//除出三个一样的
			return 0 ; //
	}
	if(m == 3)
		return 1 ; 
	return 0 ; 
}

//三连对
int ld3(int temp[])
{
	int min ; 
	min = Min(temp , 6) ; //最大不能为2
	if(min == 13) return 0 ; 
	if(ACardNum(temp , 6 , min) == 2  &&  ACardNum(temp , 6 , min+1) == 2 
		 &&  ACardNum(temp , 6 , min+2) == 2)
	{
		CurrentOutCard.card = min;
		CurrentOutCard.num =6;
		strcpy(CurrentOutCard.type,"ld3");
		return 1 ; 
	}
	return 0 ; 
}
//四连对
int ld4(int temp[])
{
	int min ; 
	min = Min(temp , 8) ; 
	if(min == 12) return 0 ; //最大不能为2
	if(ACardNum(temp , 8 , min) == 2  &&  ACardNum(temp , 8 , min+1) == 2 
		 &&  ACardNum(temp , 8 , min+2) == 2  &&  ACardNum(temp , 8 , min+3) == 2)
	{
		CurrentOutCard.card = min;
		CurrentOutCard.num =8;
		strcpy(CurrentOutCard.type,"ld4");
		return 1 ; 
	}
	return 0 ; 
}
//五连对
int ld5(int temp[])
{
	int min ; 
	min = Min(temp , 10) ; 
	if(min == 11) return 0 ; //最大不能为2
	if(ACardNum(temp , 10 , min) == 2  &&  ACardNum(temp , 10 , min+1) == 2 
		 &&  ACardNum(temp , 10 , min+2) == 2  &&  ACardNum(temp , 10 , min+3) == 2 
		 &&  ACardNum(temp , 10 , min+4) == 2)
	{
		CurrentOutCard.card = min;
		CurrentOutCard.num =10;
		strcpy(CurrentOutCard.type,"ld5");
		return 1 ; 
	}
	return 0 ; 
}
//六连对
int ld6(int temp[])
{
	int min , n = 12 ; 
	min = Min(temp , n) ; 
	if(min == 10) return 0 ; //最大不能为2
	if(ACardNum(temp , n , min) == 2  &&  ACardNum(temp , n , min+1) == 2 
		 &&  ACardNum(temp , n , min+2) == 2  &&  ACardNum(temp , n , min+3) == 2 
		 &&  ACardNum(temp , n , min+4) == 2  &&  ACardNum(temp , n , min+5) == 2)
	{
		CurrentOutCard.card = min;
		CurrentOutCard.num =12;
		strcpy(CurrentOutCard.type,"ld6");
		return 1 ; 
	}
	return 0 ; 
}

//七连对
int ld7(int temp[])
{
	int min , n = 14 ; 
	min = Min(temp , n) ; 
	if(min == 9) return 0 ; //最大不能为2
	if(ACardNum(temp , n , min) == 2  &&  ACardNum(temp , n , min+1) == 2 
		 &&  ACardNum(temp , n , min+2) == 2  &&  ACardNum(temp , n , min+3) == 2 
		 &&  ACardNum(temp , n , min+4) == 2  &&  ACardNum(temp , n , min+5) == 2 
		 &&  ACardNum(temp , n , min+6) == 2)
	{
		CurrentOutCard.card = min;
		CurrentOutCard.num =14;
		strcpy(CurrentOutCard.type,"ld7");
		return 1 ; 
	}
	return 0 ; 
}
//四带二个
int sd2g(int temp[])
{
	int analyse[2] , m = 0 , n = 0 , i , j , k , p ; 
	for(i = 0 ; i < 6 ; i++)
	for(j = i+1 ; j < 6 ; j++)
	for(k = j+1 ; k < 6 ; k++)
	for(p = k+1 ; p < 6 ; p++)
	{
		if(temp[i] == temp[j]  &&  temp[j] == temp[k]  &&  temp[k] == temp[p])
		{
			for(n = 0 , m = 0 ; m < 6 ; m++)
			{
				if(m !=  i  &&  m !=  j  &&  m !=  k  &&  m !=  p)
					analyse[n++] = temp[m] ; 
			}
			if(analyse[0] !=  analyse[1])
			{
				CurrentOutCard.card = temp[i];
				CurrentOutCard.num =6;
				strcpy(CurrentOutCard.type,"sd2g");
				return 1 ; 
			}
			return 0 ; 
		}
	}
	return 0;
}

//四带二对
int sd2d(int temp[])
{
	int analyse[4] , m = 0 , n = 0 , i , j , k , p ; 
	for(i = 0 ; i < 8 ; i++)
	for(j = i+1 ; j < 8 ; j++)
	for(k = j+1 ; k < 8 ; k++)
	for(p = k+1 ; p < 8 ; p++)
	{
		if(temp[i] == temp[j]  &&  temp[j] == temp[k]  &&  temp[k] == temp[p])
		{
			for(n = 0 , m = 0 ; m < 8 ; m++)
			{
				if(m !=  i  &&  m !=  j  &&  m !=  k  &&  m !=  p)
					analyse[n++] = temp[m] ; 
			}
			if(ld(analyse))	
			{
				CurrentOutCard.card = temp[i];
				CurrentOutCard.num =8;
				strcpy(CurrentOutCard.type,"sd2d");
				return 1 ; 
			}
			return 0 ; 
		}
	}
	return 0;
}

//飞机不带
int fjbd(int temp[])
{
	int analyse[3] , m = 0 , n = 0 , i , j , k , num = 6 ; 
	for(i = 0 ; i < num ; i++)
	for(j = i + 1  ;  j < num  ;  j++)
	for(k = j + 1  ;  k < num  ;  k++)
	{
		if(temp[i] == temp[j]  &&  temp[j] == temp[k])
		{
			for(n = 0 , m = 0 ; m < num ; m++)
			{
				if(m !=  i  &&  m !=  j  &&  m !=  k)
					analyse[n++] = temp[m] ; 
			}
			if(analyse[0] == analyse[1]  &&  analyse[1] == analyse[2])//判断另外三个是否相等
			{
				if(abs(temp[i] - analyse[0]) !=  1) return 0 ; //当两个三个不是连着的时
				if(((temp[i] > analyse[0]) ? temp[i] : analyse[0]) == 15) return 0 ; //最大不能为2
				CurrentOutCard.card = temp[i] < analyse[0] ? temp[i] : analyse[0];
				CurrentOutCard.num =6;
				strcpy(CurrentOutCard.type,"fjbd");
				return 1 ; 
			}
			return 0 ; 
		}
	}
	return 0;
}
//飞机带两个
int fjd2g(int temp[])
{
	int analyse[2] , m = 0 , n = 0 , i , j , k , t[2][3] = {0} , num = 8 ; 
	for(i = 0 ; i < num ; i++)
	for(j = i+1 ; j < num ; j++)
	for(k = j+1 ; k < num ; k++)
	{
		if(temp[i] == temp[j] && temp[j] == temp[k])
		{
			t[n][0] = i ; 
			t[n][1] = j ; 
			t[n++][2] = k ; 
		}
		if(n == 2)
		{
			if(abs(temp[t[0][0]] - temp[t[1][0]]) !=  1 ) return 0 ; //当两个三个不是连着的时
			for(n = 0 , m = 0 ; m < num ; m++)
			{
				if(m !=  t[0][0]  &&  m !=  t[0][1]  &&  m !=  t[0][2] 
					 &&  m !=  t[1][0]  &&  m !=  t[1][1]  &&  m !=  t[1][2])
					analyse[n++] = temp[m] ; 
			}
			if(analyse[0] !=  analyse[1])
			{
				if((temp[t[0][0]] < temp[t[1][0]]) ? temp[t[0][0]] : temp[t[1][0]] == 14) return 0 ; //最大不能为2
				CurrentOutCard.card = temp[t[0][0]] < temp[t[1][0]] ? temp[t[0][0]] : temp[t[1][0]];
				CurrentOutCard.num =8;
				strcpy(CurrentOutCard.type,"fjd2g");
				return 1; 
			}
			return 0 ; 
		}
	}
	return 0;
}
//飞机带二对
int fjd2d(int temp[])
{
	int analyse[4] , m = 0 , n = 0 , i , j , k , t[3][3] = {0} , num = 10 ; 
	for(i = 0 ; i < num ; i++)
	for(j = i+1 ; j < num ; j++)
	for(k = j+1 ; k < num ; k++)
	{
		if(temp[i] == temp[j]  &&  temp[j] == temp[k])
		{
			t[n][0] = i ; 
			t[n][1] = j ; 
			t[n++][2] = k ; 
		}
		if(n == 2)
		{
			if(abs(temp[t[0][0]]-temp[t[1][0]]) !=  1 ) return 0 ; //当两个三个不是连着的时
			for(n = 0 , m = 0 ; m < num ; m++)
			{
				if(m !=  t[0][0]  &&  m !=  t[0][1]  &&  m !=  t[0][2]  &&  m !=  t[1][0]  &&  m !=  t[1][1]  &&  m !=  t[1][2])
					analyse[n++] = temp[m] ; 
			}
			if(ld(analyse))
			{
				if(((temp[t[0][0]] < temp[t[1][0]])?temp[t[0][0]]:temp[t[1][0]]) == 14) return 0 ; //最大不能为2
				CurrentOutCard.card = temp[t[0][0]] < temp[t[1][0]] ? temp[t[0][0]] : temp[t[1][0]];
				CurrentOutCard.num =10;
				strcpy(CurrentOutCard.type,"fjd2d");
				return 1 ; 
			}
			return 0 ; 
		}
	}
	return 0;
}
//三飞机不带
int sfjbd(int temp[])
{
	int min ; 
	min  =  Min(temp , 9) ; 
	if(min == 13) return 0 ; //最大不能为2
	if(ACardNum(temp , 9 , min) == 3  &&  ACardNum(temp , 9 , min+1) == 3  &&  ACardNum(temp , 9 , min+2) == 3)
	{
		CurrentOutCard.card = min;
		CurrentOutCard.num =9;
		strcpy(CurrentOutCard.type,"sfjbd");
		return 1 ; 
	}
	return 0 ; 
}
//三飞机带三个
int sfjdsg(int temp[])
{
	int analyse[3] , m = 0 , n = 0 , i , j , k , t[3][3] = {0} , num = 12 ; 
	for(i = 0 ; i < num ; i++)
	for(j = i+1 ; j < num ; j++)
	for(k = j+1 ; k < num ; k++)
	{
		if(temp[i] == temp[j] && temp[j] == temp[k])
		{
			t[n][0]  =  i ; 
			t[n][1]  =  j ; 
			t[n++][2] = k ; 
		}
		if(n  ==  3)
		{
			for(n  =  0 , m  =  0 ; m  <  num ; m++)
			{
				if(m !=  t[0][0]  &&  m !=  t[0][1]  &&  m !=  t[0][2] 
					 &&  m !=  t[1][0]  &&  m !=  t[1][1]  &&  m !=  t[1][2]
					 &&  m !=  t[2][0]  &&  m !=  t[2][1]  &&  m !=  t[2][2])
					analyse[n++] = temp[m] ; 
			}
			if(analyse[0] !=  analyse[1]  &&  analyse[0] !=  analyse[2]  &&  analyse[2] !=  analyse[1])
			{
				analyse[0]  =  temp[t[0][0]] ; 
				analyse[1]  =  temp[t[1][0]] ; 
				analyse[2]  =  temp[t[2][0]] ; 
				if((analyse[0] + analyse[1] + analyse[2])  !=   (Min(analyse , 3) + 1) * 3) return 0 ; //三个是不是连着的
				if(Min(analyse , 3) == 13) return 0 ; //最大不能为2
				CurrentOutCard.card = Min(analyse , 3);
				CurrentOutCard.num =12;
				strcpy(CurrentOutCard.type,"sfjdsg");
				return  1; 
			}
			return 0 ; 
		}
	}
	return 0;
}
//三飞机带三对
int sfjdsd(int temp[])
{
	int analyse[6] , m = 0 , n = 0 , i , j , k , t[3][3] = {0} , num = 15 ; 
	for(i = 0 ; i < num ; i++)
	for(j = i+1 ; j < num ; j++)
	for(k = j+1 ; k < num ; k++)
	{
		if(temp[i]  ==  temp[j]  &&  temp[j]  ==  temp[k])
		{
			t[n][0]  =  i ; 
			t[n][1]  =  j ; 
			t[n++][2]  =  k ; 
		}
		if(n  ==  3)
		{
			for(n = 0 , m = 0 ; m < num ; m++)
			{
				if(m !=  t[0][0]  &&  m !=  t[0][1]  &&  m !=  t[0][2] 
					 &&  m !=  t[1][0]  &&  m !=  t[1][1]  &&  m  !=   t[1][2]
					 &&  m !=  t[2][0]  &&  m !=  t[2][1]  &&  m  !=   t[2][2])
					analyse[n++] = temp[m] ; 
			}
			if(sd(analyse))
			{
				analyse[0]  =  temp[t[0][0]] ; 
				analyse[1]  =  temp[t[1][0]] ; 
				analyse[2]  =  temp[t[2][0]] ; 
				if((analyse[0] + analyse[1] + analyse[2])  !=   (Min(analyse , 3) + 1) * 3) return 0 ; //三个是不是连着的
				if(Min(analyse , 3) == 13) return 0 ; //最大不能为2
				CurrentOutCard.card = Min(analyse , 3);
				CurrentOutCard.num =15;
				strcpy(CurrentOutCard.type,"sfjdsd");
				return 1; 
			}
			return 0 ; 
		}
	}
	return 0;
}

////////////////////////////////////////////////////////////////////////////////
// 检验打出的牌 
////////////////////////////////////////////////////////////////////////////////
int CheckCard(PLAYER player)
{
	int num = 0 , temp[20] = {0} ; 
	num = CardNum(player,2);
	SaveOutCard(temp , player) ; 
	int tmp = CurrentOutCard.card;
	if(g_nLastWhoOut != g_nTurnOut)
	{
		switch(num)
		{
			case 0:	return 0 ; 
			case 1:
				{
					if(strcmp(CurrentOutCard.type,"gz") == 0 && temp[0] > CurrentOutCard.card)
					{
						CurrentOutCard.card = temp[0];
						CurrentOutCard.num = 1;
						strcpy(CurrentOutCard.type,"gz");
						return 1 ;
					}
				} return 0;
			case 2:	
				{
					if(strcmp(CurrentOutCard.type,"dz") == 0 && dz(temp))//是不是对子
					{
						if(tmp <temp[0])
							return 1; 
					}
					if(sw(temp))
						return 1;
				}return 0;
			case 3:
				{
					if(strcmp(CurrentOutCard.type,"sgbd") == 0 && sgbd(temp))
						if(tmp <temp[0])
							return 1; 
				}return  0; 
			case 4:	
				{
					if(strcmp(CurrentOutCard.type,"sd1") == 0 && sd1(temp))
					{
						if(tmp <temp[1])
							return 1;  
					}
					if(strcmp(CurrentOutCard.type,"zd") != 0 && zd(temp))
						return 1;  
					if(strcmp(CurrentOutCard.type,"zd") == 0 && zd(temp))
					{
						if(tmp <temp[1])
							return 1;
					}
				} return 0;
			case 5:	
				{
					if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 5))
						if(tmp <temp[0])
							return 1;
					if(strcmp(CurrentOutCard.type,"sd2") == 0 && sd2(temp))
						if(tmp <temp[2])
							return 1;
				}return 0; 
			case 6: 
				{
					if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 6))
						if(tmp <temp[0])
							return 1;
					if(strcmp(CurrentOutCard.type,"ld3") == 0 && ld3(temp))
						if(tmp <temp[5])
							return 1;
					if(strcmp(CurrentOutCard.type,"sd2g") == 0 && sd2g(temp))
						if(tmp <temp[3])
							return 1;
					if(strcmp(CurrentOutCard.type,"fjbd") == 0 && fjbd(temp))
						if(tmp <temp[4])
							return 1;
				}return 0; 
			case 7:	
				{
					if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 7))
						if(tmp <temp[0])
							return 1;
				}return 0; 
			case 8:	
				{
					if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 8))
						if(tmp <temp[0])
							return 1;
					if(strcmp(CurrentOutCard.type,"fjd2g") == 0 && fjd2g(temp))
						if(tmp <temp[2])
							return 1;
					if(strcmp(CurrentOutCard.type,"ld4") == 0 && ld4(temp))
						if(tmp <temp[7])
							return 1;
					//if(strcmp(CurrentOutCard.type,"sd2d") == 0 && sd2d(temp))
					//		;
				
				}return 0; 
			case 9:	
				{
					if(strcmp(CurrentOutCard.type,"sz") == 0 && sz(temp , 9))
						if(tmp <temp[0])
							return 1;
					if(strcmp(CurrentOutCard.type,"sfjbd") == 0 && sfjbd(temp))
						if(tmp <temp[8])
							return 1;
				}return 0; 
			case 10:return sz(temp , 10) || fjd2d(temp) || ld5(temp) ; 
			case 11:return sz(temp , 11) ; 
			case 12:return sz(temp , 12) || ld6(temp) || sfjdsg(temp) ; 
			case 13:return sz(temp , 13) ; 
			case 14:return ld7(temp) ; 
			case 15:return sfjdsd(temp) ; 
			default: return 0 ; 
		}//switch
	}
	else
	{
		switch(num)
		{
			case 0:	return 0 ; 
			case 1:
				{
					CurrentOutCard.card = temp[0];
					CurrentOutCard.num = 1;
					strcpy(CurrentOutCard.type,"gz");
				}return 1 ; 
			case 2:	return dz(temp)  ||  sw(temp) ; 
			case 3:	return sgbd(temp) ; 
			case 4:	return sd1(temp) || zd(temp) ; 
			case 5:	return sz(temp , 5) || sd2(temp) ; 
			case 6: return sz(temp , 6) || ld3(temp) || sd2g(temp) || fjbd(temp)  ; 
			case 7:	return sz(temp , 7) ; 
			case 8:	return sz(temp , 8) || fjd2g(temp) || ld4(temp) || sd2d(temp) ; 
			case 9:	return sz(temp , 9) || sfjbd(temp) ; 
			case 10:return sz(temp , 10) || fjd2d(temp) || ld5(temp) ; 
			case 11:return sz(temp , 11) ; 
			case 12:return sz(temp , 12) || ld6(temp) || sfjdsg(temp) ; 
			case 13:return sz(temp , 13) ; 
			case 14:return ld7(temp) ; 
			case 15:return sfjdsd(temp) ; 
			default: return 0 ; 
		}	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -