?? playing_cards.cpp
字號:
{
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 + -