/****************************************************************************** Copyright 2007 Richard Woolcock. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************/ #ifndef HEADER_GAME #define HEADER_GAME /****************************************************************************** Headers ******************************************************************************/ #include "card.h" #include "hand.h" /****************************************************************************** Enumerated types ******************************************************************************/ typedef enum { eGameNone = -1, /* Add any new games below this line */ eGameDrawPoker, eGameTexasHoldem, eGameBlackjack, /* Add any new games above this line */ eGameMax } game_t; typedef enum /* Possible scoring systems */ { eScorePoker, eScoreBlackjack } score_t; /****************************************************************************** Global functions ******************************************************************************/ /* Call this once at mud startup, to validate the game data order */ boolean_t GameValidate( void ); /* Return the name of the game */ const char *GameName( game_t aGame ); /* Return the index of the game */ game_t GameIndex( const char *apGame ); /* Return the scoring system of the game */ score_t GameScoring( game_t aGame ); /* Does each player have their own bet, separate from the other players? */ boolean_t GameSoloBet( game_t aGame ); /* Is a minimum bet required before dealing? */ boolean_t GameMinimumBet( game_t aGame ); /* Advice a move for the game */ char *GameAdvice( game_t aGame, hand_t *apHand ); /* Return the maximum number of players permitted */ int GameMaxPlayers( game_t aGame ); /* Return how many cards should be initially drawn */ int GameInitialDraw( game_t aGame ); /* Return how many cards make up a full hand */ int GameFullHand( game_t aGame ); /* Return how many turns are in the game */ int GameLastTurn( game_t aGame ); /* Some games burn cards on certain turns */ int GameBurnCards( game_t aGame, int aTurn ); /* Some games deal shared cards ('flops') on certain turns */ int GameSharedDraw( game_t aGame, int aTurn ); /* Does this game allow you to view your hand? */ int GameViewHand( game_t aGame, int aTurn ); /* Does this game allow you to place bets? */ int GameCanBet( game_t aGame, int aTurn ); /* Does this game allow you to fold? */ int GameCanFold( game_t aGame, int aTurn ); /* Does this game allow you to discard cards? */ int GameCanDiscard( game_t aGame, int aTurn ); /* Does this game allow you to draw cards? */ int GameCanDraw( game_t aGame, int aTurn ); /* Does this game allow you to stick? */ int GameCanStick( game_t aGame, int aTurn ); /* Does this game allow you to double down (double bet then draw)? */ int GameCanDouble( game_t aGame, int aTurn ); #endif /* HEADER_GAME */