/***************************************************************************** * PokerTH - The open source texas holdem engine * * Copyright (C) 2006-2011 Felix Hammer, Florian Thauer, Lothar May * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU Affero General Public License as * * published by the Free Software Foundation, either version 3 of the * * License, or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Affero General Public License for more details. * * * * You should have received a copy of the GNU Affero General Public License * * along with this program. If not, see . * *****************************************************************************/ #include "cardsvalue.h" #include "arraydata.h" #include "tools.h" #include "playerinterface.h" #include #include int CardsValue::holeCardsClass(int one, int two) { if((one-1)%13<(two-1)%13) { int temp = one; one = two; two = temp; } if((one-1)%13 == (two-1)%13) { if((one-1)%13+2 > 10) return 10; else { switch((one-1)%13+2) { case 10: return 9; case 9: return 8; case 8: return 7; case 7: return 6; default: return 5; } } } switch((one-1)%13+2) { //Ass case 14: { if((one-1)/13 == (two-1)/13) { switch((one-1)%13-(two-1)%13) { case 1: return 10; case 2: return 9; case 3: return 9; case 4: return 8; default: return 7; } } else { switch((one-1)%13-(two-1)%13) { case 1: return 9; case 2: return 8; case 3: return 7; case 4: return 7; default: return 4; } } } break; //K�ig case 13: { if((one-1)/13 == (two-1)/13) { switch((one-1)%13-(two-1)%13) { case 1: return 9; case 2: return 8; case 3: return 8; case 4: return 6; default: return 5; } } else { switch((one-1)%13-(two-1)%13) { case 1: return 7; case 2: return 6; case 3: return 6; default: return 4; } } } break; //Dame case 12: { if((one-1)/13 == (two-1)/13) { switch((one-1)%13-(two-1)%13) { case 1: return 8; case 2: return 7; case 3: return 6; case 4: return 5; default: return 4; } } else { switch((one-1)%13-(two-1)%13) { case 1: return 6; case 2: return 6; case 3: return 4; default: return 3; } } } break; //Bube case 11: { if((one-1)/13 == (two-1)/13) { switch((one-1)%13-(two-1)%13) { case 1: return 7; case 2: return 6; case 3: return 5; case 4: return 4; default: return 3; } } else { switch((one-1)%13-(two-1)%13) { case 1: return 6; case 2: return 5; case 3: return 4; default: return 2; } } } break; //10 case 10: { if((one-1)/13 == (two-1)/13) { switch((one-1)%13-(two-1)%13) { case 1: return 6; case 2: return 5; default: return 2; } } else { switch((one-1)%13-(two-1)%13) { case 1: return 5; case 2: return 4; default: return 1; } } } break; //Rest default: { if((one-1)%13 - (two-1)%13 <= 2) { if((one-1)/13 == (two-1)/13) return 5; else return 3; } else { if((one-1)%13 - (two-1)%13 == 3) return 2; else return 1; } } } } int CardsValue::holeCardsToIntCode(int* cards) { // Code der HoleCards ermitteln if(cards[0]%13 == cards[1]%13) { return ((cards[0]%13)*1000 + (cards[0]%13)*10); } else { if(cards[0]%13 < cards[1]%13) { if(cards[0]/13 == cards[1]/13) { return ((cards[0]%13)*1000 + (cards[1]%13)*10 + 1); } else { return ((cards[0]%13)*1000 + (cards[1]%13)*10); } } else { if(cards[0]/13 == cards[1]/13) { return ((cards[1]%13)*1000 + (cards[0]%13)*10 + 1); } else { return ((cards[1]%13)*1000 + (cards[0]%13)*10); } } } } /* DO NOT USE, THIS MAY LEAK MEMORY int* CardsValue::intCodeToHoleCards(int code) { // one possibility !!! int* cards = new int[2]; cards[0] = code/1000; cards[1] = (code-cards[0]*1000)/10; if(cards[0]==cards[1]) { cards[1] +=13; } else { if(code%10 == 0) cards[1] +=13; } return cards; }*/ int CardsValue::cardsValue(int* cards, int* position) { int array[7][3]; int j1, j2, j3, j4, j5, k1, k2, ktemp[3]; // Kartenwerte umwandeln (z.B. [ 11 (Karo K�ig) -> 0 11 ] oder [ 31 (Pik 7) -> 2 5 ] ) for(j1=0; j1<7; j1++) { array[j1][0] = cards[j1]/13; array[j1][1] = cards[j1]%13; array[j1][2] = j1; } // Karten nach Farben sortieren: Kreuz - Pik - Herz - Karo for(k1=0; k1<7; k1++) { for(k2=k1+1; k2<7; k2++) { if(array[k1][0] 8*100000000+3*1000000 if(position) { // Position-Array fuellen position[0] = array[j1][2]; for(j3=0; j3<4; j3++) { position[j3+1] = array[j2+j3][2]; } } return 800000000+3*1000000; } } } } // auf Flush (Klasse 5) testen for(j1=0; j1<3; j1++) { if(array[j1][0] == array[j1+1][0] && array[j1][0] == array[j1+2][0] && array[j1][0] == array[j1+3][0] && array[j1][0] == array[j1+4][0]) { // Flush -> 5*10000000 + h�ste Flush Karten mit absteigender Wertung if(position) { // Position-Array fuellen for(j2=0; j2<5; j2++) { position[j2] = array[j1+j2][2]; } } return 500000000+array[j1][1]*1000000+array[j1+1][1]*10000+array[j1+2][1]*100+array[j1+3][1]*10+array[j1+4][1]; } } // Karten fr den Vierling-, Full-House-, Drilling- und Paartest umsortieren for(k1=0; k1<7; k1++) { for(k2=k1+1; k2<7; k2++) { if(array[k1][1] > CardsValue::calcCardsChance(GameState beRoID, int* playerCards, int* boardCards) { int i,j; std::vector< std::vector > chance(2); chance[0].resize(10); chance[1].resize(10); for(i=0; i<10; i++) { chance[0][i] = 0; chance[1][i] = 0; } int cards[7]; int sum = 0; cards[0] = playerCards[0]; cards[1] = playerCards[1]; for(i=0; i<5; i++) cards[i+2] = boardCards[i]; switch(beRoID) { case GAME_STATE_PREFLOP: { chance = ArrayData::getHandChancePreflop(holeCardsToIntCode(playerCards)); } break; case GAME_STATE_FLOP: { for(i=0; i<51; i++) { if(i!=cards[0] && i!=cards[1] && i!=cards[2] && i!=cards[3] && i!=cards[4]) { for(j=i+1; j<52; j++) { if(j!=cards[0] && j!=cards[1] && j!=cards[2] && j!=cards[3] && j!=cards[4]) { cards[5] = i; cards[6] = j; (chance[0][cardsValue(cards,0)/100000000])++; sum++; } } } } for(i=0; i<10; i++) { if(chance[0][i] > 0) chance[1][i] = 1; chance[0][i] = (int)(((double)chance[0][i]/(double)sum)*100.0+0.5); } } break; case GAME_STATE_TURN: { for(i=0; i<52; i++) { if(i!=cards[0] && i!=cards[1] && i!=cards[2] && i!=cards[3] && i!=cards[4] && i!=cards[5]) { cards[6] = i; (chance[0][cardsValue(cards,0)/100000000])++; sum++; } } for(i=0; i<10; i++) { if(chance[0][i] > 0) chance[1][i] = 1; chance[0][i] = (int)(((double)chance[0][i]/(double)sum)*100.0+0.5); } } break; case GAME_STATE_RIVER: { chance[0][cardsValue(cards,0)/100000000] = 100; chance[1][cardsValue(cards,0)/100000000] = 1; } break; default: { } } return chance; } std::string CardsValue::determineHandName(int myCardsValueInt, PlayerList activePlayerList) { std::list shownCardsValueInt; std::list sameHandCardsValueInt; bool different = false; bool equal = false; // boost::shared_ptr currentGame = myW->getSession()->getCurrentGame(); PlayerListConstIterator it_c; // PlayerList activePlayerList = currentGame->getActivePlayerList(); // collect cardsValueInt of all players who will show their cards for(it_c=activePlayerList->begin(); it_c!=activePlayerList->end(); ++it_c) { if( (*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { shownCardsValueInt.push_back( (*it_c)->getMyCardsValueInt()); } } // erase own cardsValueInt std::list::iterator it; for(it = shownCardsValueInt.begin(); it != shownCardsValueInt.end(); ++it) { if((*it) == myCardsValueInt) { shownCardsValueInt.erase(it); break; } } std::list cardString = translateCardsValueCode(myCardsValueInt); std::list::const_iterator cardStringIt_c = cardString.begin(); std::string handName; switch(myCardsValueInt/100000000) { // Royal Flush case 9: { handName = *cardStringIt_c; } break; // Straight Flush case 8: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; } break; // Four of a kind case 7: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; // same hand detection for(it = shownCardsValueInt.begin(); it != shownCardsValueInt.end(); ++it) { if(((*it)/1000000) == (myCardsValueInt/1000000)) { sameHandCardsValueInt.push_back(*it); } } // 1.same hands existing if(!(sameHandCardsValueInt.empty())) { // first kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/10000) == (myCardsValueInt/10000)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } if(different) { ++cardStringIt_c; handName += ", fifth card " + *cardStringIt_c; } } } break; // Full House case 6: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; } break; // Flush case 5: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; // same hand detection for(it = shownCardsValueInt.begin(); it != shownCardsValueInt.end(); ++it) { if(((*it)/1000000) == (myCardsValueInt/1000000)) { sameHandCardsValueInt.push_back(*it); } } // 1.same hands existing if(!(sameHandCardsValueInt.empty())) { // first kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/10000) == (myCardsValueInt/10000)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", second card " + *cardStringIt_c; } // 2.there are still same hands if(equal) { different = false; equal = false; // second kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/100) == (myCardsValueInt/100)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", third card " + *cardStringIt_c; } // 3.there are still same hands if(equal) { different = false; equal = false; // third kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/10) == (myCardsValueInt/10)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", fourth card " + *cardStringIt_c; } // 4.there are still same hands if(equal) { different = false; equal = false; // third kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if((*it) == myCardsValueInt) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } if(different) { ++cardStringIt_c; handName += ", fifth card " + *cardStringIt_c; } } } } } } break; // Straight case 4: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; } break; // Three of a kind case 3: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; // same hand detection for(it = shownCardsValueInt.begin(); it != shownCardsValueInt.end(); ++it) { if(((*it)/1000000) == (myCardsValueInt/1000000)) { sameHandCardsValueInt.push_back(*it); } } // 1.same hands existing if(!(sameHandCardsValueInt.empty())) { // first kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/10000) == (myCardsValueInt/10000)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", fourth card " + *cardStringIt_c; } // 2.there are still same hands if(equal) { different = false; equal = false; // second kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/100) == (myCardsValueInt/100)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } if(different) { ++cardStringIt_c; handName += ", fifth card " + *cardStringIt_c; } } } } break; // Two Pair case 2: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; // same hand detection for(it = shownCardsValueInt.begin(); it != shownCardsValueInt.end(); ++it) { if(((*it)/10000) == (myCardsValueInt/10000)) { sameHandCardsValueInt.push_back(*it); } } // 1.same hands existing if(!(sameHandCardsValueInt.empty())) { // first kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/100) == (myCardsValueInt/100)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } if(different) { ++cardStringIt_c; handName += ", fifth card " + *cardStringIt_c; } } } break; // Pair case 1: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; // same hand detection for(it = shownCardsValueInt.begin(); it != shownCardsValueInt.end(); ++it) { if(((*it)/1000000) == (myCardsValueInt/1000000)) { sameHandCardsValueInt.push_back(*it); } } // 1.same hands existing if(!(sameHandCardsValueInt.empty())) { // first kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/10000) == (myCardsValueInt/10000)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", third card " + *cardStringIt_c; } // 2.there are still same hands if(equal) { different = false; equal = false; // second kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/100) == (myCardsValueInt/100)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", fourth card " + *cardStringIt_c; } // 3.there are still same hands if(equal) { different = false; equal = false; // third kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if((*it) == myCardsValueInt) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } if(different) { ++cardStringIt_c; handName += ", fifth card " + *cardStringIt_c; } } } } } break; // highestCard case 0: { handName = *cardStringIt_c; ++cardStringIt_c; handName += *cardStringIt_c; // same hand detection for(it = shownCardsValueInt.begin(); it != shownCardsValueInt.end(); ++it) { if(((*it)/1000000) == (myCardsValueInt/1000000)) { sameHandCardsValueInt.push_back(*it); } } // 1.same hands existing if(!(sameHandCardsValueInt.empty())) { // first kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/10000) == (myCardsValueInt/10000)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", second card " + *cardStringIt_c; } // 2.there are still same hands if(equal) { different = false; equal = false; // second kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/100) == (myCardsValueInt/100)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", third card " + *cardStringIt_c; } // 3.there are still same hands if(equal) { different = false; equal = false; // third kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if(((*it)/10) == (myCardsValueInt/10)) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } ++cardStringIt_c; if(different) { handName += ", fourth card " + *cardStringIt_c; } // 4.there are still same hands if(equal) { different = false; equal = false; // third kicker? for(it = sameHandCardsValueInt.begin(); it != sameHandCardsValueInt.end(); ) { if((*it) == myCardsValueInt) { equal = true; ++it; } else { different = true; it = sameHandCardsValueInt.erase(it); } } if(different) { ++cardStringIt_c; handName += ", fifth card " + *cardStringIt_c; } } } } } } break; default: {} } return handName; } std::list CardsValue::translateCardsValueCode(int cardsValueCode) { std::list cardString; //erste Ziffer : Blattname int firstPart = cardsValueCode/100000000; //zweite und dritte Ziffer : Kicker, highest Card, usw. int secondPart = cardsValueCode/1000000 - firstPart*100; //vierte und fünfte Ziffer int thirdPart = cardsValueCode/10000 - firstPart*10000 - secondPart*100; // usw int fourthPart = cardsValueCode/100 - firstPart*1000000 - secondPart*10000 - thirdPart*100; // int fifthPart = cardsValueCode - firstPart*100000000 - secondPart*1000000 - thirdPart*10000 - fourthPart*100; // fuer highest Card int fifthPartA = cardsValueCode/10 - firstPart*10000000 - secondPart*100000 - thirdPart*1000 - fourthPart*10; int fifthPartB = cardsValueCode - firstPart*100000000 - secondPart*1000000 - thirdPart*10000 - fourthPart*100 - fifthPartA*10; switch (firstPart) { // Royal Flush case 9: cardString.push_back("Royal Flush"); break; // Straight Flush case 8: { cardString.push_back("Straight Flush, "); switch(secondPart) { case 11: cardString.push_back("King high"); break; case 10: cardString.push_back("Queen high"); break; case 9: cardString.push_back("Jack high"); break; case 8: cardString.push_back("Ten high"); break; case 7: cardString.push_back("Nine high"); break; case 6: cardString.push_back("Eight high"); break; case 5: cardString.push_back("Seven high"); break; case 4: cardString.push_back("Six high"); break; case 3: cardString.push_back("Five high"); break; default: cardString.push_back("ERROR"); } } break; // Four of a Kind case 7: { cardString.push_back("Four of a Kind, "); switch(secondPart) { case 12: cardString.push_back("Aces"); break; case 11: cardString.push_back("Kings"); break; case 10: cardString.push_back("Queens"); break; case 9: cardString.push_back("Jacks"); break; case 8: cardString.push_back("Tens"); break; case 7: cardString.push_back("Nines"); break; case 6: cardString.push_back("Eights"); break; case 5: cardString.push_back("Sevens"); break; case 4: cardString.push_back("Sixes"); break; case 3: cardString.push_back("Fives"); break; case 2: cardString.push_back("Fours"); break; case 1: cardString.push_back("Threes"); break; case 0: cardString.push_back("Deuces"); break; default: cardString.push_back("ERROR"); } // Kicker switch(thirdPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } } break; // Full House case 6: { cardString.push_back("Full House, "); //Drilling switch(secondPart) { case 12: cardString.push_back("Aces full of "); break; case 11: cardString.push_back("Kings full of "); break; case 10: cardString.push_back("Queens full of "); break; case 9: cardString.push_back("Jacks full of "); break; case 8: cardString.push_back("Tens full of "); break; case 7: cardString.push_back("Nines full of "); break; case 6: cardString.push_back("Eights full of "); break; case 5: cardString.push_back("Sevens full of "); break; case 4: cardString.push_back("Sixes full of "); break; case 3: cardString.push_back("Fives full of "); break; case 2: cardString.push_back("Fours full of "); break; case 1: cardString.push_back("Threes full of "); break; case 0: cardString.push_back("Deuces full of "); break; default: cardString.push_back("ERROR"); } //Pärchen switch(thirdPart) { case 12: cardString.push_back("Aces"); break; case 11: cardString.push_back("Kings"); break; case 10: cardString.push_back("Queens"); break; case 9: cardString.push_back("Jacks"); break; case 8: cardString.push_back("Tens"); break; case 7: cardString.push_back("Nines"); break; case 6: cardString.push_back("Eights"); break; case 5: cardString.push_back("Sevens"); break; case 4: cardString.push_back("Sixes"); break; case 3: cardString.push_back("Fives"); break; case 2: cardString.push_back("Fours"); break; case 1: cardString.push_back("Threes"); break; case 0: cardString.push_back("Deuces"); break; default: cardString.push_back("ERROR"); } } break; // Flush case 5: { cardString.push_back("Flush, "); //highest Card switch(secondPart) { case 12: cardString.push_back("Ace high"); break; case 11: cardString.push_back("King high"); break; case 10: cardString.push_back("Queen high"); break; case 9: cardString.push_back("Jack high"); break; case 8: cardString.push_back("Ten high"); break; case 7: cardString.push_back("Nine high"); break; case 6: cardString.push_back("Eight high"); break; case 5: cardString.push_back("Seven high"); break; case 4: cardString.push_back("Six high"); break; default: cardString.push_back("ERROR"); } // Kicker 1 switch(thirdPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 2 switch(fourthPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 3 switch(fifthPartA) { case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 4 switch(fifthPartB) { case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } } break; // Straight case 4: { cardString.push_back("Straight, "); switch(secondPart) { case 12: cardString.push_back("Ace high"); break; case 11: cardString.push_back("King high"); break; case 10: cardString.push_back("Queen high"); break; case 9: cardString.push_back("Jack high"); break; case 8: cardString.push_back("Ten high"); break; case 7: cardString.push_back("Nine high"); break; case 6: cardString.push_back("Eight high"); break; case 5: cardString.push_back("Seven high"); break; case 4: cardString.push_back("Six high"); break; case 3: cardString.push_back("Five high"); break; default: cardString.push_back("ERROR"); } } break; // Three of a Kind case 3: { cardString.push_back("Three of a Kind, "); switch(secondPart) { case 12: cardString.push_back("Aces"); break; case 11: cardString.push_back("Kings"); break; case 10: cardString.push_back("Queens"); break; case 9: cardString.push_back("Jacks"); break; case 8: cardString.push_back("Tens"); break; case 7: cardString.push_back("Nines"); break; case 6: cardString.push_back("Eights"); break; case 5: cardString.push_back("Sevens"); break; case 4: cardString.push_back("Sixes"); break; case 3: cardString.push_back("Fives"); break; case 2: cardString.push_back("Fours"); break; case 1: cardString.push_back("Threes"); break; case 0: cardString.push_back("Deuces"); break; default: cardString.push_back("ERROR"); } //Kicker 1 switch(thirdPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 2 switch(fourthPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } } break; // Two Pair case 2: { cardString.push_back("Two Pair, "); // erster Pair switch(secondPart) { case 12: cardString.push_back("Aces and "); break; case 11: cardString.push_back("Kings and "); break; case 10: cardString.push_back("Queens and "); break; case 9: cardString.push_back("Jacks and "); break; case 8: cardString.push_back("Tens and "); break; case 7: cardString.push_back("Nines and "); break; case 6: cardString.push_back("Eights and "); break; case 5: cardString.push_back("Sevens and "); break; case 4: cardString.push_back("Sixes and "); break; case 3: cardString.push_back("Fives and "); break; case 2: cardString.push_back("Fours and "); break; case 1: cardString.push_back("Threes and "); break; case 0: cardString.push_back("Deuces and "); break; default: cardString.push_back("ERROR"); } // zweiter Pair switch(thirdPart) { case 12: cardString.push_back("Aces"); break; case 11: cardString.push_back("Kings"); break; case 10: cardString.push_back("Queens"); break; case 9: cardString.push_back("Jacks"); break; case 8: cardString.push_back("Tens"); break; case 7: cardString.push_back("Nines"); break; case 6: cardString.push_back("Eights"); break; case 5: cardString.push_back("Sevens"); break; case 4: cardString.push_back("Sixes"); break; case 3: cardString.push_back("Fives"); break; case 2: cardString.push_back("Fours"); break; case 1: cardString.push_back("Threes"); break; case 0: cardString.push_back("Deuces"); break; default: cardString.push_back("ERROR"); } //Kicker switch(fourthPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } } break; // One Pair case 1: { cardString.push_back("One Pair, "); // Pair switch(secondPart) { case 12: cardString.push_back("Aces"); break; case 11: cardString.push_back("Kings"); break; case 10: cardString.push_back("Queens"); break; case 9: cardString.push_back("Jacks"); break; case 8: cardString.push_back("Tens"); break; case 7: cardString.push_back("Nines"); break; case 6: cardString.push_back("Eights"); break; case 5: cardString.push_back("Sevens"); break; case 4: cardString.push_back("Sixes"); break; case 3: cardString.push_back("Fives"); break; case 2: cardString.push_back("Fours"); break; case 1: cardString.push_back("Threes"); break; case 0: cardString.push_back("Deuces"); break; default: cardString.push_back("ERROR"); } // Kicker 1 switch(thirdPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 2 switch(fourthPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 3 switch(fifthPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } } break; // Highest Card case 0: { cardString.push_back("High Card, "); // Kicker 1 switch(secondPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuces"); break; default: cardString.push_back("ERROR"); } // Kicker 2 switch(thirdPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 3 switch(fourthPart) { case 12: cardString.push_back("Ace"); break; case 11: cardString.push_back("King"); break; case 10: cardString.push_back("Queen"); break; case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 4 switch(fifthPartA) { case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } //Kicker 5 switch(fifthPartB) { case 9: cardString.push_back("Jack"); break; case 8: cardString.push_back("Ten"); break; case 7: cardString.push_back("Nine"); break; case 6: cardString.push_back("Eight"); break; case 5: cardString.push_back("Seven"); break; case 4: cardString.push_back("Six"); break; case 3: cardString.push_back("Five"); break; case 2: cardString.push_back("Four"); break; case 1: cardString.push_back("Three"); break; case 0: cardString.push_back("Deuce"); break; default: cardString.push_back("ERROR"); } } break; default: cardString.push_back("ERROR"); } return cardString; } //int** CardsValue::showdown(GameState beRoID, int** playerCards, int playerCount) { // // int i,j; // // int** chance = new int*[2]; // // for(i=0;i<10;i++) { // chance[i] = new int[2]; // for(j=0;j<2;j++) { // chance[i][j] = 0; // } // } // // int rand[5]; // // return chance; // //}