Tools - random number function is now static. Fixed player number issue with network games (GUI player number needs to be 0), this still requires some work.

This commit is contained in:
lotodore
2007-05-21 19:00:06 +00:00
parent 3ede810baa
commit 2ce67297ee
17 changed files with 129 additions and 100 deletions
+2 -2
View File
@@ -111,12 +111,12 @@ Server Notification: Game Start
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message Type = 5 | Message Length = 8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Start Dealer Pos | Reserved |
| Start Dealer Player Id | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[ Dealer Pos can be different for each game, therefore it is not
transmitted in Join Game ACK. ]
[ It is not necessary to transmit the Dealer Pos, because the server
[ It is not necessary to transmit the Dealer Id, because the server
decides which player's turn it is. This is only for fast and simple
GUI display. ]
+2 -3
View File
@@ -49,9 +49,8 @@ LocalHand::LocalHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, BoardI
}
// Karten generieren und Board sowie Player zuweisen
Tools myTool;
int *cardsArray = new int[2*actualQuantityPlayers+5];
myTool.getRandNumber(0, 51, 2*actualQuantityPlayers+5, cardsArray, 1);
Tools::getRandNumber(0, 51, 2*actualQuantityPlayers+5, cardsArray, 1);
int tempBoardArray[5];
int tempPlayerArray[2];
int tempPlayerAndBoardArray[7];
@@ -81,7 +80,7 @@ LocalHand::LocalHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, BoardI
// sBluff für alle aktiver Spieler außer human player setzen
if(i) {
myTool.getRandNumber(1,100,1,&sBluff,0);
Tools::getRandNumber(1,100,1,&sBluff,0);
playerArray[i]->setSBluff(sBluff);
playerArray[i]->setSBluffStatus(0);
}
+33 -44
View File
@@ -54,9 +54,8 @@ LocalPlayer::LocalPlayer(ConfigFile *c, BoardInterface *b, int id, unsigned uniq
myAggressive[i] = 0;
}
Tools myTool;
// Dude zuweisen
myTool.getRandNumber(3 , 5, 1, &myDude, 0);
Tools::getRandNumber(3 , 5, 1, &myDude, 0);
// cout << "Spieler: " << myID << " Dude: " << myDude << " Cash: " << myCash << " ActiveStatus: " << myActiveStatus << " Button: " << myButton << endl;
// Dude4 zuweisen
@@ -64,7 +63,7 @@ LocalPlayer::LocalPlayer(ConfigFile *c, BoardInterface *b, int id, unsigned uniq
int count = 4;
int *tempArray = new int[count];
myTool.getRandNumber(0, 2*interval, count, tempArray, 0);
Tools::getRandNumber(0, 2*interval, count, tempArray, 0);
for(i=0; i<count; i++) {
myDude4 += tempArray[i];
}
@@ -146,7 +145,6 @@ void LocalPlayer::preflopEngine() {
int bet = 0;
int raise = 0;
int cBluff;
Tools myTool;
// temporär solange preflopValue und flopValue noch nicht bereinigt für sechs und sieben spieler
int players = actualHand->getActualQuantityPlayers();
@@ -194,7 +192,7 @@ void LocalPlayer::preflopEngine() {
// cout << "Spieler " << myID << ": Dude " << myDude4 << "\t Wert " << myHoleCardsValue << "\t Niveau " << myNiveau[0] << " " << myNiveau[1] << " " << myNiveau[2] << "\t Agg " << aggValue << " " << endl;
// Check-Bluff generieren
myTool.getRandNumber(1,100,1,&cBluff,0);
Tools::getRandNumber(1,100,1,&cBluff,0);
// aktive oder passivie Situation ? -> im preflop nur passiv
@@ -338,7 +336,6 @@ void LocalPlayer::flopEngine() {
int i;
int cBluff;
int pBluff;
Tools myTool;
int rand;
// übergang solange preflopValue und flopValue noch nicht bereinigt
@@ -369,7 +366,7 @@ void LocalPlayer::flopEngine() {
}
// Check-Bluff generieren
myTool.getRandNumber(1,100,1,&cBluff,0);
Tools::getRandNumber(1,100,1,&cBluff,0);
// aktiv oder passiv?
if(actualHand->getFlop()->getHighestSet() > 0) {
@@ -475,7 +472,7 @@ void LocalPlayer::flopEngine() {
// Position
if(myButton == 1) {
// Position-Bluff generieren
myTool.getRandNumber(1,100,1,&pBluff,0);
Tools::getRandNumber(1,100,1,&pBluff,0);
if(pBluff <= 16) {
bet = (pBluff/4)*2*actualHand->getSmallBlind();
// bet zu klein
@@ -513,7 +510,7 @@ void LocalPlayer::flopEngine() {
// Standard-Raise-Routine
else {
// raise-Betrag ermitteln
myTool.getRandNumber(1,8,1,&rand,0);
Tools::getRandNumber(1,8,1,&rand,0);
raise = rand*actualHand->getSmallBlind();
// raise-Betrag zu klein -> mindestens Standard-raise
if(raise < actualHand->getFlop()->getHighestSet()) {
@@ -537,7 +534,7 @@ void LocalPlayer::flopEngine() {
// cout << "sBLUFF!" << endl;
myTool.getRandNumber(1,8,1,&rand,0);
Tools::getRandNumber(1,8,1,&rand,0);
bet = rand*actualHand->getSmallBlind();
// bet zu klein
if(bet == 0) {
@@ -576,7 +573,6 @@ void LocalPlayer::flopEngine() {
//
// int i;
//
// Tools myTools;
//
// for(i=0; i<2; i++) tempArray[i] = myCards[i];
// actualBoard->getMyCards(boardCards);
@@ -601,7 +597,7 @@ void LocalPlayer::flopEngine() {
// case 6: {}
// case 5: {}
// case 4: {
// myTools.getRandNumber(0,100,1,&cBluff,0);
// Tools::getRandNumber(0,100,1,&cBluff,0);
// if(cBluff < 35) {
// myAction = 2;
// }
@@ -623,7 +619,7 @@ void LocalPlayer::flopEngine() {
// case 3: {
// switch(info[3]) {
// case 2: {
// myTools.getRandNumber(0,100,1,&cBluff,0);
// Tools::getRandNumber(0,100,1,&cBluff,0);
// if(cBluff < 35) {
// myAction = 2;
// }
@@ -643,7 +639,7 @@ void LocalPlayer::flopEngine() {
// }
// break;
// case 1: {
// myTools.getRandNumber(0,100,1,&cBluff,0);
// Tools::getRandNumber(0,100,1,&cBluff,0);
// if(cBluff < 40) {
// myAction = 2;
// }
@@ -663,7 +659,7 @@ void LocalPlayer::flopEngine() {
// }
// break;
// default: {
// myTools.getRandNumber(0,100,1,&sBluff,0);
// Tools::getRandNumber(0,100,1,&sBluff,0);
// if(info[1] >= 10 && sBluff <= 40) {
// bet = (sBluff/10)*2*actualHand->getSmallBlind();
// if(bet < 2*actualHand->getSmallBlind()) bet = 2*actualHand->getSmallBlind();
@@ -679,7 +675,7 @@ void LocalPlayer::flopEngine() {
// case 2: {
// switch(info[3]) {
// case 2: {
// myTools.getRandNumber(0,100,1,&cBluff,0);
// Tools::getRandNumber(0,100,1,&cBluff,0);
// if(cBluff > 80) {
// myAction = 2;
// }
@@ -695,7 +691,7 @@ void LocalPlayer::flopEngine() {
// }
// break;
// default: {
// myTools.getRandNumber(0,100,1,&cBluff,0);
// Tools::getRandNumber(0,100,1,&cBluff,0);
// if(cBluff > 90) {
// myAction = 2;
// }
@@ -714,7 +710,7 @@ void LocalPlayer::flopEngine() {
// break;
// case 1: {
// if(!info[2]) {
// myTools.getRandNumber(0,100,1,&sBluff,0);
// Tools::getRandNumber(0,100,1,&sBluff,0);
// switch(info[3]) {
// case 2: {}
// case 1: {
@@ -833,7 +829,6 @@ void LocalPlayer::turnEngine() {
int i;
int cBluff;
int pBluff;
Tools myTool;
int rand;
readFile();
@@ -863,7 +858,7 @@ void LocalPlayer::turnEngine() {
if(individualHighestSet > myCash) individualHighestSet = myCash;
// Check-Bluff generieren
myTool.getRandNumber(1,100,1,&cBluff,0);
Tools::getRandNumber(1,100,1,&cBluff,0);
// aktiv oder passiv?
if(actualHand->getTurn()->getHighestSet() > 0) {
@@ -967,7 +962,7 @@ void LocalPlayer::turnEngine() {
// Position
if(myButton == 1) {
// Position-Bluff generieren
myTool.getRandNumber(1,100,1,&pBluff,0);
Tools::getRandNumber(1,100,1,&pBluff,0);
if(pBluff <= 16) {
bet = (pBluff/4)*2*actualHand->getSmallBlind();
// bet zu klein
@@ -1004,7 +999,7 @@ void LocalPlayer::turnEngine() {
// Standard-Raise-Routine
else {
// raise-Betrag ermitteln
myTool.getRandNumber(1,8,1,&rand,0);
Tools::getRandNumber(1,8,1,&rand,0);
raise = rand*actualHand->getSmallBlind();
// raise-Betrag zu klein -> mindestens Standard-raise
if(raise < actualHand->getTurn()->getHighestSet()) {
@@ -1028,7 +1023,7 @@ void LocalPlayer::turnEngine() {
// cout << "sBLUFF!" << endl;
myTool.getRandNumber(1,8,1,&rand,0);
Tools::getRandNumber(1,8,1,&rand,0);
bet = rand*actualHand->getSmallBlind();
// bet zu klein
if(bet == 0) {
@@ -1077,7 +1072,6 @@ void LocalPlayer::riverEngine() {
int raise = 0;
int bet = 0;
int i;
Tools myTool;
int rand;
int pBluff;
@@ -1195,7 +1189,7 @@ void LocalPlayer::riverEngine() {
// Position
if(myButton == 1) {
// Position-Bluff generieren
myTool.getRandNumber(1,100,1,&pBluff,0);
Tools::getRandNumber(1,100,1,&pBluff,0);
if(pBluff <= 20) {
bet = (pBluff/4)*2*actualHand->getSmallBlind();
// bet zu klein
@@ -1232,7 +1226,7 @@ void LocalPlayer::riverEngine() {
// Standard-Raise-Routine
else {
// raise-Betrag ermitteln
myTool.getRandNumber(1,8,1,&rand,0);
Tools::getRandNumber(1,8,1,&rand,0);
raise = rand*actualHand->getSmallBlind();
// raise-Betrag zu klein -> mindestens Standard-raise
if(raise < actualHand->getRiver()->getHighestSet()) {
@@ -1256,7 +1250,7 @@ void LocalPlayer::riverEngine() {
// cout << "sBLUFF!" << endl;
myTool.getRandNumber(1,8,1,&rand,0);
Tools::getRandNumber(1,8,1,&rand,0);
bet = rand*actualHand->getSmallBlind();
// bet zu klein
if(bet == 0) {
@@ -2546,16 +2540,15 @@ void LocalPlayer::preflopEngine3() {
// cout << "nextID " << actualHand->getPlayerArray()[(myID+1)%5]->getMyID() << endl;
Tools myTool;
int raise = 0;
// Bauchgefhl (zufᅵlig)
int tempRand;
myTool.getRandNumber(1,10,1,&tempRand,0);
Tools::getRandNumber(1,10,1,&tempRand,0);
// bluff, checkbluff
int bluff;
myTool.getRandNumber(1,100,1,&bluff,0);
Tools::getRandNumber(1,100,1,&bluff,0);
// cout << "preflop-bluff " << bluff << endl;
@@ -2567,7 +2560,7 @@ void LocalPlayer::preflopEngine3() {
// temp fr das Vielfache des Small Blind, sodass HighestSet zu hoch ist
int tempFold;
// tempFold = (actualHand->getPlayerArray()[0]->getMyAverageSets())/(8*actualHand->getSmallBlind());
myTool.getRandNumber(2,3,1,&tempFold,0);
Tools::getRandNumber(2,3,1,&tempFold,0);
// FOLD --> wenn Potential negativ oder HighestSet zu hoch
if( (potential*setToHighest<0 || (setToHighest > tempFold * actualHand->getSmallBlind() && potential<1) || (setToHighest > 2 * tempFold * actualHand->getSmallBlind() && potential<2) || (setToHighest > 4 * tempFold * actualHand->getSmallBlind() && potential<3) || (setToHighest > 10 * tempFold * actualHand->getSmallBlind() && potential<4)) && myCardsValue->holeCardsClass(myCards[0], myCards[1]) < 9 && bluff > 15) {
@@ -2780,17 +2773,15 @@ void LocalPlayer::flopEngine3() {
double percent = (countMy*1.0)/(countAll*1.0);
// cout << "Prozent: " << percent << endl;
Tools myTool;
int raise = 0;
// Bauchgefhl (zufᅵlig)
int tempRand;
myTool.getRandNumber((int)(percent*10.)-2,(int)(percent*10.)+2,1,&tempRand,0);
Tools::getRandNumber((int)(percent*10.)-2,(int)(percent*10.)+2,1,&tempRand,0);
// bluff, checkbluff
int bluff;
myTool.getRandNumber(1,100,1,&bluff,0);
Tools::getRandNumber(1,100,1,&bluff,0);
// cout << "flop-bluff " << bluff << endl;
@@ -2802,7 +2793,7 @@ void LocalPlayer::flopEngine3() {
// temp fr das Vielfache des Small Blind, sodass HighestSet zu hoch ist
int tempFold;
// tempFold = (actualHand->getPlayerArray()[0]->getMyAverageSets())/(8*actualHand->getSmallBlind());
myTool.getRandNumber(2,3,1,&tempFold,0);
Tools::getRandNumber(2,3,1,&tempFold,0);
// FOLD --> wenn potential negativ oder HighestSet zu hoch
if(( potential*setToHighest<0 || (setToHighest > tempFold * actualHand->getSmallBlind() && potential<1) || (setToHighest > 3 * tempFold * actualHand->getSmallBlind() && potential<2) || (setToHighest > 9 * tempFold * actualHand->getSmallBlind() && potential<3) || (setToHighest > 20*tempFold * actualHand->getSmallBlind() && potential<4) || (setToHighest > 40 *tempFold * actualHand->getSmallBlind() && potential<5)) && percent < 0.90 && bluff > 18) {
@@ -2948,16 +2939,15 @@ void LocalPlayer::turnEngine3() {
double percent = (countMy*1.0)/(countAll*1.0);
// cout << "Prozent: " << percent << endl;
Tools myTool;
int raise;
// Bauchgefhl (zufᅵlig)
int tempRand;
myTool.getRandNumber((int)(percent*10.)-2,(int)(percent*10.)+2,1,&tempRand,0);
Tools::getRandNumber((int)(percent*10.)-2,(int)(percent*10.)+2,1,&tempRand,0);
// bluff, checkbluff
int bluff;
myTool.getRandNumber(1,100,1,&bluff,0);
Tools::getRandNumber(1,100,1,&bluff,0);
// cout << "turn-bluff " << bluff << endl;
@@ -2969,7 +2959,7 @@ void LocalPlayer::turnEngine3() {
// temp fr das Vielfache des Small Blind, sodass HighestSet zu hoch ist
int tempFold;
// tempFold = (actualHand->getPlayerArray()[0]->getMyAverageSets())/(7*actualHand->getSmallBlind());
myTool.getRandNumber(3,4,1,&tempFold,0);
Tools::getRandNumber(3,4,1,&tempFold,0);
// FOLD
// --> wenn potential negativ oder HighestSet zu hoch
@@ -3111,16 +3101,15 @@ void LocalPlayer::riverEngine3() {
double percent = (countMy*1.0)/(countAll*1.0);
// cout << "Prozent: " << percent << endl;
Tools myTool;
int raise;
// Bauchgefhl (zufᅵlig)
int tempRand;
myTool.getRandNumber((int)(percent*10.)-2,(int)(percent*10.)+2,1,&tempRand,0);
Tools::getRandNumber((int)(percent*10.)-2,(int)(percent*10.)+2,1,&tempRand,0);
// bluff, checkbluff
int bluff;
myTool.getRandNumber(1,100,1,&bluff,0);
Tools::getRandNumber(1,100,1,&bluff,0);
// cout << "river-bluff " << bluff << endl;
@@ -3132,7 +3121,7 @@ void LocalPlayer::riverEngine3() {
// temp fr das Vielfache des Small Blind, sodass HighestSet zu hoch ist
int tempFold;
tempFold = (actualHand->getPlayerArray()[0]->getMyAverageSets())/(6*actualHand->getSmallBlind());
// myTool.getRandNumber(4,6,1,&tempFold,0);
// Tools::getRandNumber(4,6,1,&tempFold,0);
// FOLD
// --> wenn potential negativ oder HighestSet zu hoch
-10
View File
@@ -22,16 +22,6 @@
using namespace std;
Tools::Tools()
{
}
Tools::~Tools()
{
}
void Tools::getRandNumber(int start, int end, int howMany, int* randArray, bool different) {
int r = end-start+1;
+1 -5
View File
@@ -26,11 +26,7 @@
class Tools{
public:
Tools();
~Tools();
void getRandNumber(int, int, int, int*, bool);
static void getRandNumber(int, int, int, int*, bool);
};
+17 -4
View File
@@ -35,8 +35,8 @@ Game::Game(GuiInterface* gui, boost::shared_ptr<EngineFactory> factory,
startQuantityPlayers(gameData.numberOfPlayers),
startCash(gameData.startCash), startSmallBlind(gameData.smallBlind),
startHandsBeforeRaiseSmallBlind(gameData.handsBeforeRaise),
myGameID(gameId), guiPlayerNum(gameData.guiPlayerNum), actualQuantityPlayers(gameData.numberOfPlayers),
actualSmallBlind(gameData.smallBlind), actualHandID(0), dealerPosition(startData.startDealerPos)
myGameID(gameId), actualQuantityPlayers(gameData.numberOfPlayers),
actualSmallBlind(gameData.smallBlind), actualHandID(0), dealerPosition(0)
{
// cout << "Create Game Object" << "\n";
int i;
@@ -47,14 +47,27 @@ Game::Game(GuiInterface* gui, boost::shared_ptr<EngineFactory> factory,
playerArray[i] = 0;
}
// Dealer Position bestimmen
PlayerDataList::const_iterator player_i = playerDataList.begin();
PlayerDataList::const_iterator player_end = playerDataList.end();
while (player_i != player_end)
{
if ((*player_i)->GetUniqueId() == startData.startDealerPlayerId)
{
dealerPosition = (*player_i)->GetNumber();
break;
}
++player_i;
}
// Board erstellen
actualBoard = myFactory->createBoard();
// Player erstellen
PlayerDataList::const_iterator player_i = playerDataList.begin();
PlayerDataList::const_iterator player_end = playerDataList.end();
player_i = playerDataList.begin();
player_end = playerDataList.end();
for(i=0; i<MAX_NUMBER_OF_PLAYERS; i++) {
string myName;
+1 -2
View File
@@ -64,8 +64,7 @@ public:
int getDealerPosition() const { return dealerPosition; }
int getMyGameID() const { return myGameID; }
int getGuiPlayerNum() const { return guiPlayerNum; }
//Zufgriff Laufvariablen
void setActualQuantityPlayers(const int& theValue) { actualQuantityPlayers = theValue; }
int getActualQuantityPlayers() const { return actualQuantityPlayers; }
+3 -5
View File
@@ -26,20 +26,18 @@
struct GameData
{
GameData() : numberOfPlayers(0), startCash(0), smallBlind(0),
handsBeforeRaise(1), guiSpeed(4), guiPlayerNum(0), guiPlayerUniqueId(0) {}
handsBeforeRaise(1), guiSpeed(4) {}
int numberOfPlayers;
int startCash;
int smallBlind;
int handsBeforeRaise;
int guiSpeed;
int guiPlayerNum;
unsigned guiPlayerUniqueId;
};
struct StartData
{
StartData() : startDealerPos(0) {}
int startDealerPos;
StartData() : startDealerPlayerId(0) {}
unsigned startDealerPlayerId;
};
#endif
+4 -3
View File
@@ -657,8 +657,9 @@ void mainWindowImpl::startNewLocalGame(newGameDialogImpl *v) {
}
// Set dealer pos.
StartData startData;
Tools myTool;
myTool.getRandNumber(0, gameData.numberOfPlayers-1, 1, &startData.startDealerPos, 0);
int tmpDealerPos = 0;
Tools::getRandNumber(0, gameData.numberOfPlayers-1, 1, &tmpDealerPos, 0);
startData.startDealerPlayerId = static_cast<unsigned>(tmpDealerPos);
//Start Game!!!
mySession->startLocalGame(gameData, startData);
@@ -1188,7 +1189,7 @@ void mainWindowImpl::dealHoleCards() {
currentGame->getPlayerArray()[i]->getMyCards(tempCardsIntArray);
for(j=0; j<2; j++) {
if(currentGame->getPlayerArray()[i]->getMyActiveStatus()) {
if ((i == currentGame->getGuiPlayerNum()) || debugMode) {
if ((i == 0) || debugMode) {
tempCardsPixmapArray[j].load(":/cards/resources/graphics/cards/"+QString::number(tempCardsIntArray[j], 10)+".png");
holeCardsArray[i][j]->setPixmap(tempCardsPixmapArray[j],FALSE);
+4 -1
View File
@@ -73,6 +73,8 @@ protected:
void SetGameData(const GameData &gameData);
const StartData &GetStartData() const;
void SetStartData(const StartData &startData);
int GetGuiPlayerNum() const;
void SetGuiPlayerNum(int guiPlayerNum);
boost::shared_ptr<Game> GetGame();
@@ -80,7 +82,7 @@ protected:
void AddPlayerData(boost::shared_ptr<PlayerData> playerData);
void RemovePlayerData(unsigned playerId);
const PlayerDataList &GetPlayerDataList() const;
PlayerDataList GetMappedPlayerDataList() const;
private:
@@ -99,6 +101,7 @@ private:
boost::shared_ptr<Game> m_game;
unsigned m_curGameId;
int m_guiPlayerNum;
friend class ClientStateInit;
friend class ClientStateStartResolve;
+5 -2
View File
@@ -391,10 +391,11 @@ ClientStateWaitSession::Process(ClientThread &client)
NetPacketJoinGameAck::Data joinGameAckData;
tmpPacket->ToNetPacketJoinGameAck()->GetData(joinGameAckData);
client.SetGameData(joinGameAckData.gameData);
client.SetGuiPlayerNum(joinGameAckData.yourPlayerNum);
// TODO: Type Human is fixed here.
boost::shared_ptr<PlayerData> playerData(
new PlayerData(joinGameAckData.gameData.guiPlayerUniqueId, joinGameAckData.gameData.guiPlayerNum, PLAYER_TYPE_HUMAN));
new PlayerData(joinGameAckData.yourPlayerUniqueId, joinGameAckData.yourPlayerNum, PLAYER_TYPE_HUMAN));
playerData->SetName(context.GetPlayerName());
client.AddPlayerData(playerData);
@@ -512,7 +513,9 @@ ClientStateWaitHand::Process(ClientThread &client)
int myCards[2];
myCards[0] = (int)tmpData.yourCards[0];
myCards[1] = (int)tmpData.yourCards[1];
client.GetGame()->getPlayerArray()[client.GetGame()->getGuiPlayerNum()]->setMyCards(myCards);
client.GetGame()->getPlayerArray()[0]->setMyCards(myCards);
client.GetGame()->initHand();
client.GetGame()->startHand();
client.GetGui().dealHoleCards();
}
}
+39 -8
View File
@@ -53,7 +53,7 @@ private:
ClientThread::ClientThread(GuiInterface &gui)
: m_curState(NULL), m_gui(gui), m_curGameId(0)
: m_curState(NULL), m_gui(gui), m_curGameId(0), m_guiPlayerNum(0)
{
m_context.reset(new ClientContext);
m_senderCallback.reset(new ClientSenderCallback(*this));
@@ -118,7 +118,7 @@ ClientThread::Main()
// EngineFactory erstellen
boost::shared_ptr<EngineFactory> factory(new ClientEngineFactory); // LocalEngine erstellen
m_game.reset(new Game(&m_gui, factory, GetPlayerDataList(), GetGameData(), GetStartData(), m_curGameId++));
m_game.reset(new Game(&m_gui, factory, GetMappedPlayerDataList(), GetGameData(), GetStartData(), m_curGameId++));
GetCallback().SignalNetClientGameStart(m_game);
}
}
@@ -196,6 +196,18 @@ ClientThread::SetStartData(const StartData &startData)
m_startData = startData;
}
int
ClientThread::GetGuiPlayerNum() const
{
return m_guiPlayerNum;
}
void
ClientThread::SetGuiPlayerNum(int guiPlayerNum)
{
m_guiPlayerNum = guiPlayerNum;
}
boost::shared_ptr<Game>
ClientThread::GetGame()
{
@@ -215,9 +227,6 @@ ClientThread::AddPlayerData(boost::shared_ptr<PlayerData> playerData)
if (playerData.get() && !playerData->GetName().empty())
{
m_playerDataList.push_back(playerData);
// Sort the list by player number.
m_playerDataList.sort(*boost::lambda::_1 < *boost::lambda::_2);
GetCallback().SignalNetClientPlayerJoined(playerData->GetName());
}
}
@@ -244,9 +253,31 @@ ClientThread::RemovePlayerData(unsigned playerId)
GetCallback().SignalNetClientPlayerLeft(playerName);
}
const PlayerDataList &
ClientThread::GetPlayerDataList() const
PlayerDataList
ClientThread::GetMappedPlayerDataList() const
{
return m_playerDataList;
PlayerDataList mappedList;
PlayerDataList::const_iterator i = m_playerDataList.begin();
PlayerDataList::const_iterator end = m_playerDataList.end();
// Create a copy of the player list so that the GUI player
// is player 0. This is mapped because the GUI depends on it.
while (i != end)
{
boost::shared_ptr<PlayerData> tmpData(new PlayerData(*(*i)));
int numberDiff = tmpData->GetNumber() - GetGuiPlayerNum();
if (numberDiff >= 0)
tmpData->SetNumber(numberDiff);
else
tmpData->SetNumber(GetGameData().numberOfPlayers + numberDiff);
mappedList.push_back(tmpData);
++i;
}
// Sort the list by player number.
mappedList.sort(*boost::lambda::_1 < *boost::lambda::_2);
return mappedList;
}
+7 -7
View File
@@ -115,7 +115,7 @@ struct NetPacketPlayerLeftData
struct NetPacketGameStartData
{
NetPacketHeader head;
u_int16_t startDealerPos;
u_int16_t startDealerPlayerId;
u_int16_t reserved;
};
@@ -528,13 +528,13 @@ NetPacketJoinGameAck::SetData(const NetPacketJoinGameAck::Data &inData)
assert(tmpData);
tmpData->sessionId = htonl(inData.sessionId);
tmpData->playerId = htons(inData.yourPlayerUniqueId);
tmpData->playerNumber = htons(inData.yourPlayerNum);
tmpData->numberOfPlayers = htons(inData.gameData.numberOfPlayers);
tmpData->smallBlind = htons(inData.gameData.smallBlind);
tmpData->handsBeforeRaise = htons(inData.gameData.handsBeforeRaise);
tmpData->proposedGuiSpeed = htons(inData.gameData.guiSpeed);
tmpData->startCash = htonl(inData.gameData.startCash);
tmpData->playerId = htons(inData.gameData.guiPlayerUniqueId);
tmpData->playerNumber = htons(inData.gameData.guiPlayerNum);
}
void
@@ -544,13 +544,13 @@ NetPacketJoinGameAck::GetData(NetPacketJoinGameAck::Data &outData) const
assert(tmpData);
outData.sessionId = ntohl(tmpData->sessionId);
outData.yourPlayerUniqueId = ntohs(tmpData->playerId);
outData.yourPlayerNum = ntohs(tmpData->playerNumber);
outData.gameData.numberOfPlayers = ntohs(tmpData->numberOfPlayers);
outData.gameData.smallBlind = ntohs(tmpData->smallBlind);
outData.gameData.handsBeforeRaise = ntohs(tmpData->handsBeforeRaise);
outData.gameData.guiSpeed = ntohs(tmpData->proposedGuiSpeed);
outData.gameData.startCash = ntohl(tmpData->startCash);
outData.gameData.guiPlayerUniqueId = ntohs(tmpData->playerId);
outData.gameData.guiPlayerNum = ntohs(tmpData->playerNumber);
}
const NetPacketJoinGameAck *
@@ -761,7 +761,7 @@ NetPacketGameStart::SetData(const NetPacketGameStart::Data &inData)
NetPacketGameStartData *tmpData = (NetPacketGameStartData *)GetRawData();
assert(tmpData);
tmpData->startDealerPos = htons(inData.startData.startDealerPos);
tmpData->startDealerPlayerId = htons(inData.startData.startDealerPlayerId);
}
void
@@ -770,7 +770,7 @@ NetPacketGameStart::GetData(NetPacketGameStart::Data &outData) const
NetPacketGameStartData *tmpData = (NetPacketGameStartData *)GetRawData();
assert(tmpData);
outData.startData.startDealerPos = ntohs(tmpData->startDealerPos);
outData.startData.startDealerPlayerId = ntohs(tmpData->startDealerPlayerId);
}
const NetPacketGameStart *
+5 -4
View File
@@ -154,9 +154,9 @@ ServerRecvStateInit::Process(ServerRecvThread &server)
boost::shared_ptr<NetPacket> answer(new NetPacketJoinGameAck);
NetPacketJoinGameAck::Data joinGameAckData;
joinGameAckData.sessionId = session.sessionData->GetId(); // TODO: currently unused.
joinGameAckData.yourPlayerUniqueId = tmpPlayerData->GetUniqueId();
joinGameAckData.yourPlayerNum = tmpPlayerData->GetNumber();
joinGameAckData.gameData = server.GetGameData();
joinGameAckData.gameData.guiPlayerUniqueId = tmpPlayerData->GetUniqueId();
joinGameAckData.gameData.guiPlayerNum = tmpPlayerData->GetNumber();
static_cast<NetPacketJoinGameAck *>(answer.get())->SetData(joinGameAckData);
server.GetSender().Send(recvSock, answer);
@@ -227,8 +227,9 @@ ServerRecvStateStartGame::Process(ServerRecvThread &server)
{
// Set dealer pos.
StartData startData;
Tools myTool;
myTool.getRandNumber(0, server.GetGameData().numberOfPlayers-1, 1, &startData.startDealerPos, 0);
int tmpDealerPos = 0;
Tools::getRandNumber(0, server.GetGameData().numberOfPlayers-1, 1, &tmpDealerPos, 0);
startData.startDealerPlayerId = static_cast<unsigned>(tmpDealerPos);
server.SetStartData(startData);
}
+2
View File
@@ -120,6 +120,8 @@ public:
struct Data
{
u_int32_t sessionId;
int16_t yourPlayerNum;
u_int16_t yourPlayerUniqueId;
GameData gameData;
};
+2
View File
@@ -35,6 +35,8 @@
typedef unsigned __int16 u_int16_t;
typedef unsigned __int32 u_int32_t;
typedef __int16 int16_t;
typedef __int32 int32_t;
typedef unsigned char u_char;
#else
+2
View File
@@ -58,6 +58,8 @@ public:
{return m_uniqueId;}
int GetNumber() const
{return m_number;}
void SetNumber(int number)
{m_number = number;}
bool operator<(const PlayerData &other)
{return m_number < other.GetNumber();}