60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "player.h"
|
|
|
|
uint8_t pokerPlayerAdd(poker_t *poker) {
|
|
pokerplayer_t *player;
|
|
uint8_t i = poker->playerCount++;
|
|
|
|
player = poker->players + i;
|
|
player->cardCount = 0;
|
|
player->chips = 0;
|
|
player->currentBet = 0;
|
|
player->timesRaised = 0;
|
|
player->state = POKER_PLAYER_STATE_OUT;
|
|
|
|
return i;
|
|
}
|
|
|
|
void pokerPlayerChipsAdd(pokerplayer_t *player, int32_t chips) {
|
|
player->chips += chips;
|
|
if(player->chips > 0) {
|
|
player->state = flagOff(player->state, POKER_PLAYER_STATE_OUT);
|
|
}
|
|
}
|
|
|
|
bool pokerPlayerDoesNeedToBetThisRound(poker_t *poker, uint8_t playerIndex) {
|
|
pokerplayer_t *player;
|
|
player = poker->players + playerIndex;
|
|
if(player->state & POKER_PLAYER_STATE_FOLDED) return false;
|
|
if(player->chips <= 0) return false;
|
|
if(!(player->state & POKER_PLAYER_STATE_HAS_BET_THIS_ROUND)) return true;
|
|
if(player->currentBet < pokerBetGetCurrentCallValue(poker)) return true;
|
|
return false;
|
|
}
|
|
|
|
bool pokerPlayerCanCheck(poker_t *poker, pokerplayer_t *player) {
|
|
return pokerBetGetCurrentCallValue(poker) <= player->currentBet;
|
|
}
|
|
|
|
void pokerPlayerGetFullHand(
|
|
poker_t *poker, pokerplayer_t *player, card_t *cards
|
|
) {
|
|
uint8_t i;
|
|
|
|
// Add the dealer hand
|
|
for(i = 0; i < poker->communitySize; i++) {
|
|
cards[i] = poker->community[i];
|
|
}
|
|
|
|
// Add the player hand
|
|
for(i = 0; i < player->cardCount; i++) {
|
|
cards[i+poker->communitySize] = player->cards[i];
|
|
}
|
|
}
|