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

📄 playing_cards.cpp

📁 一个斗地主的小程序。。。。。。。。。。多多指教
💻 CPP
📖 第 1 页 / 共 5 页
字号:

									m_nCardsTable[k] = 0;
								}
							}
							return 1;
						}//end if~
					} //end for~
					return 0;
				}//end if~
			} //end for~
			return 0;
		}
	}
	return 0;
}
//寻找三顺带两单;
int CPlayingCards::Search3311(CCardsType& Cards_Type)
{
	if( AI_Patch1() )
	{
		return 1;
	}
	//三张;
	int i,j,k,l;
	for(i=Cards_Type.m_nTypeValue+1;i<14;i++)   //2一般不能出在顺子中;
	{
		if( m_nCardsTable[i] == 3 && m_nCardsTable[i + 1] == 3 )
		{
			for(j=3;j<=14;j++)
			{
				if( m_nCardsTable[j] == 1 )
				{
					//扫描第二张单牌;
					for(k=j+1;k<=14;k++)
					{
						if( m_nCardsTable[k] == 1 )
						{
							m_cDiscardingType.m_nTypeNum   = 3311;
							m_cDiscardingType.m_nTypeValue = i;
							m_nDiscardingCounter = 8;

							for(l=0;l<m_nCardsCounter;l++)
							{
								if( m_cCards[l].m_nValue == i )
								{
									m_cDiscarding[0] = m_cCards[l];
									m_cDiscarding[1] = m_cCards[l + 1];
									m_cDiscarding[2] = m_cCards[l + 2];
									m_cDiscarding[3] = m_cCards[l + 3];
									m_cDiscarding[4] = m_cCards[l + 4];
									m_cDiscarding[5] = m_cCards[l + 5];
									
									m_cCards[l + 0] = m_cBLANK_CARD;
									m_cCards[l + 1] = m_cBLANK_CARD;
									m_cCards[l + 2] = m_cBLANK_CARD;
									m_cCards[l + 3] = m_cBLANK_CARD;
									m_cCards[l + 4] = m_cBLANK_CARD;
									m_cCards[l + 5] = m_cBLANK_CARD;

									m_nCardsTable[i] = 0;
									m_nCardsTable[i + 1] = 0;
								}
							}//end for~~

							for(l=0;l<m_nCardsCounter;l++)
							{
								if( m_cCards[l].m_nValue == j )
								{	
									m_cDiscarding[6] = m_cCards[l];
		
									m_cCards[l + 0] = m_cBLANK_CARD;

									m_nCardsTable[j] = 0;
								}
							}//end for~~

							for(l=0;l<m_nCardsCounter;l++)
							{
								if( m_cCards[l].m_nValue == k )
								{
									m_cDiscarding[7] = m_cCards[l];

									m_cCards[l + 0] = m_cBLANK_CARD;

									m_nCardsTable[k] = 0;
								}
							}
							return 1;

						}//end if~
					} //end for~
					return 0;
				}//end if~
			}
			return 0;
		}
	}
	return 0;
}
//寻找三顺带两对;
int CPlayingCards::Search3322(CCardsType& Cards_Type)
{
	if( AI_Patch1() )
	{
		return 1;
	}
	//三张;
	int i,j,k,l;
	for(i=Cards_Type.m_nTypeValue+1;i<14;i++)   //2一般不能出在顺子中;
	{
		if( m_nCardsTable[i] == 3 && m_nCardsTable[i + 1] == 3 )
		{
			for(j=3;j<=14;j++)
			{
				if( m_nCardsTable[j] == 2 )
				{
					//扫描第二张单牌;
					for(k=j+1;k<=14;k++)
					{
						if( m_nCardsTable[k] == 2 )
						{
							m_cDiscardingType.m_nTypeNum   = 3322;
							m_cDiscardingType.m_nTypeValue = i;
							m_nDiscardingCounter = 10;

							for(l=0;l<m_nCardsCounter;l++)
							{
								if( m_cCards[l].m_nValue == i )
								{
									m_cDiscarding[0] = m_cCards[l];
									m_cDiscarding[1] = m_cCards[l + 1];
									m_cDiscarding[2] = m_cCards[l + 2];
									m_cDiscarding[3] = m_cCards[l + 3];
									m_cDiscarding[4] = m_cCards[l + 4];
									m_cDiscarding[5] = m_cCards[l + 5];
									
									m_cCards[l + 0] = m_cBLANK_CARD;
									m_cCards[l + 1] = m_cBLANK_CARD;
									m_cCards[l + 2] = m_cBLANK_CARD;
									m_cCards[l + 3] = m_cBLANK_CARD;
									m_cCards[l + 4] = m_cBLANK_CARD;
									m_cCards[l + 5] = m_cBLANK_CARD;

									m_nCardsTable[i] = 0;
									m_nCardsTable[i + 1] = 0;
								}
							}//end for~~

							for(l=0;l<m_nCardsCounter;l++)
							{
								if( m_cCards[l].m_nValue == j )
								{	
									m_cDiscarding[6] = m_cCards[l];
									m_cDiscarding[7] = m_cCards[l + 1];
									
									m_cCards[l + 0] = m_cBLANK_CARD;
									m_cCards[l + 1] = m_cBLANK_CARD;

									m_nCardsTable[j] = 0;
								}
							}//end for~~

							for(l=0;l<m_nCardsCounter;l++)
							{
								if( m_cCards[l].m_nValue == k )
								{
									m_cDiscarding[8] = m_cCards[l];
									m_cDiscarding[9] = m_cCards[l + 1];

									m_cCards[l + 0] = m_cBLANK_CARD;
									m_cCards[l + 1] = m_cBLANK_CARD;

									m_nCardsTable[k] = 0;
								}
							}
							return 1;

						}//end if~
					} //end for~
					return 0;
				}//end if~
			}
			return 0;
		}
	}
	return 0;
}

