Started merging new poker code in.
This commit is contained in:
105
backup/poker/bet.c
Normal file
105
backup/poker/bet.c
Normal file
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* Copyright (c) 2021 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "bet.h"
|
||||
|
||||
// Done
|
||||
void pokerBetInit(pokerbet_t *bet) {
|
||||
bet->blindBig = POKER_BET_BLIND_BIG_DEFAULT;
|
||||
bet->blindSmall = POKER_BET_BLIND_SMALL_DEFAULT;
|
||||
}
|
||||
|
||||
// Done
|
||||
void pokerBetReset(pokerbet_t *bet) {
|
||||
bet->pot = 0;
|
||||
bet->currentBet = 0;
|
||||
}
|
||||
|
||||
// Not needed
|
||||
uint8_t pokerBetGetRoundPlayerDefault(uint8_t roundSmallBlind) {
|
||||
return (roundSmallBlind + 1) % POKER_PLAYER_COUNT;
|
||||
}
|
||||
|
||||
// Done
|
||||
void pokerBetPlayer(pokerbet_t *bet, pokerplayer_t *player, int32_t chips) {
|
||||
bet->pot += chips;
|
||||
player->chips -= chips;
|
||||
player->currentBet += chips;
|
||||
bet->currentBet = mathMax(bet->currentBet, player->currentBet);
|
||||
}
|
||||
|
||||
// Doneish
|
||||
void pokerBetResetBetter(
|
||||
pokerbet_t *bet, pokerplayer_t *players, uint8_t roundSmallBlind
|
||||
) {
|
||||
uint8_t i;
|
||||
pokerplayer_t *player;
|
||||
|
||||
// Reset the round betting state.
|
||||
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
|
||||
player = players + i;
|
||||
player->state = flagOff(player->state, POKER_PLAYER_STATE_ROUND_MOVE);
|
||||
}
|
||||
|
||||
// Now reset to the first player that needs to bet.
|
||||
|
||||
// We do this step first to reset the better
|
||||
bet->better = pokerBetGetRoundPlayerDefault(roundSmallBlind);
|
||||
|
||||
// Then we check who's remaining. We do this because the default better may
|
||||
// have folded already.
|
||||
bet->better = pokerBetGetRemainingPlayer(bet, players, roundSmallBlind);
|
||||
}
|
||||
|
||||
// Doneish
|
||||
bool pokerBetPlayerCanBet(pokerbet_t *bet, pokerplayer_t *player) {
|
||||
// Is the player out?
|
||||
if(!pokerPlayerIsInRound(player)) return false;
|
||||
|
||||
// Is the player broke?
|
||||
if(player->chips <= 0) return false;
|
||||
|
||||
// Does the player still need to act yet?
|
||||
if(player->state & POKER_PLAYER_STATE_ROUND_MOVE) {
|
||||
if(player->currentBet >= bet->currentBet) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
uint8_t pokerBetGetRemainingPlayer(
|
||||
pokerbet_t *bet, pokerplayer_t *players, uint8_t roundSmallBlind
|
||||
) {
|
||||
uint8_t def, j, pi;
|
||||
def = bet->better;
|
||||
|
||||
// Now check for any remaining players
|
||||
for(j = 0; j < POKER_PLAYER_COUNT; j++) {
|
||||
pi = ((def + j) % POKER_PLAYER_COUNT);
|
||||
if(!pokerBetPlayerCanBet(bet, players + pi)) continue;
|
||||
return pi;
|
||||
}
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
uint8_t pokerBetGetRemainingPlayerCount(pokerbet_t *bet,pokerplayer_t *players){
|
||||
uint8_t i, c;
|
||||
c = 0;
|
||||
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
|
||||
if(!pokerBetPlayerCanBet(bet, players + i)) continue;
|
||||
c++;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
void pokerBetTakeBlinds(
|
||||
pokerbet_t *bet, pokerplayer_t *players,
|
||||
uint8_t roundSmallBlind, uint8_t roundBigBlind
|
||||
) {
|
||||
pokerBetPlayer(bet, players + roundSmallBlind, bet->blindSmall);
|
||||
pokerBetPlayer(bet, players + roundBigBlind, bet->blindBig);
|
||||
}
|
Reference in New Issue
Block a user