QList<QList<card> > Method::PickOptimalSeqSingles()
{
QList<QList<QList<card> > > seqRecord;
QList<QList<card> > seqInherited;
Method(m_player, m_cards).PickSeqSingles(seqRecord, seqInherited, m_cards);//递归查找出所有可能的顺子
if (seqRecord.isEmpty())
{
return QList<QList<card> >();
}
QMap<int, int> seqMarks;
for (int i = 0; i < seqRecord.size(); i++)
{
QList<card> backupCards = m_cards;
QList<QList<card> > seqArray = seqRecord[i];
for(int l=0;l<seqArray.size();l++)
{
for(int j=0;j<seqArray[l].size();j++)
{
backupCards.removeOne(seqArray[l][j]);
}
}//从顺子牌中移除顺子
QList<QList<card> > singleArray = Method(m_player, backupCards).FindCardsByCount(1);//找到移除顺子后的所有单牌
QList<card> cardList;
for (int j = 0; j < singleArray.size(); j++)
{
for(int i=0;i<singleArray[j].size();i++)
cardList<<singleArray[j][i];
}
int mark = 0;
for (int j = 0; j < cardList.size(); j++)
{
mark += cardList[j].point + 15;
}//计算出剩余单牌的总分
seqMarks.insert(i, mark);
}
int index = 0;
int compMark = 1000000;
QMap<int, int>::ConstIterator it = seqMarks.constBegin();
//依次比较所有可能情况下的评分,选出剩余牌评分最低的顺子出牌
for (; it != seqMarks.constEnd(); it++)
{
if (it.value() < compMark)
{
compMark = it.value();
index = it.key();
}
}
return seqRecord[index];
}
97 70 48
9 9 10 10 J Q Q K A
9 10 11 12 13 9 10 Q A
9 10 11 12 13 A 9 10 Q
10 11 12 13 A 9 9 10 Q
22 23 25 27 97
22 23 25 70
23 25 48