81 lines
1.9 KiB
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;
|
|
} |