Fixed running more than the first hand in network games.

This commit is contained in:
lotodore
2007-05-27 13:24:52 +00:00
parent 5325897122
commit 1232017e3a
3 changed files with 80 additions and 78 deletions
@@ -48,19 +48,11 @@ ClientBoard::setHand(HandInterface* br)
void void
ClientBoard::collectSets() ClientBoard::collectSets()
{ {
sets = 0;
int i;
for(i=0; i<MAX_NUMBER_OF_PLAYERS; i++) sets += playerArray[i]->getMySet();
} }
void void
ClientBoard::collectPot() ClientBoard::collectPot()
{ {
int i;
pot += sets;
sets = 0;
for(i=0; i<MAX_NUMBER_OF_PLAYERS; i++){ playerArray[i]->setMySetNull(); }
} }
+16 -6
View File
@@ -620,10 +620,8 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptr<NetP
int action = curGame->getPlayerArray()[i]->getMyAction(); int action = curGame->getPlayerArray()[i]->getMyAction();
if (action != 1 && action != 6) if (action != 1 && action != 6)
curGame->getPlayerArray()[i]->setMyAction(0); curGame->getPlayerArray()[i]->setMyAction(0);
curGame->getPlayerArray()[i]->setMySetNull();
} }
// Move sets to pot
curGame->getCurrentHand()->getBoard()->collectSets();
curGame->getCurrentHand()->getBoard()->collectPot();
client.GetGui().refreshPot(); client.GetGui().refreshPot();
client.GetGui().refreshSet(); client.GetGui().refreshSet();
@@ -691,6 +689,12 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptr<NetP
// TODO use moneyWon // TODO use moneyWon
client.GetGui().postRiverRunAnimation1(); client.GetGui().postRiverRunAnimation1();
// Reset player actions
for (int i = 0; i < MAX_NUMBER_OF_PLAYERS; i++)
{
curGame->getPlayerArray()[i]->setMyAction(0);
curGame->getPlayerArray()[i]->setMySetNull();
}
// Wait for next Hand. // Wait for next Hand.
client.SetState(ClientStateWaitHand::Instance()); client.SetState(ClientStateWaitHand::Instance());
retVal = MSG_NET_GAME_SERVER_HAND_END; retVal = MSG_NET_GAME_SERVER_HAND_END;
@@ -712,9 +716,9 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptr<NetP
PlayerInterface *tmpPlayer = curGame->getPlayerByUniqueId((*i).playerId); PlayerInterface *tmpPlayer = curGame->getPlayerByUniqueId((*i).playerId);
assert(tmpPlayer); // TODO: throw exception assert(tmpPlayer); // TODO: throw exception
int tmpCards[2]; int tmpCards[2];
tmpCards[0] = static_cast<int>((*i).cards[0]); tmpCards[0] = static_cast<int>((*i).cards[0]);
tmpCards[1] = static_cast<int>((*i).cards[1]); tmpCards[1] = static_cast<int>((*i).cards[1]);
tmpPlayer->setMyCards(tmpCards); tmpPlayer->setMyCards(tmpCards);
for (int num = 0; num < 5; num++) for (int num = 0; num < 5; num++)
tmpPlayer->getMyBestHandPosition()[num] = (*i).bestHandPos[num]; tmpPlayer->getMyBestHandPosition()[num] = (*i).bestHandPos[num];
@@ -728,6 +732,12 @@ ClientStateRunHand::InternalProcess(ClientThread &client, boost::shared_ptr<NetP
client.GetGame()->getCurrentHand()->getRiver()->setHighestCardsValue(highestValueOfCards); client.GetGame()->getCurrentHand()->getRiver()->setHighestCardsValue(highestValueOfCards);
client.GetGui().postRiverRunAnimation1(); client.GetGui().postRiverRunAnimation1();
// Reset player sets
for (int i = 0; i < MAX_NUMBER_OF_PLAYERS; i++)
{
curGame->getPlayerArray()[i]->setMyAction(0);
curGame->getPlayerArray()[i]->setMySetNull();
}
// Wait for next Hand. // Wait for next Hand.
client.SetState(ClientStateWaitHand::Instance()); client.SetState(ClientStateWaitHand::Instance());
retVal = MSG_NET_GAME_SERVER_HAND_END; retVal = MSG_NET_GAME_SERVER_HAND_END;
+64 -64
View File
@@ -33,7 +33,7 @@
using namespace std; using namespace std;
#define SERVER_WAIT_TIMEOUT_MSEC 50 #define SERVER_WAIT_TIMEOUT_MSEC 50
#define SERVER_NEXT_HAND_DELAY_SEC 5 #define SERVER_NEXT_HAND_DELAY_SEC 10
ServerRecvState::~ServerRecvState() ServerRecvState::~ServerRecvState()
@@ -459,24 +459,24 @@ ServerRecvStateStartRound::Process(ServerRecvThread &server)
curGame.getCurrentHand()->getRiver()->postRiverRun(); curGame.getCurrentHand()->getRiver()->postRiverRun();
// Count active players. If only one player is left, no cards are shown. // Count active players. If only one player is left, no cards are shown.
int activePlayersCounter = 0; int activePlayersCounter = 0;
std::list<PlayerInterface *> activePlayers; std::list<PlayerInterface *> activePlayers;
for (int i = 0; i < curGame.getActualQuantityPlayers() ; i++) for (int i = 0; i < curGame.getActualQuantityPlayers() ; i++)
{ {
if (curGame.getPlayerArray()[i]->getMyActiveStatus() if (curGame.getPlayerArray()[i]->getMyActiveStatus()
&& curGame.getPlayerArray()[i]->getMyAction() != PLAYER_ACTION_FOLD) && curGame.getPlayerArray()[i]->getMyAction() != PLAYER_ACTION_FOLD)
{ {
activePlayersCounter++; activePlayersCounter++;
activePlayers.push_back(curGame.getPlayerArray()[i]); activePlayers.push_back(curGame.getPlayerArray()[i]);
} }
} }
assert(activePlayersCounter); assert(activePlayersCounter);
assert(!activePlayers.empty()); assert(!activePlayers.empty());
if (activePlayersCounter == 1) if (activePlayersCounter == 1)
{ {
// End of Hand, but keep cards hidden. // End of Hand, but keep cards hidden.
PlayerInterface *player = activePlayers.front(); PlayerInterface *player = activePlayers.front();
boost::shared_ptr<NetPacket> endHand(new NetPacketEndOfHandHideCards); boost::shared_ptr<NetPacket> endHand(new NetPacketEndOfHandHideCards);
NetPacketEndOfHandHideCards::Data endHandData; NetPacketEndOfHandHideCards::Data endHandData;
endHandData.playerId = player->getMyUniqueID(); endHandData.playerId = player->getMyUniqueID();
@@ -484,58 +484,58 @@ ServerRecvStateStartRound::Process(ServerRecvThread &server)
endHandData.playerMoney = player->getMyCash(); endHandData.playerMoney = player->getMyCash();
static_cast<NetPacketEndOfHandHideCards *>(endHand.get())->SetData(endHandData); static_cast<NetPacketEndOfHandHideCards *>(endHand.get())->SetData(endHandData);
server.SendToAllPlayers(endHand); server.SendToAllPlayers(endHand);
} }
else else
{ {
// End of Hand - show cards of active players. // End of Hand - show cards of active players.
boost::shared_ptr<NetPacket> endHand(new NetPacketEndOfHandShowCards); boost::shared_ptr<NetPacket> endHand(new NetPacketEndOfHandShowCards);
NetPacketEndOfHandShowCards::Data endHandData; NetPacketEndOfHandShowCards::Data endHandData;
std::list<PlayerInterface *>::iterator i = activePlayers.begin(); std::list<PlayerInterface *>::iterator i = activePlayers.begin();
std::list<PlayerInterface *>::iterator end = activePlayers.end(); std::list<PlayerInterface *>::iterator end = activePlayers.end();
while (i != end) while (i != end)
{ {
NetPacketEndOfHandShowCards::PlayerResult tmpPlayerResult; NetPacketEndOfHandShowCards::PlayerResult tmpPlayerResult;
tmpPlayerResult.playerId = (*i)->getMyUniqueID(); tmpPlayerResult.playerId = (*i)->getMyUniqueID();
int tmpCards[2]; int tmpCards[2];
(*i)->getMyCards(tmpCards); (*i)->getMyCards(tmpCards);
tmpPlayerResult.cards[0] = static_cast<u_int16_t>(tmpCards[0]); tmpPlayerResult.cards[0] = static_cast<u_int16_t>(tmpCards[0]);
tmpPlayerResult.cards[1] = static_cast<u_int16_t>(tmpCards[1]); tmpPlayerResult.cards[1] = static_cast<u_int16_t>(tmpCards[1]);
for (int num = 0; num < 5; num++) for (int num = 0; num < 5; num++)
tmpPlayerResult.bestHandPos[num] = (*i)->getMyBestHandPosition()[num]; tmpPlayerResult.bestHandPos[num] = (*i)->getMyBestHandPosition()[num];
tmpPlayerResult.valueOfCards = (*i)->getMyCardsValueInt(); tmpPlayerResult.valueOfCards = (*i)->getMyCardsValueInt();
tmpPlayerResult.moneyWon = 0; // TODO tmpPlayerResult.moneyWon = 0; // TODO
tmpPlayerResult.playerMoney = (*i)->getMyCash(); tmpPlayerResult.playerMoney = (*i)->getMyCash();
endHandData.playerResults.push_back(tmpPlayerResult); endHandData.playerResults.push_back(tmpPlayerResult);
++i; ++i;
} }
static_cast<NetPacketEndOfHandShowCards *>(endHand.get())->SetData(endHandData); static_cast<NetPacketEndOfHandShowCards *>(endHand.get())->SetData(endHandData);
server.SendToAllPlayers(endHand); server.SendToAllPlayers(endHand);
} }
// Start next hand - if enough players are left. // Start next hand - if enough players are left.
int playersPositiveCashCounter = 0; int playersPositiveCashCounter = 0;
for (int i = 0; i < curGame.getStartQuantityPlayers(); i++) for (int i = 0; i < curGame.getStartQuantityPlayers(); i++)
{ {
if (curGame.getCurrentHand()->getPlayerArray()[i]->getMyCash() > 0) if (curGame.getCurrentHand()->getPlayerArray()[i]->getMyCash() > 0)
playersPositiveCashCounter++; playersPositiveCashCounter++;
} }
if (playersPositiveCashCounter == 1) if (playersPositiveCashCounter == 1)
server.SetState(ServerRecvStateFinal::Instance()); // TODO server.SetState(ServerRecvStateFinal::Instance()); // TODO
else else
{ {
boost::microsec_timer delayTimer; boost::microsec_timer delayTimer;
delayTimer.start(); delayTimer.start();
ServerRecvStateNextHand::Instance().SetTimer(delayTimer); ServerRecvStateNextHand::Instance().SetTimer(delayTimer);
server.SetState(ServerRecvStateNextHand::Instance()); server.SetState(ServerRecvStateNextHand::Instance());
retVal = MSG_NET_GAME_SERVER_HAND_END; retVal = MSG_NET_GAME_SERVER_HAND_END;
} }
} }
return retVal; return retVal;
} }