Dawn/src/poker/turn.c

81 lines
1.9 KiB
C

/**
* 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;
}