From 0380ae0ced6b60bf7a8422770c70e5b8106eaff4 Mon Sep 17 00:00:00 2001 From: floty Date: Sat, 4 Sep 2010 23:30:55 +0000 Subject: [PATCH] bugfix: playerNeedToShowCards-List for all in situations --- src/engine/local_engine/localboard.cpp | 296 +++++++++++++------------ 1 file changed, 158 insertions(+), 138 deletions(-) diff --git a/src/engine/local_engine/localboard.cpp b/src/engine/local_engine/localboard.cpp index 1d7d9f81..9a5c314f 100755 --- a/src/engine/local_engine/localboard.cpp +++ b/src/engine/local_engine/localboard.cpp @@ -239,179 +239,199 @@ void LocalBoard::distributePot() { void LocalBoard::determinePlayerNeedToShowCards() { - playerNeedToShowCards.clear(); + // in All In Condition everybody have to show the cards + if(currentHand->getAllInCondition()) { - // all winners have to show their cards -// playerNeedToShowCards = winners; + PlayerListConstIterator it_c; -// std::_List_const_iterator it_c; - - std::list level; - -// for(it_c=winners.begin(); it_c != winners.end(); it_c++) { -// cout << (*it_c) << endl; -// } -// -// cout << "lastActionPlayer" << currentHand->getCurrentBeRo()->getLastActionPlayer() << endl; -// -// int lastActionPlayer = ; -// -// if(lastActionPlayer == -1) { -// lastActionPlayer = 0; -// } -// -// -// - - - PlayerListConstIterator lastActionPlayerIt; - PlayerListConstIterator it_c; - -// cout << "lAP-Ende: " << currentHand->getLastActionPlayer() << endl; - // search lastActionPlayer - for(it_c = activePlayerList->begin(); it_c != activePlayerList->end(); it_c++) { - if((*it_c)->getMyUniqueID() == currentHand->getLastActionPlayer() && (*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { - lastActionPlayerIt = it_c; -// cout << (*it_c)->getMyUniqueID() << endl; - break; - } - } - - if(it_c == activePlayerList->end()) { for(it_c = activePlayerList->begin(); it_c != activePlayerList->end(); it_c++) { if((*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { - lastActionPlayerIt = it_c; - break; + playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); } } + } - // the player who has done the last action has to show his cards first - playerNeedToShowCards.push_back((*lastActionPlayerIt)->getMyUniqueID()); + else { - int *level_tmp = new int[2]; - // get position und cardsValue of the player who show his cards first - level_tmp[0] = (*lastActionPlayerIt)->getMyCardsValueInt(); - level_tmp[1] = (*lastActionPlayerIt)->getMyRoundStartCash()-(*lastActionPlayerIt)->getMyCash(); -// level_tmp = {(*lastActionPlayerIt)->getMyCardsValueInt(),(*lastActionPlayerIt)->getMyRoundStartCash()-(*lastActionPlayerIt)->getMyCash()}; -// cout << level_tmp[0] << "," << level_tmp[1] << endl; + // all winners have to show their cards + // playerNeedToShowCards = winners; - level.push_back(level_tmp); + // std::_List_const_iterator it_c; - std::_List_iterator level_it; - std::_List_iterator level_it_tmp; - std::_List_iterator next_level_it; + std::list level; -// PlayerListConstIterator firstAfterLastActionPlayerIt = lastActionPlayerIt; -// firstAfterLastActionPlayerIt++; + // for(it_c=winners.begin(); it_c != winners.end(); it_c++) { + // cout << (*it_c) << endl; + // } + // + // cout << "lastActionPlayer" << currentHand->getCurrentBeRo()->getLastActionPlayer() << endl; + // + // int lastActionPlayer = ; + // + // if(lastActionPlayer == -1) { + // lastActionPlayer = 0; + // } + // + // + // - it_c = lastActionPlayerIt; - it_c++; - for(unsigned i = 0; i < activePlayerList->size(); i++) { + PlayerListConstIterator lastActionPlayerIt; + PlayerListConstIterator it_c; - if(it_c == activePlayerList->end()) it_c = activePlayerList->begin(); + // cout << "lAP-Ende: " << currentHand->getLastActionPlayer() << endl; + // search lastActionPlayer + for(it_c = activePlayerList->begin(); it_c != activePlayerList->end(); it_c++) { + if((*it_c)->getMyUniqueID() == currentHand->getLastActionPlayer() && (*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { + lastActionPlayerIt = it_c; + cout << (*it_c)->getMyUniqueID() << endl; + break; + } + } - if((*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { -// for(it_c = firstAfterLastActionPlayerIt; it_c != lastActionPlayerIt; it_c++) { - -// if(it_c == lastActionPlayerIt) { -// break; -// } -// } - for(level_it = level.begin(); level_it != level.end(); level_it++) { - if((*it_c)->getMyCardsValueInt() > (*level_it)[0]) { - next_level_it = level_it; - next_level_it++; - if(next_level_it == level.end()) { - playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); - level_tmp = new int[2]; - level_tmp[0] = (*it_c)->getMyCardsValueInt(); - level_tmp[1] = (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash(); - level.push_back(level_tmp); + if(it_c == activePlayerList->end()) { + for(it_c = activePlayerList->begin(); it_c != activePlayerList->end(); it_c++) { + if((*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { + lastActionPlayerIt = it_c; break; } - } else { - if((*it_c)->getMyCardsValueInt() == (*level_it)[0]) { - next_level_it = level_it; - next_level_it++; - -// for(level_it_tmp = level.begin(); level_it_tmp != level.end(); level_it_tmp++) { -// cout << (*level_it_tmp)[0] << "," << (*level_it_tmp)[1] << endl; -// } - - - if(next_level_it == level.end() || (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash() > (*next_level_it)[1]) { - playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); - if((*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash() > (*level_it)[1]) { - (*level_it)[1] = (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash(); - } - } - break; - } else { - if((*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash() > (*level_it)[1]) { - playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); - level_tmp = new int(2); - level_tmp[0] = (*it_c)->getMyCardsValueInt(); - level_tmp[1] = (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash(); - -// for(level_it_tmp = level.begin(); level_it_tmp != level.end(); level_it_tmp++) { -// cout << (*level_it_tmp)[0] << "," << (*level_it_tmp)[1] << endl; -// } - - level.insert(level_it,level_tmp); - -// for(level_it_tmp = level.begin(); level_it_tmp != level.end(); level_it_tmp++) { -// cout << (*level_it_tmp)[0] << "," << (*level_it_tmp)[1] << endl; -// } - - break; - } - } } } - } + // the player who has done the last action has to show his cards first + playerNeedToShowCards.push_back((*lastActionPlayerIt)->getMyUniqueID()); - it_c++; + cout << (*lastActionPlayerIt)->getMyUniqueID() << " - " << (*lastActionPlayerIt)->getMyName() << endl; + + int *level_tmp = new int[2]; + // get position und cardsValue of the player who show his cards first + level_tmp[0] = (*lastActionPlayerIt)->getMyCardsValueInt(); + level_tmp[1] = (*lastActionPlayerIt)->getMyRoundStartCash()-(*lastActionPlayerIt)->getMyCash(); + + // level_tmp = {(*lastActionPlayerIt)->getMyCardsValueInt(),(*lastActionPlayerIt)->getMyRoundStartCash()-(*lastActionPlayerIt)->getMyCash()}; + + cout << level_tmp[0] << "," << level_tmp[1] << endl; + + level.push_back(level_tmp); + + std::_List_iterator level_it; + std::_List_iterator level_it_tmp; + std::_List_iterator next_level_it; + + // PlayerListConstIterator firstAfterLastActionPlayerIt = lastActionPlayerIt; + // firstAfterLastActionPlayerIt++; + + it_c = lastActionPlayerIt; + it_c++; + + for(unsigned i = 0; i < activePlayerList->size(); i++) { + + if(it_c == activePlayerList->end()) it_c = activePlayerList->begin(); + + if((*it_c)->getMyAction() != PLAYER_ACTION_FOLD) { + // for(it_c = firstAfterLastActionPlayerIt; it_c != lastActionPlayerIt; it_c++) { + + // if(it_c == lastActionPlayerIt) { + // break; + // } + // } + for(level_it = level.begin(); level_it != level.end(); level_it++) { + if((*it_c)->getMyCardsValueInt() > (*level_it)[0]) { + next_level_it = level_it; + next_level_it++; + if(next_level_it == level.end()) { + playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); + level_tmp = new int[2]; + level_tmp[0] = (*it_c)->getMyCardsValueInt(); + level_tmp[1] = (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash(); + level.push_back(level_tmp); + break; + } + } else { + if((*it_c)->getMyCardsValueInt() == (*level_it)[0]) { + next_level_it = level_it; + next_level_it++; + + for(level_it_tmp = level.begin(); level_it_tmp != level.end(); level_it_tmp++) { + cout << (*level_it_tmp)[0] << "," << (*level_it_tmp)[1] << endl; + } + + + if(next_level_it == level.end() || (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash() > (*next_level_it)[1]) { + playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); + if((*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash() > (*level_it)[1]) { + (*level_it)[1] = (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash(); + } + } + break; + } else { + if((*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash() > (*level_it)[1]) { + playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); + level_tmp = new int(2); + level_tmp[0] = (*it_c)->getMyCardsValueInt(); + level_tmp[1] = (*it_c)->getMyRoundStartCash()-(*it_c)->getMyCash(); + + for(level_it_tmp = level.begin(); level_it_tmp != level.end(); level_it_tmp++) { + cout << (*level_it_tmp)[0] << "," << (*level_it_tmp)[1] << endl; + } + + level.insert(level_it,level_tmp); + + for(level_it_tmp = level.begin(); level_it_tmp != level.end(); level_it_tmp++) { + cout << (*level_it_tmp)[0] << "," << (*level_it_tmp)[1] << endl; + } + + break; + } + } + } + } + + } + + it_c++; + + } + + + + // bool showCards; + + // search for more player who have to show their cards (perhaps not all situation are considered yet) + // for(it_c = ++lastActionPlayerIt; it_c!=activePlayerList->end(); it_c++) { + // + // showCards = false; + // + //// if((*it_c)->getMyCardsValueInt() >= highestCardsValueInt) { + //// playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); + //// highestCardsValueInt = (*it_c)->getMyCardsValueInt(); + //// } + // } + // + // for(it_c = activePlayerList->begin(); it_c!=lastActionPlayerIt; it_c++) { + //// if((*it_c)->getMyCardsValueInt() >= highestCardsValueInt) { + //// playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); + //// highestCardsValueInt = (*it_c)->getMyCardsValueInt(); + //// } + // } } - -// bool showCards; - - // search for more player who have to show their cards (perhaps not all situation are considered yet) -// for(it_c = ++lastActionPlayerIt; it_c!=activePlayerList->end(); it_c++) { -// -// showCards = false; -// -//// if((*it_c)->getMyCardsValueInt() >= highestCardsValueInt) { -//// playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); -//// highestCardsValueInt = (*it_c)->getMyCardsValueInt(); -//// } -// } -// -// for(it_c = activePlayerList->begin(); it_c!=lastActionPlayerIt; it_c++) { -//// if((*it_c)->getMyCardsValueInt() >= highestCardsValueInt) { -//// playerNeedToShowCards.push_back((*it_c)->getMyUniqueID()); -//// highestCardsValueInt = (*it_c)->getMyCardsValueInt(); -//// } -// } - // sort and unique the list playerNeedToShowCards.sort(); playerNeedToShowCards.unique(); std::_List_iterator playerNeedToShowCardsIt; -// for(playerNeedToShowCardsIt = playerNeedToShowCards.begin(); playerNeedToShowCardsIt!=playerNeedToShowCards.end(); playerNeedToShowCardsIt++) { -// cout << (*playerNeedToShowCardsIt) << '\t'; -// } -// cout << endl; + for(playerNeedToShowCardsIt = playerNeedToShowCards.begin(); playerNeedToShowCardsIt!=playerNeedToShowCards.end(); playerNeedToShowCardsIt++) { + cout << (*playerNeedToShowCardsIt) << '\t'; + } + cout << endl; }