// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "PokerTurn.hpp" #include "PokerPlayer.hpp" #include "PokerGame.hpp" using namespace Dawn; struct PokerTurn PokerTurn::bet(PokerPlayer *player, int32_t chips) { struct PokerTurn turn; int32_t i; assertNotNull(player); assertTrue(chips >= 0); turn.player = player; turn.confidence = 1; if(chips == 0) { turn.type = POKER_TURN_TYPE_CHECK; turn.chips = 0; } else if(player->chips <= chips) { turn.chips = player->chips; turn.type = POKER_TURN_TYPE_ALL_IN; } else { turn.chips = chips; turn.type = POKER_TURN_TYPE_BET; i = player->pokerGame->getCurrentCallValue(); if(chips == (i - player->currentBet)) { turn.type = POKER_TURN_TYPE_CALL; } } return turn; } struct PokerTurn PokerTurn::fold(PokerPlayer *player) { struct PokerTurn turn; turn.player = player; turn.chips = 0; turn.confidence = 1; turn.type = POKER_TURN_TYPE_FOLD; return turn; } void PokerTurn::action() { assertNotNull(this->player); switch(this->type) { case POKER_TURN_TYPE_BET: case POKER_TURN_TYPE_CALL: case POKER_TURN_TYPE_ALL_IN: this->player->bet(this->chips); break; case POKER_TURN_TYPE_CHECK: player->bet(0); break; case POKER_TURN_TYPE_FOLD: player->fold(); break; default: assertUnreachable(); break; } }