コード例 #1
0
ファイル: bot.cpp プロジェクト: CecilHarvey/lord
int CBot::FirstHandDiscard(CCard rgDiscarded[20])
{
   int iMaxValue = -999999, iSelectedHand = -1, i, iValue;
   int iNumTriplets = 0, iNumSingles = 0, iNumPairs = 0;

   AnalyzeHand();

   for (i = 0; i < m_iNumHand; i++) {
      if (m_rgHand[i].type == DT_SINGLE && m_rgHand[i].cnt == 1) {
         iNumSingles++;
      } else if (m_rgHand[i].type == DT_DOUBLE && m_rgHand[i].cnt == 1) {
         iNumPairs++;
      } else if (m_rgHand[i].type == DT_TRIPLE) {
         iNumTriplets++;
      }
   }

   for (i = 0; i < m_iNumHand; i++) {
      iValue = 0;

      switch (m_rgHand[i].type) {
         case DT_SINGLE:
            if (m_rgHand[i].cnt > 1) {
               // sequence
               iValue = 6 * (19 - m_rgHand[i].headval) * (19 - m_rgHand[i].headval) - 80 * (iNumSingles + iNumPairs);
            } else {
               // single card
               iValue = 5 * (19 - m_rgHand[i].headval) * (19 - m_rgHand[i].headval) + 25 * iNumSingles;
            }
            break;

         case DT_DOUBLE:
            if (m_rgHand[i].cnt > 1) {
               // pair sequence
               iValue = 6 * (19 - m_rgHand[i].headval) * (19 - m_rgHand[i].headval) - 60 * (iNumSingles + iNumPairs);
            } else {
               // pair
               iValue = 5 * (19 - m_rgHand[i].headval) * (19 - m_rgHand[i].headval) + 25 * iNumPairs + 10;
            }
            break;

         case DT_TRIPLE:
            iValue = 2 * (19 - m_rgHand[i].headval) * (19 - m_rgHand[i].headval);
            if (iNumTriplets - iNumSingles - iNumPairs <= 2) {
               iValue += 850; // play triplets first if we don't have much leftovers
            }
            break;

         case DT_QUAD:
            iValue = (19 - m_rgHand[i].headval) / 2;
            break;

         case DT_DBLJOKER:
         default:
            if (m_iNumHand <= 2) {
               iValue = 999999;
            } else {
               iValue = 1;
            }
            break;
      }

      if (iValue > iMaxValue) {
         iMaxValue = iValue;
         iSelectedHand = i;
      }
   }

   assert(iSelectedHand != -1);

   int c = PlayHand(m_rgHand[iSelectedHand], rgDiscarded);
   // TODO: kicker cards
   return c;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: ajcendejas15/Final-Project
int main()
{
    startGame();
    PlayHand();
}