Writing more poker logic.
This commit is contained in:
@@ -8,21 +8,33 @@
|
||||
#include "poker.h"
|
||||
|
||||
void pokerInit(poker2_t *poker) {
|
||||
pokerResetRound(poker);
|
||||
poker->playerCount = 0;
|
||||
poker->state = 0;
|
||||
poker->playerDealer = 0;
|
||||
poker->playerSmallBlind = 0;
|
||||
poker->playerBigBlind = 0;
|
||||
|
||||
pokerResetRound(poker);
|
||||
}
|
||||
|
||||
void pokerResetRound(poker2_t *poker) {
|
||||
uint8_t i;
|
||||
poker2player_t *player;
|
||||
|
||||
poker->deckSize = cardWriteDeck(poker->deck);
|
||||
poker->graveSize = 0;
|
||||
poker->communitySize = 0;
|
||||
poker->potCount = 0;
|
||||
pokerPotAdd(poker);
|
||||
|
||||
for(i = 0; i < poker->playerCount; i++) {
|
||||
player = poker->players + i;
|
||||
player->cardCount = 0;
|
||||
player->currentBet = 0;
|
||||
player->state &= ~(
|
||||
POKER_PLAYER_STATE_FOLDED |
|
||||
POKER_PLAYER_STATE_HAS_BET_THIS_ROUND
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void pokerNewDealer(poker2_t *poker) {
|
||||
@@ -57,6 +69,16 @@ void pokerTakeBlinds(poker2_t *poker, int32_t small, int32_t big) {
|
||||
pokerPlayerBet(poker, poker->playerBigBlind, big);
|
||||
}
|
||||
|
||||
int32_t pokerGetCallValue(poker2_t *poker) {
|
||||
uint8_t i;
|
||||
int32_t call;
|
||||
call = 0;
|
||||
for(i = 0; i < poker->playerCount; i++) {
|
||||
call = mathMax(call, poker->players[i].currentBet);
|
||||
}
|
||||
return call;
|
||||
}
|
||||
|
||||
// Pot functions
|
||||
uint8_t pokerPotAdd(poker2_t *poker) {
|
||||
poker2pot_t *pot;
|
||||
@@ -99,6 +121,7 @@ uint8_t pokerPlayerAdd(poker2_t *poker) {
|
||||
player = poker->players + i;
|
||||
player->cardCount = 0;
|
||||
player->chips = 0;
|
||||
player->currentBet = 0;
|
||||
player->state = POKER_PLAYER_STATE_OUT;
|
||||
|
||||
return i;
|
||||
@@ -136,6 +159,15 @@ void pokerPlayerDealAll(poker2_t *poker, uint8_t count) {
|
||||
}
|
||||
}
|
||||
|
||||
bool pokerPlayerDoesNeedToBetThisRound(poker2_t *poker, uint8_t playerIndex) {
|
||||
poker2player_t *player;
|
||||
player = poker->players + playerIndex;
|
||||
if(player->state & POKER_PLAYER_STATE_FOLDED) return false;
|
||||
if(!(player->state & POKER_PLAYER_STATE_HAS_BET_THIS_ROUND)) return true;
|
||||
if(player->currentBet < pokerGetCallValue(poker)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Betting
|
||||
void pokerPlayerBetPot(
|
||||
poker2_t *poker, poker2pot_t *pot, uint8_t playerIndex, int32_t chips
|
||||
@@ -143,6 +175,7 @@ void pokerPlayerBetPot(
|
||||
poker2player_t *player;
|
||||
player = poker->players + playerIndex;
|
||||
player->chips -= chips;
|
||||
player->currentBet += chips;
|
||||
pot->chips += chips;
|
||||
player->state |= POKER_PLAYER_STATE_HAS_BET_THIS_ROUND;
|
||||
pokerPotAddPlayer(pot, playerIndex);
|
||||
|
Reference in New Issue
Block a user