complete integration of new cards value function with an additional auxiliary function; renaming some variables; comment old code

This commit is contained in:
floty
2014-06-12 02:24:59 +02:00
parent a2d7c2e916
commit b79c60e246
8 changed files with 830 additions and 839 deletions
+45 -17
View File
@@ -636,7 +636,7 @@ int CardsValue::cardsValueOld(int cards[7], int position[5])
// Karten fr den Vierling-, Full-House-, Drilling- und Paartest umsortieren // Karten fr den Vierling-, Full-House-, Drilling- und Paartest umsortieren
for(k1=0; k1<7; k1++) { for(k1=0; k1<7; k1++) {
for(k2=k1+1; k2<7; k2++) { for(k2=k1+1; k2<7; k2++) {
if(array[k1][1]<array[k2][1]) { if(array[k1][1]<array[k2][1] || (array[k1][1]==array[k2][1] && array[k1][0]<array[k2][0])) { // gleiche kartenwerte nach farben abwärts
ktemp[0] = array[k1][0]; ktemp[0] = array[k1][0];
ktemp[1] = array[k1][1]; ktemp[1] = array[k1][1];
ktemp[2] = array[k1][2]; ktemp[2] = array[k1][2];
@@ -650,22 +650,22 @@ int CardsValue::cardsValueOld(int cards[7], int position[5])
} }
} }
// nach Position sortieren: erst board, dann hole cards // // nach Position sortieren: erst board, dann hole cards
for(k1=0; k1<7; k1++) { // for(k1=0; k1<7; k1++) {
for(k2=k1+1; k2<7; k2++) { // for(k2=k1+1; k2<7; k2++) {
if(array[k1][1]==array[k2][1] && array[k1][2]<array[k2][2]) { // if(array[k1][1]==array[k2][1] && array[k1][2]<array[k2][2]) {
ktemp[0] = array[k1][0]; // ktemp[0] = array[k1][0];
ktemp[1] = array[k1][1]; // ktemp[1] = array[k1][1];
ktemp[2] = array[k1][2]; // ktemp[2] = array[k1][2];
array[k1][0] = array[k2][0]; // array[k1][0] = array[k2][0];
array[k1][1] = array[k2][1]; // array[k1][1] = array[k2][1];
array[k1][2] = array[k2][2]; // array[k1][2] = array[k2][2];
array[k2][0] = ktemp[0]; // array[k2][0] = ktemp[0];
array[k2][1] = ktemp[1]; // array[k2][1] = ktemp[1];
array[k2][2] = ktemp[2]; // array[k2][2] = ktemp[2];
} // }
} // }
} // }
// auf Vierling (Klasse 7) testen // auf Vierling (Klasse 7) testen
for(j1=0; j1<4; j1++) { for(j1=0; j1<4; j1++) {
@@ -2578,10 +2578,38 @@ int CardsValue::bitcount(int in)
while (in) { while (in) {
count++ ; count++ ;
in &= (in - 1) ; in &= (in - 1) ;
} }
return count ; return count ;
} }
int
CardsValue::bestHandToPosition(int bestHand[4], int cardArray[7], int position[5])
{
for(int card_idx=0; card_idx<5; card_idx++) position[card_idx] = -1;
int position_ctr = 0;
for(int color_idx=0; color_idx<4; color_idx++) {
for(int card_idx_1=0; card_idx_1<13; card_idx_1++) {
if(bestHand[color_idx] & (1<<card_idx_1)) {
for(int card_idx_2=0; card_idx_2<7; card_idx_2++) {
if(cardArray[card_idx_2] == color_idx*13+card_idx_1) {
if(position_ctr<5) {
position[position_ctr] = card_idx_2;
position_ctr++;
} else {
return 0;
}
}
}
}
}
}
if(position_ctr!=5) return 0;
else return 1;
}
//int** CardsValue::showdown(GameState beRoID, int** playerCards, int playerCount) { //int** CardsValue::showdown(GameState beRoID, int** playerCards, int playerCount) {
// //
+2 -1
View File
@@ -49,7 +49,7 @@ class CardsValue
public: public:
static int holeCardsClass(int, int); static int holeCardsClass(int, int);
static int cardsValueShort(int[4]); static int cardsValueShort(int[4]);
static int cardsValue(int[4], int[4]); static int cardsValue(int[4], int[4] = 0);
static KickerValue determineKickerValue(int, int, int); static KickerValue determineKickerValue(int, int, int);
static int cardsValueOld(int[7], int[5]); static int cardsValueOld(int[7], int[5]);
static std::string determineHandName(int myCardsValueInt, PlayerList activePlayerList); static std::string determineHandName(int myCardsValueInt, PlayerList activePlayerList);
@@ -60,6 +60,7 @@ public:
static std::vector< std::vector<int> > calcCardsChance(GameState, int[2], int[5]); static std::vector< std::vector<int> > calcCardsChance(GameState, int[2], int[5]);
static int bitcount(int in); static int bitcount(int in);
static int bestHandToPosition(int bestHand[4], int cardArray[7], int position[5]);
//static int** showdown(GameState, int**, int); //static int** showdown(GameState, int**, int);
}; };
+6 -6
View File
@@ -147,26 +147,26 @@ void LocalBeRo::run()
//log the turned cards //log the turned cards
if(!logBoardCardsDone) { if(!logBoardCardsDone) {
int tempBoardCardsArray[5]; int boardCards[5];
myHand->getBoard()->getMyCards(tempBoardCardsArray); myHand->getBoard()->getMyCards(boardCards);
switch(myBeRoID) { switch(myBeRoID) {
case GAME_STATE_FLOP: case GAME_STATE_FLOP:
myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2]); myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, boardCards[0], boardCards[1], boardCards[2]);
break; break;
case GAME_STATE_TURN: case GAME_STATE_TURN:
myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2], tempBoardCardsArray[3]); myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, boardCards[0], boardCards[1], boardCards[2], boardCards[3]);
break; break;
case GAME_STATE_RIVER: case GAME_STATE_RIVER:
myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2], tempBoardCardsArray[3], tempBoardCardsArray[4]); myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, boardCards[0], boardCards[1], boardCards[2], boardCards[3], boardCards[4]);
break; break;
default: { default: {
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR - wrong myBeRoID"); LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR - wrong myBeRoID");
} }
} }
if(myHand->getLog()) myHand->getLog()->logBoardCards(tempBoardCardsArray); if(myHand->getLog()) myHand->getLog()->logBoardCards(boardCards);
logBoardCardsDone = true; logBoardCardsDone = true;
} }
+30 -29
View File
@@ -58,7 +58,7 @@ LocalHand::LocalHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, boost:
// generate cards and assign to board and player // generate cards and assign to board and player
const int NumCards = 52; const int NumCards = 52;
int cardsArray[NumCards] = { int cards[NumCards] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
@@ -66,48 +66,49 @@ LocalHand::LocalHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, boost:
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51 50, 51
}; };
Tools::ShuffleArrayNonDeterministic(cardsArray, NumCards); Tools::ShuffleArrayNonDeterministic(cards, NumCards);
int tempBoardArray[5]; int boardCards[5];
int tempPlayerArray[2]; int playerHoleCards[2];
int tempPlayerAndBoardArray[7]; int playerCards[7];
int bestHandPos[5];
int sBluff; int sBluff;
// board cards // board cards
for(i=0; i<5; i++) tempBoardArray[i] = cardsArray[i]; for(i=0; i<5; i++) boardCards[i] = cards[i];
// debug mode // debug mode
if(myLog) myLog->debugMode_getBoardCards(tempBoardArray,myID); if(myLog) myLog->debugMode_getBoardCards(boardCards,myID);
// prepare whole player hand // prepare whole player hand
for(i=0; i<5; i++) tempPlayerAndBoardArray[i+2] = tempBoardArray[i]; for(i=0; i<5; i++) playerCards[i+2] = boardCards[i];
k = 0; k = 0;
myBoard->setMyCards(tempBoardArray); myBoard->setMyCards(boardCards);
for(it=activePlayerList->begin(); it!=activePlayerList->end(); ++it, k++) { for(it=activePlayerList->begin(); it!=activePlayerList->end(); ++it, k++) {
(*it)->getMyBestHandPosition(bestHandPos);
// hole cards // hole cards
for(j=0; j<2; j++) tempPlayerArray[j] = cardsArray[2*k+j+5]; for(j=0; j<2; j++) playerHoleCards[j] = cards[2*k+j+5];
(*it)->setMyHoleCards(playerHoleCards);
// debug mode if(myLog) myLog->debugMode_getPlayerCards(playerHoleCards,myID,k); // debug mode
if(myLog) myLog->debugMode_getPlayerCards(tempPlayerArray,myID,k);
// complete whole player hand // complete whole player hand
for(j=0; j<2; j++) tempPlayerAndBoardArray[j] = tempPlayerArray[j]; for(j=0; j<2; j++) playerCards[j] = playerHoleCards[j];
(*it)->setMyHoleCards(tempPlayerArray); // determine cards value
(*it)->setMyCardsValueInt(CardsValue::cardsValueOld(tempPlayerAndBoardArray, bestHandPos)); int bestHand[4] = { 0,0,0,0 };
int playerCardsColor[4] = { 0,0,0,0 };
for(j=0; j<7; j++) playerCardsColor[playerCards[j]/13] |= (1 << playerCards[j]%13);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(playerCardsColor,bestHand));
// determine position of best 5 cards
int bestHandPos[5];
if(CardsValue::bestHandToPosition(bestHand,playerCards,bestHandPos)) {
(*it)->setMyBestHandPosition(bestHandPos); (*it)->setMyBestHandPosition(bestHandPos);
(*it)->setMyRoundStartCash((*it)->getMyCash()); } else {
// error-check
for(j=0; j<5; j++) {
if (bestHandPos[j] == -1) {
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR getMyBestHandPosition"); LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR getMyBestHandPosition");
} }
}
// set round start cash
(*it)->setMyRoundStartCash((*it)->getMyCash());
// set sBluff for all players --> TODO for ai-player in internet // set sBluff for all players --> TODO for ai-player in internet
if((*it)->getMyID() != 0) { if((*it)->getMyID() != 0) {
@@ -394,11 +395,11 @@ void LocalHand::switchRounds()
//log board cards for allin //log board cards for allin
if(currentRound >= GAME_STATE_FLOP) { if(currentRound >= GAME_STATE_FLOP) {
int tempBoardCardsArray[5]; int boardCards[5];
myBoard->getMyCards(tempBoardCardsArray); myBoard->getMyCards(boardCards);
myGui->logDealBoardCardsMsg(currentRound, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2], tempBoardCardsArray[3], tempBoardCardsArray[4]); myGui->logDealBoardCardsMsg(currentRound, boardCards[0], boardCards[1], boardCards[2], boardCards[3], boardCards[4]);
if(myLog) myLog->logBoardCards(tempBoardCardsArray); if(myLog) myLog->logBoardCards(boardCards);
} }
} }
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -282,10 +282,10 @@ public:
void turnEngine(); void turnEngine();
void riverEngine(); void riverEngine();
void preflopEngine3(); // void preflopEngine3();
void flopEngine3(); // void flopEngine3();
void turnEngine3(); // void turnEngine3();
void riverEngine3(); // void riverEngine3();
int flopCardsValue(int*); int flopCardsValue(int*);
int turnCardsValue(int*); int turnCardsValue(int*);
+4 -4
View File
@@ -755,22 +755,22 @@ Log::debugMode_getStartDealerPosition(unsigned* dealerPosition)
} }
void void
Log::debugMode_getBoardCards(int *tempBoardArray, int handID) Log::debugMode_getBoardCards(int *boardCards, int handID)
{ {
if(debug_mode) { if(debug_mode) {
if((unsigned)handID <= sizeof(debug_mode_boardCards)/sizeof(unsigned)/5) { if((unsigned)handID <= sizeof(debug_mode_boardCards)/sizeof(unsigned)/5) {
for(int i=0; i<5; i++) tempBoardArray[i] = debug_mode_boardCards[handID-1][i]; for(int i=0; i<5; i++) boardCards[i] = debug_mode_boardCards[handID-1][i];
} }
} }
} }
void void
Log::debugMode_getPlayerCards(int *tempPlayerArray, int handID, int seatID) Log::debugMode_getPlayerCards(int *playerCards, int handID, int seatID)
{ {
if(debug_mode) { if(debug_mode) {
if((unsigned)handID <= sizeof(debug_mode_playerCards)/sizeof(int)/MAX_NUMBER_OF_PLAYERS/2) { if((unsigned)handID <= sizeof(debug_mode_playerCards)/sizeof(int)/MAX_NUMBER_OF_PLAYERS/2) {
for(int i=0; i<2; i++) { for(int i=0; i<2; i++) {
if(debug_mode_playerCards[handID-1][seatID][i]>=0) tempPlayerArray[i] = debug_mode_playerCards[handID-1][seatID][i]; if(debug_mode_playerCards[handID-1][seatID][i]>=0) playerCards[i] = debug_mode_playerCards[handID-1][seatID][i];
} }
} }
} }
+20 -20
View File
@@ -792,20 +792,20 @@ void gameTableImpl::applySettings(settingsDialogImpl* mySettingsDialog)
//refresh board cards if game is running //refresh board cards if game is running
if(myStartWindow->getSession()->getCurrentGame()) { if(myStartWindow->getSession()->getCurrentGame()) {
int tempBoardCardsArray[5]; int boardCards[5];
myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(tempBoardCardsArray); myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(boardCards);
GameState currentState = myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getCurrentBeRo()->getMyBeRoID(); GameState currentState = myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getCurrentBeRo()->getMyBeRoID();
if(currentState >= GAME_STATE_FLOP && currentState <= GAME_STATE_POST_RIVER) if(currentState >= GAME_STATE_FLOP && currentState <= GAME_STATE_POST_RIVER)
for(int i=0; i<3; i++) { for(int i=0; i<3; i++) {
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[i], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[i], 10)+".png"));
boardCardsArray[i]->setPixmap(card, false); boardCardsArray[i]->setPixmap(card, false);
} }
if(currentState >= GAME_STATE_TURN && currentState <= GAME_STATE_POST_RIVER) { if(currentState >= GAME_STATE_TURN && currentState <= GAME_STATE_POST_RIVER) {
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[3], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[3], 10)+".png"));
boardCardsArray[3]->setPixmap(card, false); boardCardsArray[3]->setPixmap(card, false);
} }
if(currentState == GAME_STATE_RIVER || currentState == GAME_STATE_POST_RIVER) { if(currentState == GAME_STATE_RIVER || currentState == GAME_STATE_POST_RIVER) {
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[4], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[4], 10)+".png"));
boardCardsArray[4]->setPixmap(card, false); boardCardsArray[4]->setPixmap(card, false);
} }
} }
@@ -1532,10 +1532,10 @@ void gameTableImpl::dealFlopCards3()
void gameTableImpl::dealFlopCards4() void gameTableImpl::dealFlopCards4()
{ {
int tempBoardCardsArray[5]; int boardCards[5];
myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(tempBoardCardsArray); myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(boardCards);
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[0], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[0], 10)+".png"));
//Config? mit oder ohne Eye-Candy? //Config? mit oder ohne Eye-Candy?
if(myConfig->readConfigInt("ShowFlipCardsAnimation")) { if(myConfig->readConfigInt("ShowFlipCardsAnimation")) {
@@ -1552,9 +1552,9 @@ void gameTableImpl::dealFlopCards4()
void gameTableImpl::dealFlopCards5() void gameTableImpl::dealFlopCards5()
{ {
int tempBoardCardsArray[5]; int boardCards[5];
myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(tempBoardCardsArray); myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(boardCards);
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[1], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[1], 10)+".png"));
//Config? mit oder ohne Eye-Candy? //Config? mit oder ohne Eye-Candy?
if(myConfig->readConfigInt("ShowFlipCardsAnimation")) { if(myConfig->readConfigInt("ShowFlipCardsAnimation")) {
@@ -1571,9 +1571,9 @@ void gameTableImpl::dealFlopCards5()
void gameTableImpl::dealFlopCards6() void gameTableImpl::dealFlopCards6()
{ {
int tempBoardCardsArray[5]; int boardCards[5];
myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(tempBoardCardsArray); myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(boardCards);
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[2], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[2], 10)+".png"));
//Config? mit oder ohne Eye-Candy? //Config? mit oder ohne Eye-Candy?
if(myConfig->readConfigInt("ShowFlipCardsAnimation")) { if(myConfig->readConfigInt("ShowFlipCardsAnimation")) {
@@ -1615,9 +1615,9 @@ void gameTableImpl::dealTurnCards1()
void gameTableImpl::dealTurnCards2() void gameTableImpl::dealTurnCards2()
{ {
int tempBoardCardsArray[5]; int boardCards[5];
myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(tempBoardCardsArray); myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(boardCards);
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[3], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[3], 10)+".png"));
//Config? mit oder ohne Eye-Candy? //Config? mit oder ohne Eye-Candy?
if(myConfig->readConfigInt("ShowFlipCardsAnimation")) { if(myConfig->readConfigInt("ShowFlipCardsAnimation")) {
@@ -1660,9 +1660,9 @@ void gameTableImpl::dealRiverCards1()
void gameTableImpl::dealRiverCards2() void gameTableImpl::dealRiverCards2()
{ {
int tempBoardCardsArray[5]; int boardCards[5];
myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(tempBoardCardsArray); myStartWindow->getSession()->getCurrentGame()->getCurrentHand()->getBoard()->getMyCards(boardCards);
QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(tempBoardCardsArray[4], 10)+".png")); QPixmap card = QPixmap::fromImage(QImage(myCardDeckStyle->getCurrentDir()+QString::number(boardCards[4], 10)+".png"));
//Config? mit oder ohne Eye-Candy? //Config? mit oder ohne Eye-Candy?
if(myConfig->readConfigInt("ShowFlipCardsAnimation")) { if(myConfig->readConfigInt("ShowFlipCardsAnimation")) {