/** * Copyright (c) 2021 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "turn.h" pokerturn_t pokerTurnGet(poker_t *poker, uint8_t playerIndex) { pokerturn_t turn; pokerplayer_t *player; player = poker->players + playerIndex; // Can the player do anything? turn.type = POKER_TURN_TYPE_OUT; if(player->state & POKER_PLAYER_STATE_FOLDED) return turn; if(player->state & POKER_PLAYER_STATE_OUT) return turn; if(pokerTurnCanPlayerCheck(poker, playerIndex)) { turn.type = POKER_TURN_TYPE_CHECK; return turn; } // I have nfi turn.type = POKER_TURN_TYPE_BET; turn.chips = poker->bet.currentBet - player->currentBet; turn.confidence = 1; return turn; } void pokerTurnAction(poker_t *poker, pokerplayer_t *player, pokerturn_t *turn) { switch(turn->type) { case POKER_TURN_TYPE_BET: case POKER_TURN_TYPE_CALL: case POKER_TURN_TYPE_ALL_IN: pokerBetPlayer(poker, player, turn->chips); break; case POKER_TURN_TYPE_CHECK: break; case POKER_TURN_TYPE_FOLD: player->state |= POKER_PLAYER_STATE_FOLDED; break; } player->state |= POKER_PLAYER_STATE_ROUND_MOVE; } pokerturn_t pokerTurnFold(poker_t *poker, uint8_t player) { pokerturn_t turn; turn.type = POKER_TURN_TYPE_FOLD; return turn; } void pokerTurnCheck(poker_t *poker, uint8_t player) { pokerturn_t turn; turn.type = POKER_TURN_TYPE_CHECK; turn.chips = 0; return turn; } void pokerTurnCall(poker_t *poker, uint8_t playerIndex) { pokerturn_t turn; pokerplayer_t *player; bool canCheck; player = poker->players + playerIndex; turn.type = POKER_TURN_TYPE_CHECK; turn.chips = poker->bet.currentBet - player->chips; return turn; } bool pokerTurnCanPlayerCheck(poker_t *poker, uint8_t playerIndex) { return (poker->players + playerIndex)->currentBet >= poker->bet.currentBet; }