//寻找双顺;
int CPlayingCards::Search222(CCardsType& Cards_Type)
{
	if( AI_Patch1() )
	{
		return 1;
	}

	int i,j;
	//如果大于J,Q,K,则不要;
	if( Cards_Type.m_nTypeValue > 11 )
	{
		return 0;
	}

	for(i=Cards_Type.m_nTypeValue+1;i<=12;i++)
	{
		if( m_nCardsTable[i] == 2 )
		{
			if( m_nCardsTable[i + 1] == 2 && m_nCardsTable[i + 2] == 2 )
			{
				for(j=0;j<m_nCardsCounter;j++)
				{
					if( m_cCards[j].m_nValue == i )
					{
						m_cDiscardingType.m_nTypeNum   = 222;
						m_cDiscardingType.m_nTypeValue = i;

						m_nDiscardingCounter = 6;

						for(int k=0;k<6;k++)
						{
							m_cDiscarding[k] = m_cCards[j + k];				
							m_cCards[j + k] = m_cBLANK_CARD;
						}
						m_nCardsTable[i] = 0;
						m_nCardsTable[i + 1] = 0;
						m_nCardsTable[i + 2] = 0;
						return 1;
					}
				}//end for~~	
			}
		}//end if;
	}
	return 0;
}
//寻找双顺;
int CPlayingCards::Search2222(CCardsType& Cards_Type)
{
	if( AI_Patch1() )
	{
		return 1;
	}

	int i,j;
	//如果大于J,Q,K,则不要;
	if( Cards_Type.m_nTypeValue > 10 )
	{
		return 0;
	}

	for(i=Cards_Type.m_nTypeValue+1;i<=11;i++)
	{
		if( m_nCardsTable[i] == 2 )
		{
			if( m_nCardsTable[i + 1] == 2 && 
				m_nCardsTable[i + 2] == 2 && 
				m_nCardsTable[i + 3] == 2 )
			{
				for(j=0;j<m_nCardsCounter;j++)
				{
					if( m_cCards[j].m_nValue == i )
					{
						m_cDiscardingType.m_nTypeNum   = 2222;
						m_cDiscardingType.m_nTypeValue = i;

						m_nDiscardingCounter = 8;

						for(int k=0;k<8;k++)
						{
							m_cDiscarding[k] = m_cCards[j + k];				
							m_cCards[j + k] = m_cBLANK_CARD;
						}
						m_nCardsTable[i] = 0;
						m_nCardsTable[i + 1] = 0;
						m_nCardsTable[i + 2] = 0;
						m_nCardsTable[i + 3] = 0;
						return 1;
					}
				}//end for~~	
			}
		}//end if;
	}
	return 0;
}
//寻找5单顺出;
int CPlayingCards::Search5(CCardsType& Cards_Type)
{
	if( AI_Patch1() )
	{
		return 1;
	}

	int i,j,k,l;
	//连续单牌的个数;
	int counter_1;
	int counter_2;
	int counter_3;

	//如果是10,j,q,k,A,则考虑对手中牌的个数,如果太少就考虑寻找炸弹;

	if( Cards_Type.m_nTypeValue >= 10 ) 
	{
		return 0;
	}
	//第一遍扫描,看是否有全单的单顺;

	for(i=Cards_Type.m_nTypeValue+1;i<=10;i++)
	{
	    counter_1 = 0;
		for(j=i;j<i+5;j++)
		{
			if( m_nCardsTable[j] != 1 )
			{
				break;
			}
			else
			{
				counter_1++;
			}
		}
		//看连续牌数是否等于5;
		if( counter_1 == 5 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 5;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 5;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<5;l++)
					{
						m_cDiscarding[l] = m_cCards[k + l];
				
						m_cCards[k + l] = m_cBLANK_CARD;

						m_nCardsTable[i + l] = 0;
					}
				}				
			}
			return 1; //搞定,返回;
		}

		//第二遍扫描;
	    counter_1 = 0;
		counter_2 = 0;
		counter_3 = 0;

		for(j=i;j<i+5;j++)
		{
			if( m_nCardsTable[j] == 1 )
			{
				counter_1++;
			}
			else if( m_nCardsTable[j] == 2 )
			{
				counter_2++;
			}
			else if( m_nCardsTable[j] == 3 )
			{
				counter_3++;
			}
			else
			{
				break;  //如果没有牌或者是四张(炸弹),则不考虑;
			}
		}
		//看牌是否等于5;
		if( counter_1 == 4 && counter_2 + counter_3 == 1 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 5;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 5;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<5;l++)
					{
						if( m_cCards[k + l].m_nValue == m_cCards[k + l + 1].m_nValue )
						{
							k++;
							if( m_cCards[k + l].m_nValue == m_cCards[k + l + 1].m_nValue )
							{
								k++;
							}
						}

						m_cDiscarding[l] = m_cCards[k + l];
						m_cCards[k + l] = m_cBLANK_CARD;

						m_nCardsTable[i + l]--;
					}
				}				
			}
			return 1; //搞定,返回;
		}
	}//end for~;
	return 0;	
}
//寻找6单顺出;
int CPlayingCards::Search6(CCardsType& Cards_Type)
{
	if( AI_Patch1() )
	{
		return 1;
	}

	int i,j,k,l;
	//连续单牌的个数;
	int counter_1;
	int counter_2;
	int counter_3;

	//如果是10,j,q,k,A,则考虑对手中牌的个数,如果太少就考虑寻找炸弹;

	if( Cards_Type.m_nTypeValue >= 9 ) 
	{
		return 0;
	}

	for(i=Cards_Type.m_nTypeValue+1;i<=9;i++)
	{
		//第一遍扫描,看是否有全单的单顺;
	    counter_1 = 0;
		for(j=i;j<i+6;j++)
		{
			if( m_nCardsTable[j] != 1 )
			{
				break;
			}
			else
			{
				counter_1++;
			}
		}
		//看连续牌数是否等于6;
		if( counter_1 == 6 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 6;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 6;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<6;l++)
					{
						m_cDiscarding[l] = m_cCards[k + l];
				
						m_cCards[k + l] = m_cBLANK_CARD;

						m_nCardsTable[i + l] = 0;
					}
				}				
			}
			return 1; //搞定,返回;
		}

		//第二遍扫描;
	    counter_1 = 0;
		counter_2 = 0;
		counter_3 = 0;

		for(j=i;j<i+6;j++)
		{
			if( m_nCardsTable[j] == 1 )
			{
				counter_1++;
			}
			else if( m_nCardsTable[j] == 2 )
			{
				counter_2++;
			}
			else if( m_nCardsTable[j] == 3 )
			{
				counter_3++;
			}
			else
			{
				break;  //如果没有牌或者是四张(炸弹),则不考虑;
			}
		}
		//看牌是否等于5;
		if( counter_1 == 4 && counter_2 + counter_3 == 2 ||
			counter_1 == 5 && counter_2 + counter_3 == 1 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 6;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 6;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<6;l++)
					{
						if( m_cCards[k + l].m_nValue == m_cCards[k + l + 1].m_nValue )
						{
							k++;
							if( m_cCards[k + l].m_nValue == m_cCards[k + l + 1].m_nValue )
							{
								k++;
							}
						}

						m_cDiscarding[l] = m_cCards[k + l];
						m_cCards[k + l]  = m_cBLANK_CARD;
	
						m_nCardsTable[i + l]--;
					}
				}				
			}
			return 1; //搞定,返回;
		}
	}//end for~;
	return 0;
}
//寻找7单顺出;
int CPlayingCards::Search7(CCardsType& Cards_Type)
{
	if( AI_Patch1() )
	{
		return 1;
	}
	int i,j,k,l;
	//连续单牌的个数;
	int counter_1;
	int counter_2;
	int counter_3;

	//如果是10,j,q,k,A,则考虑对手中牌的个数,如果太少就考虑寻找炸弹;

	if( Cards_Type.m_nTypeValue >= 8 ) 
	{
		return 0;
	}

	for(i=Cards_Type.m_nTypeValue+1;i<=8;i++)
	{
		//第一遍扫描,看是否有全单的单顺;
	    counter_1 = 0;
		for(j=i;j<i+7;j++)
		{
			if( m_nCardsTable[j] != 1 )
			{
				break;
			}
			else
			{
				counter_1++;
			}
		}
		//看连续牌数是否等于7;
		if( counter_1 == 7 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 7;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 7;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<7;l++)
					{
						m_cDiscarding[l] = m_cCards[k + l];
				
						m_cCards[k + l] = m_cBLANK_CARD;

						m_nCardsTable[i + l] = 0;
					}
				}				
			}
			return 1; //搞定,返回;
		}

		//第二遍扫描;
	    counter_1 = 0;
		counter_2 = 0;
		counter_3 = 0;

		for(j=i;j<i+7;j++)
		{
			if( m_nCardsTable[j] == 1 )
			{
				counter_1++;
			}
			else if( m_nCardsTable[j] == 2 )
			{
				counter_2++;
			}
			else if( m_nCardsTable[j] == 3 )
			{
				counter_3++;
			}
			else
			{
				break;  //如果没有牌或者是四张(炸弹),则不考虑;
			}
		}
		//看连续牌数是否等于7;
		if( counter_1 == 4 && counter_2 + counter_3 == 3 ||
			counter_1 == 5 && counter_2 + counter_3 == 2 ||
			counter_1 == 6 && counter_2 + counter_3 == 1 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 7;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 7;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<7;l++)

⌨️ 快捷键说明

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