void ClientThread::MapPlayerDataList() { // Retrieve the GUI player. boost::shared_ptr<PlayerData> guiPlayer = GetPlayerDataByUniqueId(GetGuiPlayerId()); assert(guiPlayer.get()); m_origGuiPlayerNum = guiPlayer->GetNumber(); // Create a copy of the player list so that the GUI player // is player 0. This is mapped because the GUI depends on it. PlayerDataList mappedList; PlayerDataList::const_iterator i = m_playerDataList.begin(); PlayerDataList::const_iterator end = m_playerDataList.end(); int numPlayers = GetStartData().numberOfPlayers; while (i != end) { boost::shared_ptr<PlayerData> tmpData(new PlayerData(*(*i))); int numberDiff = numPlayers - m_origGuiPlayerNum; tmpData->SetNumber((tmpData->GetNumber() + numberDiff) % numPlayers); mappedList.push_back(tmpData); ++i; } // Sort the list by player number. mappedList.sort(*boost::lambda::_1 < *boost::lambda::_2); m_playerDataList = mappedList; }
void ServerGame::InitRankingMap(const PlayerDataList &playerDataList) { PlayerDataList::const_iterator i = playerDataList.begin(); PlayerDataList::const_iterator end = playerDataList.end(); while (i != end) { boost::shared_ptr<PlayerData> tmpPlayer(*i); RankingData tmpData(tmpPlayer->GetDBId()); m_rankingMap[tmpPlayer->GetUniqueId()] = tmpData; ++i; } }
void Session::startLocalGame(const GameData &gameData, const StartData &startData) { myGameType = GAME_TYPE_LOCAL; currentGame.reset(); currentGameNum++; myGui->initGui(gameData.guiSpeed); PlayerDataList playerDataList; for(int i = 0; i < startData.numberOfPlayers; i++) { //Namen und Avatarpfad abfragen ostringstream myName; if (i==0) { myName << "MyName"; } else { myName << "Opponent" << i << "Name"; } ostringstream myAvatar; if (i==0) { myAvatar << "MyAvatar"; } else { myAvatar << "Opponent" << i << "Avatar"; } //PlayerData erzeugen // UniqueId = PlayerNumber for local games. boost::shared_ptr<PlayerData> playerData(new PlayerData( i, i, i == 0 ? PLAYER_TYPE_HUMAN : PLAYER_TYPE_COMPUTER, PLAYER_RIGHTS_NORMAL, i == 0)); playerData->SetName(myConfig->readConfigString(myName.str())); playerData->SetAvatarFile(myConfig->readConfigString(myAvatar.str())); playerDataList.push_back(playerData); } // EngineFactory erstellen boost::shared_ptr<EngineFactory> factory(new LocalEngineFactory(myConfig)); // LocalEngine erstellen currentGame.reset(new Game(myGui, factory, playerDataList, gameData, startData, currentGameNum, myLog)); //// SPIEL-SCHLEIFE currentGame->initHand(); currentGame->startHand(); // SPIEL-SCHLEIFE }
void ServerGame::AssignPlayerNumbers(PlayerDataList &playerList) { int playerNumber = 0; PlayerDataList::iterator player_i = playerList.begin(); PlayerDataList::iterator player_end = playerList.end(); while (player_i != player_end) { (*player_i)->SetNumber(playerNumber); ++playerNumber; ++player_i; } }
PlayerDataList SessionManager::GetSpectatorDataList() const { PlayerDataList spectatorList; boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex); SessionMap::const_iterator session_i = m_sessionMap.begin(); SessionMap::const_iterator session_end = m_sessionMap.end(); while (session_i != session_end) { // Get all spectators of the game. if (session_i->second->GetState() == SessionData::Spectating || session_i->second->GetState() == SessionData::SpectatorWaiting) { boost::shared_ptr<PlayerData> tmpPlayer(session_i->second->GetPlayerData()); if (!tmpPlayer.get() || tmpPlayer->GetName().empty()) throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0); spectatorList.push_back(tmpPlayer); } ++session_i; } return spectatorList; }
Game::Game(GuiInterface* gui, boost::shared_ptr<EngineFactory> factory, const PlayerDataList &playerDataList, const GameData &gameData, const StartData &startData, int gameId, Log* log) : myFactory(factory), myGui(gui), myLog(log), startQuantityPlayers(startData.numberOfPlayers), startCash(gameData.startMoney), startSmallBlind(gameData.firstSmallBlind), myGameID(gameId), currentSmallBlind(gameData.firstSmallBlind), currentHandID(0), dealerPosition(0), lastHandBlindsRaised(1), lastTimeBlindsRaised(0), myGameData(gameData), blindsTimer(boost::posix_time::time_duration(0, 0, 0), boost::timers::portable::second_timer::manual_start) { blindsList = myGameData.manualBlindsList; dealerPosition = startData.startDealerPlayerId; if(DEBUG_MODE) { startSmallBlind = 10; currentSmallBlind = startSmallBlind; dealerPosition = 4; } int i; // determine dealer position PlayerDataList::const_iterator player_i = playerDataList.begin(); PlayerDataList::const_iterator player_end = playerDataList.end(); while (player_i != player_end) { if ((*player_i)->GetUniqueId() == dealerPosition) break; ++player_i; } if (player_i == player_end) throw LocalException(__FILE__, __LINE__, ERR_DEALER_NOT_FOUND); // create board currentBoard = myFactory->createBoard(dealerPosition); // create player lists seatsList.reset(new std::list<boost::shared_ptr<PlayerInterface> >); activePlayerList.reset(new std::list<boost::shared_ptr<PlayerInterface> >); runningPlayerList.reset(new std::list<boost::shared_ptr<PlayerInterface> >); // create player player_i = playerDataList.begin(); player_end = playerDataList.end(); for(i=0; i<MAX_NUMBER_OF_PLAYERS; i++) { string myName; string myAvatarFile; string myGuid; unsigned uniqueId = 0; PlayerType type = PLAYER_TYPE_COMPUTER; int myStartCash = startCash; bool myStayOnTableStatus = false; if (player_i != player_end) { uniqueId = (*player_i)->GetUniqueId(); type = (*player_i)->GetType(); myName = (*player_i)->GetName(); myAvatarFile = (*player_i)->GetAvatarFile(); myGuid = (*player_i)->GetGuid(); if ((*player_i)->GetStartCash() >= 0) myStartCash = (*player_i)->GetStartCash(); myStayOnTableStatus = type == PLAYER_TYPE_HUMAN; ++player_i; } // create player objects boost::shared_ptr<PlayerInterface> tmpPlayer = myFactory->createPlayer(i, uniqueId, type, myName, myAvatarFile, myStartCash, startQuantityPlayers > i, myStayOnTableStatus, 0); tmpPlayer->setIsSessionActive(true); tmpPlayer->setMyGuid(myGuid); // fill player lists seatsList->push_back(tmpPlayer); if(startQuantityPlayers > i) { activePlayerList->push_back(tmpPlayer); } (*runningPlayerList) = (*activePlayerList); } currentBoard->setPlayerLists(seatsList, activePlayerList, runningPlayerList); // log game data if(myLog) myLog->logNewGameMsg(myGameID, startCash, startSmallBlind, getPlayerByUniqueId(dealerPosition)->getMyID()+1, seatsList); //start timer blindsTimer.reset(); blindsTimer.start(); }