/** * Copyright (c) 2021 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "../libs.h" #include "../util/flags.h" #include "../util/array.h" #include "card.h" /** How many cards a player can hold in their hand */ #define POKER_PLAYER_HAND 2 /** How many players in a poker game (excludes dealer) */ #define POKER_PLAYER_COUNT 5 //////////////////////////////////////////////////////////////////////////////// // Player States //////////////////////////////////////////////////////////////////////////////// /** State for whether or not a player has folded */ #define POKER_PLAYER_STATE_FOLDED flagDefine(0) /** State for whether or not a player is showing their hand */ #define POKER_PLAYER_STATE_SHOWING flagDefine(1) /** State for whether or not the player is out */ #define POKER_PLAYER_STATE_OUT flagDefine(2) /** Flag that is reset at the start of each round, and set when move occurs. */ #define POKER_PLAYER_STATE_ROUND_MOVE flagDefine(3) /** The index that the player who is the human... is */ #define POKER_PLAYER_HUMAN_INDEX 0x02 //////////////////////////////////////////////////////////////////////////////// // Player Definition //////////////////////////////////////////////////////////////////////////////// /** Poker Player State */ typedef struct { /** Cards in the players' hand */ card_t cards[POKER_PLAYER_HAND]; uint8_t cardCount; /** Current State of player */ uint8_t state; /** Chips in players' posession */ int32_t chips; /** Current bet in current round player has placed */ int32_t currentBet; /** How many times for the current flop that the player has raised */ int32_t timesRaised; } pokerplayer_t; /** * Returns whether or not the player is in the current round. This does not * consider anything about whether they can/have bet or not, simply whether or * not they can even partake in the round. * * @param player * @return true * @return false */ bool pokerPlayerIsInRound(pokerplayer_t *player); /** * Returns the count of players who remain in the current round. This is a sum * of pokerPlayerIsInRound. * * @param players * @return uint8_t */ uint8_t pokerPlayerGetCountInRound(pokerplayer_t *players); /** * Resets a poker player's state (for a new round). * * @param player Player to reset. */ void pokerPlayerReset(pokerplayer_t *player);