More poker tests.
This commit is contained in:
@ -11,6 +11,10 @@ void pokerInit(poker2_t *poker) {
|
||||
pokerResetRound(poker);
|
||||
poker->playerCount = 0;
|
||||
poker->state = 0;
|
||||
poker->playerDealer = 0;
|
||||
poker->playerSmallBlind = 0;
|
||||
poker->playerBigBlind = 0;
|
||||
|
||||
}
|
||||
|
||||
void pokerResetRound(poker2_t *poker) {
|
||||
@ -21,6 +25,38 @@ void pokerResetRound(poker2_t *poker) {
|
||||
pokerPotAdd(poker);
|
||||
}
|
||||
|
||||
void pokerNewDealer(poker2_t *poker) {
|
||||
uint8_t i, j, k;
|
||||
poker2player_t *player;
|
||||
bool foundDealer;
|
||||
bool foundSmall;
|
||||
|
||||
foundDealer = false;
|
||||
foundSmall = false;
|
||||
|
||||
j = poker->playerDealer + 1;
|
||||
for(i = 0; i < poker->playerCount; i++) {
|
||||
k = (j + i) % poker->playerCount;
|
||||
player = poker->players + k;
|
||||
if(player->state & POKER_PLAYER_STATE_OUT) continue;
|
||||
if(!foundDealer) {
|
||||
poker->playerDealer = k;
|
||||
foundDealer = true;
|
||||
} else if(!foundSmall) {
|
||||
poker->playerSmallBlind = k;
|
||||
foundSmall = true;
|
||||
} else {
|
||||
poker->playerBigBlind = k;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void pokerTakeBlinds(poker2_t *poker, int32_t small, int32_t big) {
|
||||
pokerPlayerBet(poker, poker->playerSmallBlind, small);
|
||||
pokerPlayerBet(poker, poker->playerBigBlind, big);
|
||||
}
|
||||
|
||||
// Pot functions
|
||||
uint8_t pokerPotAdd(poker2_t *poker) {
|
||||
poker2pot_t *pot;
|
||||
@ -55,15 +91,16 @@ void pokerBurn(poker2_t *poker, uint8_t count) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Player Functions
|
||||
uint8_t pokerPlayerAdd(poker2_t *poker) {
|
||||
poker2player_t *player;
|
||||
uint8_t i = poker->playerCount++;
|
||||
|
||||
player = poker->players + i;
|
||||
player->cardCount = 0;
|
||||
player->chips = 0;
|
||||
player->state = 0x00;
|
||||
player->state = POKER_PLAYER_STATE_OUT;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
@ -77,22 +114,25 @@ void pokerPlayerDeal(poker2_t *poker, poker2player_t *player, uint8_t count) {
|
||||
void pokerPlayerChipsAdd(poker2player_t *player, int32_t chips) {
|
||||
player->chips += chips;
|
||||
if(player->chips > 0) {
|
||||
flagOff(player->state, POKER_PLAYER_STATE_OUT);
|
||||
player->state = flagOff(player->state, POKER_PLAYER_STATE_OUT);
|
||||
}
|
||||
}
|
||||
|
||||
void pokerPlayerDealAll(poker2_t *poker, uint8_t count) {
|
||||
uint8_t i;
|
||||
uint8_t i, j;
|
||||
poker2player_t *player;
|
||||
for(i = 0; i < poker->playerCount; i++) {
|
||||
player = poker->players + i;
|
||||
|
||||
// Can't deal to a player who is folded or out
|
||||
if(player->state & (POKER_PLAYER_STATE_FOLDED|POKER_PLAYER_STATE_OUT)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
pokerPlayerDeal(poker, player, count);
|
||||
for(j = 0; j < count; j++) {
|
||||
for(i = 0; i < poker->playerCount; i++) {
|
||||
player = poker->players + i;
|
||||
|
||||
// Can't deal to a player who is folded or out
|
||||
if(player->state & (POKER_PLAYER_STATE_FOLDED|POKER_PLAYER_STATE_OUT)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
pokerPlayerDeal(poker, player, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,6 +144,7 @@ void pokerPlayerBetPot(
|
||||
player = poker->players + playerIndex;
|
||||
player->chips -= chips;
|
||||
pot->chips += chips;
|
||||
player->state |= POKER_PLAYER_STATE_HAS_BET_THIS_ROUND;
|
||||
pokerPotAddPlayer(pot, playerIndex);
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
#define POKER_PLAYER_HAND_SIZE_MAX 2
|
||||
#define POKER_PLAYER_STATE_FOLDED flagDefine(0)
|
||||
#define POKER_PLAYER_STATE_OUT flagDefine(1)
|
||||
#define POKER_PLAYER_STATE_HAS_BET_THIS_ROUND flagDefine(2)
|
||||
|
||||
#define POKER_GRAVE_SIZE_MAX CARD_DECK_SIZE
|
||||
|
||||
@ -50,6 +51,11 @@ typedef struct {
|
||||
poker2player_t players[POKER_PLAYER_COUNT_MAX];
|
||||
uint8_t playerCount;
|
||||
|
||||
uint8_t playerDealer;
|
||||
uint8_t playerSmallBlind;
|
||||
uint8_t playerBigBlind;
|
||||
|
||||
|
||||
uint8_t state;
|
||||
} poker2_t;
|
||||
|
||||
@ -61,10 +67,15 @@ typedef struct {
|
||||
|
||||
void pokerInit(poker2_t *poker);
|
||||
void pokerResetRound(poker2_t *poker);
|
||||
void pokerNewDealer(poker2_t *poker);
|
||||
void pokerTakeBlinds(poker2_t *poker, int32_t small, int32_t big);
|
||||
|
||||
uint8_t pokerPotAdd(poker2_t *poker);
|
||||
void pokerPotAddPlayer(poker2pot_t *pot, uint8_t playerIndex);
|
||||
|
||||
void pokerTurn(poker2_t *poker, uint8_t count);
|
||||
void pokerBurn(poker2_t *poker, uint8_t count);
|
||||
|
||||
uint8_t pokerPlayerAdd(poker2_t *poker);
|
||||
void pokerPlayerDeal(poker2_t *poker, poker2player_t *player, uint8_t count);
|
||||
void pokerPlayerChipsAdd(poker2player_t *player, int32_t chips);
|
||||
|
Reference in New Issue
Block a user