diff --git a/src/engine/network_engine/clienthand.cpp b/src/engine/network_engine/clienthand.cpp index f2229744..acd1910d 100644 --- a/src/engine/network_engine/clienthand.cpp +++ b/src/engine/network_engine/clienthand.cpp @@ -24,26 +24,26 @@ using namespace std; ClientHand::ClientHand(boost::shared_ptr f, GuiInterface *g, BoardInterface *b, PlayerInterface **p, int id, int sP, int aP, int dP, int sB,int sC) : myFactory(f), myGui(g), myBoard(b), playerArray(p), myPreflop(0), myFlop(0), myTurn(0), myRiver(0), myID(id), actualQuantityPlayers(aP), startQuantityPlayers(sP), dealerPosition(dP), actualRound(0), smallBlind(sB), startCash(sC), allInCondition(0), bettingRoundsPlayed(0) { - int i; - lastPlayersTurn = 0; - - myBoard->setHand(this); - - - for(i=0; igetMyActiveStatus() != 0) { - playerArray[i]->setHand(this); - } - playerArray[i]->setMyCardsFlip(0); - } - - - // roundStartCashArray fllen - for(i=0; isetMyRoundStartCash(playerArray[i]->getMyCash()); - } + int i; + lastPlayersTurn = 0; - assignButtons(); + myBoard->setHand(this); + + + for(i=0; igetMyActiveStatus() != 0) { + playerArray[i]->setHand(this); + } + playerArray[i]->setMyCardsFlip(0); + } + + + // roundStartCashArray fllen + for(i=0; isetMyRoundStartCash(playerArray[i]->getMyCash()); + } + + assignButtons(); } @@ -60,42 +60,42 @@ ClientHand::start() void ClientHand::assignButtons() { - int i; - - //Aktive Spieler zählen - int activePlayersCounter = 0; - for (i=0; igetMyActiveStatus() == 1) activePlayersCounter++; - } - - // alle Buttons loeschen - for (i=0; isetMyButton(0); } - - // DealerButton zuweisen - playerArray[dealerPosition]->setMyButton(1); - - // assign Small Blind next to dealer. ATTENTION: in heads up it is big blind - i = dealerPosition; - do { - i = (i+1)%(MAX_NUMBER_OF_PLAYERS); - if(playerArray[i]->getMyActiveStatus()) { - if(activePlayersCounter > 2) playerArray[i]->setMyButton(2); //small blind normal - else playerArray[i]->setMyButton(3); //big blind in heads up - - } - - } while(!(playerArray[i]->getMyActiveStatus())); - - // assign big blind next to small blind. ATTENTION: in heads up it is small blind - do { - i = (i+1)%(MAX_NUMBER_OF_PLAYERS); - if(playerArray[i]->getMyActiveStatus()) { - if(activePlayersCounter > 2) playerArray[i]->setMyButton(3); //big blind normal - else playerArray[i]->setMyButton(2); //small blind in heads up - - } - - } while(!(playerArray[i]->getMyActiveStatus())); + int i; + + //Aktive Spieler zählen + int activePlayersCounter = 0; + for (i=0; igetMyActiveStatus() == 1) activePlayersCounter++; + } + + // alle Buttons loeschen + for (i=0; isetMyButton(0); } + + // DealerButton zuweisen + playerArray[dealerPosition]->setMyButton(1); + + // assign Small Blind next to dealer. ATTENTION: in heads up it is big blind + i = dealerPosition; + do { + i = (i+1)%(MAX_NUMBER_OF_PLAYERS); + if(playerArray[i]->getMyActiveStatus()) { + if(activePlayersCounter > 2) playerArray[i]->setMyButton(2); //small blind normal + else playerArray[i]->setMyButton(3); //big blind in heads up + + } + + } while(!(playerArray[i]->getMyActiveStatus())); + + // assign big blind next to small blind. ATTENTION: in heads up it is small blind + do { + i = (i+1)%(MAX_NUMBER_OF_PLAYERS); + if(playerArray[i]->getMyActiveStatus()) { + if(activePlayersCounter > 2) playerArray[i]->setMyButton(3); //big blind normal + else playerArray[i]->setMyButton(2); //small blind in heads up + + } + + } while(!(playerArray[i]->getMyActiveStatus())); } void diff --git a/src/game.cpp b/src/game.cpp index bce4d2d6..a8ef058e 100755 --- a/src/game.cpp +++ b/src/game.cpp @@ -51,15 +51,18 @@ Game::Game(GuiInterface* gui, boost::shared_ptr factory, PlayerDataList::const_iterator player_i = playerDataList.begin(); PlayerDataList::const_iterator player_end = playerDataList.end(); + bool dealerFound = false; while (player_i != player_end) { if ((*player_i)->GetUniqueId() == startData.startDealerPlayerId) { dealerPosition = (*player_i)->GetNumber(); + dealerFound = true; break; } ++player_i; } + assert(dealerFound); // Board erstellen actualBoard = myFactory->createBoard(); diff --git a/src/game.h b/src/game.h index eee023ff..0274b7ef 100755 --- a/src/game.h +++ b/src/game.h @@ -61,8 +61,6 @@ public: void setStartCash(const int& theValue) { startCash = theValue; } int getStartCash() const { return startCash; } - int getDealerPosition() const { return dealerPosition; } - int getMyGameID() const { return myGameID; } //Zufgriff Laufvariablen diff --git a/src/net/common/clientstate.cpp b/src/net/common/clientstate.cpp index 42bbc4f8..ca02732b 100644 --- a/src/net/common/clientstate.cpp +++ b/src/net/common/clientstate.cpp @@ -527,7 +527,7 @@ ClientStateWaitHand::Process(ClientThread &client) { if (tmpData.gameState == GAME_STATE_PREFLOP_SMALL_BLIND) { - tmpPlayer->setMyButton(BUTTON_SMALL_BLIND); + assert(tmpPlayer->getMyButton() == BUTTON_SMALL_BLIND); tmpPlayer->setMyAction(tmpData.playerAction); tmpPlayer->setMySet(tmpData.cashValue); client.GetGui().refreshSet(); @@ -535,7 +535,7 @@ ClientStateWaitHand::Process(ClientThread &client) } else if (tmpData.gameState == GAME_STATE_PREFLOP_BIG_BLIND) { - tmpPlayer->setMyButton(BUTTON_BIG_BLIND); + assert(tmpPlayer->getMyButton() == BUTTON_BIG_BLIND); tmpPlayer->setMyAction(tmpData.playerAction); tmpPlayer->setMySet(tmpData.cashValue); client.GetGui().refreshSet(); diff --git a/src/net/common/serverrecvstate.cpp b/src/net/common/serverrecvstate.cpp index d1221c2d..d3d0383a 100644 --- a/src/net/common/serverrecvstate.cpp +++ b/src/net/common/serverrecvstate.cpp @@ -291,33 +291,33 @@ ServerRecvStateStartHand::Process(ServerRecvThread &server) // Auto small blind / big blind at the beginning of preflop. for (int i = 0; i < curGame.getActualQuantityPlayers(); i++) { - if(playerArray[i]->getMyButton() == BUTTON_SMALL_BLIND) - { - boost::shared_ptr notifySmallBlind(new NetPacketPlayersActionDone); - NetPacketPlayersActionDone::Data actionDoneData; - actionDoneData.gameState = GAME_STATE_PREFLOP_SMALL_BLIND; - actionDoneData.playerId = playerArray[i]->getMyUniqueID(); - actionDoneData.playerAction = (PlayerAction)playerArray[i]->getMyAction(); - actionDoneData.cashValue = playerArray[i]->getMySet(); - static_cast(notifySmallBlind.get())->SetData(actionDoneData); - server.SendToAllPlayers(notifySmallBlind); - break; - } + if(playerArray[i]->getMyButton() == BUTTON_SMALL_BLIND) + { + boost::shared_ptr notifySmallBlind(new NetPacketPlayersActionDone); + NetPacketPlayersActionDone::Data actionDoneData; + actionDoneData.gameState = GAME_STATE_PREFLOP_SMALL_BLIND; + actionDoneData.playerId = playerArray[i]->getMyUniqueID(); + actionDoneData.playerAction = (PlayerAction)playerArray[i]->getMyAction(); + actionDoneData.cashValue = playerArray[i]->getMySet(); + static_cast(notifySmallBlind.get())->SetData(actionDoneData); + server.SendToAllPlayers(notifySmallBlind); + break; + } } for (int i = 0; i < curGame.getActualQuantityPlayers(); i++) { - if(playerArray[i]->getMyButton() == BUTTON_BIG_BLIND) - { - boost::shared_ptr notifyBigBlind(new NetPacketPlayersActionDone); - NetPacketPlayersActionDone::Data actionDoneData; - actionDoneData.gameState = GAME_STATE_PREFLOP_BIG_BLIND; - actionDoneData.playerId = playerArray[i]->getMyUniqueID(); - actionDoneData.playerAction = (PlayerAction)playerArray[i]->getMyAction(); - actionDoneData.cashValue = playerArray[i]->getMySet(); - static_cast(notifyBigBlind.get())->SetData(actionDoneData); - server.SendToAllPlayers(notifyBigBlind); - break; - } + if(playerArray[i]->getMyButton() == BUTTON_BIG_BLIND) + { + boost::shared_ptr notifyBigBlind(new NetPacketPlayersActionDone); + NetPacketPlayersActionDone::Data actionDoneData; + actionDoneData.gameState = GAME_STATE_PREFLOP_BIG_BLIND; + actionDoneData.playerId = playerArray[i]->getMyUniqueID(); + actionDoneData.playerAction = (PlayerAction)playerArray[i]->getMyAction(); + actionDoneData.cashValue = playerArray[i]->getMySet(); + static_cast(notifyBigBlind.get())->SetData(actionDoneData); + server.SendToAllPlayers(notifyBigBlind); + break; + } } server.SetState(ServerRecvStateStartRound::Instance()); diff --git a/src/net/common/serverrecvthread.cpp b/src/net/common/serverrecvthread.cpp index c22d2423..e8196b48 100644 --- a/src/net/common/serverrecvthread.cpp +++ b/src/net/common/serverrecvthread.cpp @@ -256,7 +256,26 @@ ServerRecvThread::InternalStartGame() StartData startData; int tmpDealerPos = 0; Tools::getRandNumber(0, GetGameData().numberOfPlayers-1, 1, &tmpDealerPos, 0); - startData.startDealerPlayerId = static_cast(tmpDealerPos); + // The Player Id is not continuous. Therefore, the start dealer position + // needs to be converted to a player Id, and cannot be directly generated + // as player Id. + PlayerDataList::const_iterator player_i = playerData.begin(); + PlayerDataList::const_iterator player_end = playerData.end(); + + bool randDealerFound = false; + while (player_i != player_end) + { + if ((*player_i)->GetNumber() == tmpDealerPos) + { + // Get ID of the dealer. + startData.startDealerPlayerId = static_cast((*player_i)->GetUniqueId()); + randDealerFound = true; + break; + } + ++player_i; + } + assert(randDealerFound); + SetStartData(startData); m_game.reset(new Game(&gui, factory, playerData, GetGameData(), GetStartData(), m_curGameId++)); diff --git a/src/session.cpp b/src/session.cpp index 2f019a72..af328f68 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -26,6 +26,8 @@ #include #include +#include + #define NET_CLIENT_TERMINATE_TIMEOUT_MSEC 1000 #define NET_SERVER_TERMINATE_TIMEOUT_MSEC 1000