You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegames/kpoker/player.h

221 lines
5.7 KiB

/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef PLAYER_H
#define PLAYER_H
// QT includes
#include <tqstring.h>
// KDE includes
#include <krandomsequence.h>
#include <kdebug.h>
// own includes
#include "poker.h"
// ================================================================
// Player classes
class PokerPlayer
{
public:
PokerPlayer();
~PokerPlayer();
/**
* Calculates the money which the computer will bet
*
* use @ref changeBet() for human players
* @param bet The minimum bet that the player has to bet. probably the same as the bet the human player has bet before
* @param mayRaise Specifies if the player may raise
* @return The player's bet
**/
int bet(int bet, bool mayRaise = true);
/**
* Same as @ref bet() but should bet a little bit more if the cards are good enough (they were already exchanged)
**/
int raise(int raise);
/**
* This method changes the player's bet by betChange
* @param Specifies the change
* @return true if successful, false if not
**/
bool changeBet(int betChange);
/**
* Only used by computer players
*
* Calculates which cards shall be exchanged
* @param skip[] Will be set true if the card shall be exchanged (if the 1st card shall be exchanged so skip[0] will be true)
**/
void exchangeCards(bool skip[]);
/**
* This method will return all cards to the pile which means that all cards will be set to 0 (=deck)
**/
void giveCardsBack();
/**
* Returns a card to the pile
* @param cardNr specifies the card which will be returned to the pile
**/
void giveCardBack(int cardNr);
/**
* Begins a new round
**/
void newRound();
/**
* Sets the player's cash to newCash
* @param newCash The new cash
**/
void setCash(int newCash) { m_money = newCash; }
/**
* This makes the player human
**/
void setHuman() { m_isHuman = true; }
/**
* Sets a new name
* @param newName The new name of the player
**/
void setName(const TQString &newName) { m_name = newName; }
/**
* Informs the player that he is out (or is not out anymore)
* @param newOut true if player is out or false if player is back to the game
**/
void setOut(bool newOut) { isOut = newOut; }
/**
* Takes a card
* @param nr The number of the card (0 = first card)
* @param value The card itself
**/
void takeCard(int nr, int value) {
#if 0
const char *suitnames[] = {"C_", "D_", "S_", "H_"};
if (value > 0)
kdDebug() << "Got card " << suitnames[(value - 1) % 4]
<< (value - 1) / 4 + 2 << endl;
#endif
m_hand.setCard(nr, (CardValue) value);
}
/**
* Informs the player about new rules
* @param min The minimum possible bet
* @param max The maximum possible bet
**/
void setBetDefaults(int min, int max) { minBet = min; maxBet = max; }
/**
* @param cardNr The number of the card (0 = first card)
* @return The card
**/
CardValue getCard(int cardNr) const { return m_hand.getCard(cardNr);}
PokerHand &getHand() { return m_hand; }
/**
* @return The money of the player
**/
int getCash() const { return m_money; }
/**
* @return How much the player has bet
**/
int getCurrentBet() const { return currentBet; }
/**
* Returns the found card at nr
*
* The found cards specify the best cards the player has, e.g. if the player has one pair both cards will be found here
* @param nr The number of the wanted foundCard
* @return The found card number nr
**/
bool getFoundCard(int nr) const { return m_hand.getFoundCard(nr); }
/**
* @return If the player is human or not
**/
bool getHuman() const { return m_isHuman; }
/**
* @return The name of the player
**/
TQString getName() const { return m_name; }
// FIXME: Rename to hasFolded?
/**
* @return True if the player is out or false if not
**/
bool out() { return isOut; }
/**
* This test the cards of the player; searches for the result
*
* Used by @ref sortedResult() and in one player games
* @return The result (10 = the best, 0 = nothing)
**/
PokerHandType testHand() { return m_hand.analyze(); }
protected:
/**
* This sorts the result generated by @ref testHand() a little bit to be used in games with more than one player
* @return The points of the hand (a royal flush is e.g. 0, a best card is 500 + the best card)
**/
int sortedResult();
private:
// Basic data:
TQString m_name; // The name of the player.
bool m_isHuman; // True if the player is human.
// The hand itself
PokerHand m_hand;
// The financial situation
int m_money;
int currentBet;
// True if we are out of the game (have folded).
bool isOut;
// Properties of the game.
// FIXME: Move this to the game itself.
// FIXME: Add a pointer to the poker game object.
int minBet;
int maxBet;
// Extra stuff
KRandomSequence random;
};
#endif