Last commit before another big refactor
This commit is contained in:
@ -239,6 +239,38 @@ void pokerPlayerGetWinning(
|
||||
return;
|
||||
}
|
||||
|
||||
void pokerPlayerWinningFillRemaining(pokerwinning_t *winning) {
|
||||
uint8_t i, highest, current;
|
||||
card_t highestCard, currentCard;
|
||||
|
||||
// Set the kicker
|
||||
winning->kicker = 0xFF;
|
||||
|
||||
// Fill the remaining cards
|
||||
while(winning->setSize < POKER_WINNING_SET_SIZE) {
|
||||
highest = 0xFF;
|
||||
|
||||
for(i = 0; i < winning->fullSize; i++) {
|
||||
currentCard = winning->full[i];
|
||||
if(cardContains(winning->set, winning->setSize, currentCard) != -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(highest == 0xFF) {
|
||||
highestCard = currentCard;
|
||||
highest = cardGetNumber(highestCard);
|
||||
} else {
|
||||
current = cardGetNumber(currentCard);
|
||||
if(current != CARD_ACE && current < highest) continue;
|
||||
highestCard = currentCard;
|
||||
highest = current;
|
||||
}
|
||||
}
|
||||
|
||||
winning->set[winning->setSize++] = highestCard;
|
||||
}
|
||||
cardHandSort(winning->set, winning->setSize);
|
||||
}
|
||||
|
||||
card_t pokerPlayerCompareWinning(pokerwinning_t *left, pokerwinning_t *right) {
|
||||
uint8_t i, number;
|
||||
@ -281,35 +313,63 @@ card_t pokerPlayerCompareWinning(pokerwinning_t *left, pokerwinning_t *right) {
|
||||
return highCardLeft;//Greater or Equal to.
|
||||
}
|
||||
|
||||
void pokerPlayerWinningFillRemaining(pokerwinning_t *winning) {
|
||||
uint8_t i, highest, current;
|
||||
card_t highestCard, currentCard;
|
||||
void pokerPlayerWinnerDetermine(poker_t *poker) {
|
||||
uint8_t i, j, number, highNumber;
|
||||
pokerwinning_t *left, *right;
|
||||
pokerplayer_t *player;
|
||||
card_t card, highCard;
|
||||
bool winner;
|
||||
|
||||
// Set the kicker
|
||||
winning->kicker = 0xFF;
|
||||
poker->winnerCount = 0;
|
||||
|
||||
// Fill the remaining cards
|
||||
while(winning->setSize < POKER_WINNING_SET_SIZE) {
|
||||
highest = 0xFF;
|
||||
// Get winning sets
|
||||
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
|
||||
left = poker->winnings + i;
|
||||
left->type = POKER_WINNING_TYPE_NULL;
|
||||
player = poker->players + i;
|
||||
if(!pokerPlayerIsAlive(player)) continue;
|
||||
|
||||
for(i = 0; i < winning->fullSize; i++) {
|
||||
currentCard = winning->full[i];
|
||||
if(cardContains(winning->set, winning->setSize, currentCard) != -1) {
|
||||
continue;
|
||||
// Get the players' full hand.
|
||||
pokerPlayerGetWinning(poker, player, left);
|
||||
}
|
||||
|
||||
// Compare against each player
|
||||
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
|
||||
left = poker->winnings + i;
|
||||
if(left->type == POKER_WINNING_TYPE_NULL) continue;
|
||||
|
||||
winner = true;
|
||||
highNumber = 0xFF;
|
||||
|
||||
for(j = 0; j < POKER_PLAYER_COUNT; j++) {
|
||||
if(i == j) continue;
|
||||
right = poker->winnings + j;
|
||||
if(right->type == POKER_WINNING_TYPE_NULL) continue;
|
||||
|
||||
// Am I the better hand / Is it the better hand?
|
||||
if(left->type < right->type) continue;
|
||||
if(left->type > right->type) {
|
||||
winner = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if(highest == 0xFF) {
|
||||
highestCard = currentCard;
|
||||
highest = cardGetNumber(highestCard);
|
||||
} else {
|
||||
current = cardGetNumber(currentCard);
|
||||
if(current != CARD_ACE && current < highest) continue;
|
||||
highestCard = currentCard;
|
||||
highest = current;
|
||||
// Equal, compare hands.
|
||||
card = pokerPlayerCompareWinning(left, right);
|
||||
if(card == 0xFF) {
|
||||
winner = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// Determine high card.
|
||||
number = cardGetNumber(card);
|
||||
if(highNumber == 0xFF || number == CARD_ACE || number > highNumber) {
|
||||
highCard = card;
|
||||
highNumber = number;
|
||||
}
|
||||
}
|
||||
|
||||
winning->set[winning->setSize++] = highestCard;
|
||||
if(!winner) continue;
|
||||
left->kicker = highCard;
|
||||
poker->winners[poker->winnerCount++] = i;
|
||||
}
|
||||
cardHandSort(winning->set, winning->setSize);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user