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

📄 playing_cards.cpp

📁 一个斗地主的小程序。。。。。。。。。。多多指教
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					{
						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;
}
//寻找8单顺出;
int CPlayingCards::Search8(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 >= 7 ) 
	{
		return 0;
	}

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

			m_nDiscardingCounter = 8;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<8;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+8;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;  //如果没有牌或者是四张(炸弹),则不考虑;
			}
		}
		//看连续牌数是否等于8;
		if( counter_1 == 5 && counter_2 + counter_3 == 3 ||
			counter_1 == 6 && counter_2 + counter_3 == 2 ||
			counter_1 == 7 && counter_2 + counter_3 == 1 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 8;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 8;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<8;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;
}
//寻找9单顺出;
int CPlayingCards::Search9(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 >= 6 ) 
	{
		return 0;
	}

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

			m_nDiscardingCounter = 9;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<9;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+9;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;  //如果没有牌或者是四张(炸弹),则不考虑;
			}
		}
		//看连续牌数是否等于8;
		if( counter_1 == 6 && counter_2 + counter_3 == 3 ||
			counter_1 == 7 && counter_2 + counter_3 == 2 ||
			counter_1 == 8 && counter_2 + counter_3 == 1 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = 9;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = 9;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<9;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;
}
//寻找10单顺出;
int CPlayingCards::SearchBeyond10(CCardsType& Cards_Type,int Long)
{
	if( AI_Patch1() )
	{
		return 1;
	}
	int i,j,k,l;
	//连续单牌的个数;
	int counter_1;
	int counter_2;
	int counter_3;

	//如果是10,j,q,k,A,则考虑对手中牌的个数,如果太少就考虑寻找炸弹;
//	CString str;
//	str.Format("Cards_Type.m_nTypeNum = %d\nCards_Type.m_nTypeValue = %d\n",\
//					Cards_Type.m_nTypeNum,Cards_Type.m_nTypeValue);
//	AfxMessageBox(str);

	if( Cards_Type.m_nTypeValue > 14 - Long ) 
	{

		return 0;
	}

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

			m_nDiscardingCounter = Long;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<Long;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+Long;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;  //如果没有牌或者是四张(炸弹),则不考虑;
			}
		}
		//看连续牌数是否等于8;
		if( counter_1 == Long-4 && counter_2 + counter_3 == 4 ||
			counter_1 == Long-3 && counter_2 + counter_3 == 3 ||
			counter_1 == Long-2 && counter_2 + counter_3 == 2 ||
			counter_1 == Long-1 && counter_2 + counter_3 == 1 )
		{
			//其他相关判断;
			//出牌处理;
			m_cDiscardingType.m_nTypeNum   = Long;
			m_cDiscardingType.m_nTypeValue = i;

			m_nDiscardingCounter = Long;

			for(k=0;k<m_nCardsCounter;k++)
			{
				if( m_cCards[k].m_nValue == i )
				{
					for(l=0;l<Long;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;
}
//比较大小后决定不要或者出牌; 
int CPlayingCards::CompareChoose(CCardsType& Cards_Type)
{
//		CString str;
//		str.Format("Cards_Type.m_nTypeNum = %d\nCards_Type.m_nTypeValue = %d\n",\
//					Cards_Type.m_nTypeNum,Cards_Type.m_nTypeValue);
//		AfxMessageBox(str);
//		Sleep(1000);

	switch( Cards_Type.m_nTypeNum )
	{
	//选择一个单牌;
	case 1:
		if( Search1(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 2:
		if( Search2(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 3:
		if( Search3(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}	
	case 4:
		if( SearchBomb(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 31:
		if( Search31(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}	
	case 32:
		if( Search32(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 411:
		if( Search411(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 422:
		if( Search422(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 3311:
		if( Search3311(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 3322:
		if( Search3322(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 5:
		if( Search5(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 6:
		if( Search6(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 7:
		if( Search7(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 8:
		if( Search8(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 9:
		if( Search9(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}		
	case 10:
		if( SearchBeyond10(Cards_Type,10) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 11:
		if( SearchBeyond10(Cards_Type,11) )
		{
			return 1;
		}
		else
		{
			return 0;
		}		
	case 12:
		if( SearchBeyond10(Cards_Type,12) )
		{

			return 1;
		}
		else
		{
			return 0;
		}
	case 222:
		if( Search222(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	case 2222:
		if( Search2222(Cards_Type) )
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}
	return 0;
}

//计算牌值;
int CPlayingCards::AccountCardsValue()
{
	int Cards_Value = 0;

	switch( m_nCardsTable[16]	)
	{
	case 1:
		if( m_cCards[16].m_nColor == 0 ) //大王;
		{
			Cards_Value += 80;
		}
		else
		{
			Cards_Value += 40;
		}
		break;
	case 2:
		Cards_Value += 200;
		break;
	}

	switch( m_nCardsTable[15] )
	{
	case 1:
		Cards_Value += 20;
		break;
	case 2:
		Cards_Value += 40;
		break;
	case 3:
		Cards_Value += 60;
		break;
	case 4:
		Cards_Value +=

⌨️ 快捷键说明

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