Writing winner logic.
This commit is contained in:
@ -561,39 +561,45 @@ card_t debug_pokerWinnerCompare(poker2playerwinning_t *left, poker2playerwinning
|
||||
return highCardLeft;//Greater or Equal to.
|
||||
}
|
||||
|
||||
void pokerWinnerDetermine(poker2_t *poker) {
|
||||
uint8_t i, j, number, highNumber;
|
||||
void pokerWinnerDetermineForPot(
|
||||
poker2_t *poker,
|
||||
poker2pot_t *pot,
|
||||
poker2playerwinning_t winners[POKER_PLAYER_COUNT_MAX],
|
||||
uint8_t winnerPlayers[POKER_PLAYER_COUNT_MAX],
|
||||
uint8_t *winnerCount,
|
||||
uint8_t participants[POKER_PLAYER_COUNT_MAX],
|
||||
uint8_t *participantCount
|
||||
) {
|
||||
uint8_t i, j, countPlayers, countWinners, number, highNumber;
|
||||
poker2playerwinning_t *left, *right;
|
||||
poker2player_t *player;
|
||||
card_t card, highCard;
|
||||
bool isWinner;
|
||||
|
||||
poker->winnerCount = 0;
|
||||
countPlayers = 0;
|
||||
countWinners = 0;
|
||||
highCard = 0xFF;
|
||||
|
||||
// Get winning sets
|
||||
for(i = 0; i < poker->playerCount; i++) {
|
||||
left = poker->winners + i;
|
||||
left->type = POKER_WINNING_TYPE_NULL;
|
||||
player = poker->players + i;
|
||||
if(!pokerPlayerIsInRound(player)) continue;
|
||||
|
||||
// Get the players' winning state.
|
||||
pokerWinnerGetForPlayer(poker, player, left);
|
||||
// Get participating players and their hands.
|
||||
for(i = 0; i < pot->playerCount; i++) {
|
||||
player = poker->players + pot->players[i];
|
||||
if(player->state & (POKER_PLAYER_STATE_FOLDED|POKER_PLAYER_STATE_OUT)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
participants[countPlayers] = pot->players[i];
|
||||
pokerWinnerGetForPlayer(poker, player, winners + countPlayers++);
|
||||
}
|
||||
|
||||
// Compare against each player
|
||||
for(i = 0; i < poker->playerCount; i++) {
|
||||
left = poker->winners + i;
|
||||
if(left->type == POKER_WINNING_TYPE_NULL) continue;
|
||||
|
||||
// Compare participating players
|
||||
for(i = 0; i < countPlayers; i++) {
|
||||
left = winners + i;
|
||||
isWinner = true;
|
||||
highNumber = 0xFF;
|
||||
|
||||
for(j = 0; j < poker->playerCount; j++) {
|
||||
for(j = 0; j < countPlayers; j++) {
|
||||
if(i == j) continue;
|
||||
right = poker->winners + j;
|
||||
if(right->type == POKER_WINNING_TYPE_NULL) continue;
|
||||
right = winners + j;
|
||||
|
||||
// Am I the better hand / Is it the better hand?
|
||||
if(left->type < right->type) continue;
|
||||
@ -603,7 +609,7 @@ void pokerWinnerDetermine(poker2_t *poker) {
|
||||
}
|
||||
|
||||
// Equal, compare hands.
|
||||
card = pokerWinnerCompare(left, right);
|
||||
card = debug_pokerWinnerCompare(left, right);
|
||||
if(card == 0xFF) {
|
||||
isWinner = false;
|
||||
break;
|
||||
@ -619,5 +625,9 @@ void pokerWinnerDetermine(poker2_t *poker) {
|
||||
|
||||
if(!isWinner) continue;
|
||||
left->kicker = highCard;
|
||||
winnerPlayers[countWinners++] = participants[i];
|
||||
}
|
||||
|
||||
*participantCount = countPlayers;
|
||||
*winnerCount = countWinners;
|
||||
}
|
||||
|
@ -117,9 +117,6 @@ typedef struct {
|
||||
uint8_t playerDealer;
|
||||
uint8_t playerSmallBlind;
|
||||
uint8_t playerBigBlind;
|
||||
|
||||
poker2playerwinning_t winners[POKER_PLAYER_COUNT_MAX];
|
||||
uint8_t winnerCount;
|
||||
} poker2_t;
|
||||
|
||||
|
||||
@ -162,4 +159,13 @@ void debug_WinnerFillRemaining(poker2playerwinning_t *winning);
|
||||
void pokerWinnerGetForPlayer(
|
||||
poker2_t *poker, poker2player_t *player, poker2playerwinning_t *winning
|
||||
);
|
||||
card_t debug_pokerWinnerCompare(poker2playerwinning_t *left, poker2playerwinning_t *right);
|
||||
card_t debug_pokerWinnerCompare(poker2playerwinning_t *left, poker2playerwinning_t *right);
|
||||
void pokerWinnerDetermineForPot(
|
||||
poker2_t *poker,
|
||||
poker2pot_t *pot,
|
||||
poker2playerwinning_t winners[POKER_PLAYER_COUNT_MAX],
|
||||
uint8_t winnerPlayers[POKER_PLAYER_COUNT_MAX],
|
||||
uint8_t *winnerCount,
|
||||
uint8_t participants[POKER_PLAYER_COUNT_MAX],
|
||||
uint8_t *participantCount
|
||||
);
|
Reference in New Issue
Block a user