/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see . *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#ifndef LOCALPLAYER_H
#define LOCALPLAYER_H
#include
#include
#include
class ConfigFile;
class HandInterface;
class LocalPlayer : public PlayerInterface
{
public:
LocalPlayer(ConfigFile*, int id, unsigned uniqueId, PlayerType type, std::string name, std::string avatar, int sC, bool aS, bool sotS, int mB);
~LocalPlayer();
void setHand(HandInterface *theValue) {
currentHand = theValue;
}
int getMyID() const {
return myID;
}
unsigned getMyUniqueID() const {
return myUniqueID;
}
void setMyUniqueID(unsigned newId) {
myUniqueID = newId;
}
void setMyGuid(const std::string &theValue) {
myGuid = theValue;
}
std::string getMyGuid() const {
return myGuid;
}
PlayerType getMyType() const {
return myType;
}
void setMyDude(int theValue) {
myDude = theValue;
}
int getMyDude() const {
return myDude;
}
void setMyDude4(int theValue) {
myDude4 = theValue;
}
int getMyDude4() const {
return myDude4;
}
void setMyName(const std::string& theValue) {
myName = theValue;
}
std::string getMyName() const {
return myName;
}
void setMyAvatar(const std::string& theValue) {
myAvatar = theValue;
}
std::string getMyAvatar() const {
return myAvatar;
}
void setMyCash(int theValue) {
myCash = theValue;
}
int getMyCash() const {
return myCash;
}
void setMySet(int theValue) {
myLastRelativeSet = theValue;
mySet += theValue;
myCash -= theValue;
}
void setMySetAbsolute(int theValue) {
mySet = theValue;
}
void setMySetNull() {
mySet = 0;
myLastRelativeSet = 0;
}
int getMySet() const {
return mySet;
}
int getMyLastRelativeSet() const {
return myLastRelativeSet;
}
void setMyAction(PlayerAction theValue, bool human = 0) {
myAction = theValue;
// logging for seat 0
if(myAction && human) currentHand->getGuiInterface()->logPlayerActionMsg(myName, myAction, myLastRelativeSet);
}
PlayerAction getMyAction() const {
return myAction;
}
void setMyButton(int theValue) {
myButton = theValue;
}
int getMyButton() const {
return myButton;
}
void setMyActiveStatus(bool theValue) {
myActiveStatus = theValue;
}
bool getMyActiveStatus() const {
return myActiveStatus;
}
void setMyStayOnTableStatus(bool theValue) {
myStayOnTableStatus = theValue;
}
bool getMyStayOnTableStatus() const {
return myStayOnTableStatus;
}
void setMyHoleCards(int* theValue) {
int i;
for(i=0; i<2; i++) myHoleCards[i] = theValue[i];
}
void getMyHoleCards(int* theValue) const {
int i;
for(i=0; i<2; i++) theValue[i] = myHoleCards[i];
}
void setMyTurn(bool theValue) {
myTurn = theValue;
}
bool getMyTurn() const {
return myTurn;
}
void setMyHoleCardsFlip(bool theValue, int state) {
myHoleCardsFlip = theValue;
// log flipping cards
if(myHoleCardsFlip) {
switch(state) {
case 1:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1], myCardsValueInt);
break;
case 2:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1]);
break;
case 3:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1], myCardsValueInt, "has");
break;
default:
;
}
}
}
bool getMyHoleCardsFlip() const {
return myHoleCardsFlip;
}
void setMyCardsValueInt(int theValue) {
myCardsValueInt = theValue;
}
int getMyCardsValueInt() const {
return myCardsValueInt;
}
void setLogHoleCardsDone(bool theValue) {
logHoleCardsDone = theValue;
}
bool getLogHoleCardsDone() const {
return logHoleCardsDone;
}
void setMyBestHandPosition(int* theValue) {
for (int i = 0; i < 5; i++)
myBestHandPosition[i] = theValue[i];
}
void getMyBestHandPosition(int* theValue) const {
for (int i = 0; i < 5; i++)
theValue[i] = myBestHandPosition[i];
}
void setMyRoundStartCash(int theValue) {
myRoundStartCash = theValue;
}
int getMyRoundStartCash() const {
return myRoundStartCash;
}
void setLastMoneyWon ( int theValue ) {
lastMoneyWon = theValue;
}
int getLastMoneyWon() const {
return lastMoneyWon;
}
void setMyAverageSets(int theValue) {
myAverageSets[0] = myAverageSets[1];
myAverageSets[1] = myAverageSets[2];
myAverageSets[2] = myAverageSets[3];
myAverageSets[3] = theValue;
}
int getMyAverageSets() const {
return (myAverageSets[0]+myAverageSets[1]+myAverageSets[2]+myAverageSets[3])/4;
}
void setMyAggressive(bool theValue) {
int i;
for(i=0; i<6; i++) {
myAggressive[i] = myAggressive[i+1];
}
myAggressive[6] = theValue;
}
int getMyAggressive() const {
int i, sum = 0;
for(i=0; i<7; i++) {
sum += myAggressive[i];
}
return sum;
}
void setSBluff ( int theValue ) {
sBluff = theValue;
}
int getSBluff() const {
return sBluff;
}
void setSBluffStatus ( bool theValue ) {
sBluffStatus = theValue;
}
bool getSBluffStatus() const {
return sBluffStatus;
}
void action();
int checkMyAction(int targetAction, int targetBet, int highestSet, int minimumRaise, int smallBlind);
void preflopEngine();
void flopEngine();
void turnEngine();
void riverEngine();
void preflopEngine3();
void flopEngine3();
void turnEngine3();
void riverEngine3();
int flopCardsValue(int*);
int turnCardsValue(int*);
void calcMyOdds();
void evaluation(int, int);
void setIsSessionActive(bool active);
bool isSessionActive() const;
void setIsKicked(bool kicked);
bool isKicked() const;
void setIsMuted(bool muted);
bool isMuted() const;
bool checkIfINeedToShowCards();
void markRemoteAction();
unsigned getTimeSecSinceLastRemoteAction() const;
private:
ConfigFile *myConfig;
HandInterface *currentHand;
// Konstanten
int myID;
unsigned myUniqueID;
std::string myGuid;
PlayerType myType;
std::string myName;
std::string myAvatar;
int myDude;
int myDude4;
// Laufvariablen
int myCardsValueInt;
int myBestHandPosition[5];
double myOdds;
int myNiveau[3];
bool logHoleCardsDone;
int myHoleCards[2];
int myCash;
int mySet;
int myLastRelativeSet;
PlayerAction myAction;
int myButton; // 0 = none, 1 = dealer, 2 =small, 3 = big
bool myActiveStatus; // 0 = inactive, 1 = active
bool myStayOnTableStatus; // 0 = left, 1 = stay
bool myTurn; // 0 = no, 1 = yes
bool myHoleCardsFlip; // 0 = cards are not fliped, 1 = cards are already flipped,
int myRoundStartCash;
int lastMoneyWon;
int myAverageSets[4];
bool myAggressive[7];
int sBluff;
bool sBluffStatus;
unsigned m_actionTimeoutCounter;
bool m_isSessionActive;
bool m_isKicked;
bool m_isMuted;
boost::timers::portable::microsec_timer m_lastRemoteActionTimer;
};
#endif