Skip to content

Instantly share code, notes, and snippets.

@winny-
Created December 15, 2017 05:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save winny-/aff37e4c75e8d0a40a1edfd19af2692a to your computer and use it in GitHub Desktop.
Save winny-/aff37e4c75e8d0a40a1edfd19af2692a to your computer and use it in GitHub Desktop.
unsigned char score(struct card *cards) {
if (cards[0].value == cards[1].value
&& cards[0].value == cards[2].value
&& cards[0].value == cards[3].value) {
return RANK_FOUR;
}
unsigned char order[] = {0, 1, 2, 3};
unsigned char swapped;
do {
swapped = 0;
unsigned char i;
for (i = 1; i < 4; i++) {
if (cards[order[i-1]].value > cards[order[i]].value) {
unsigned char tmp = order[i];
order[i] = order[i-1];
order[i-1] = tmp;
swapped = 1;
}
}
} while (swapped);
unsigned char flush = 0;
if (cards[0].suit == cards[1].suit
&& cards[0].suit == cards[2].suit
&& cards[0].suit == cards[3].suit) {
flush = 1;
}
unsigned char straight = 0;
if (cards[ordered[0]].value+1 == cards[ordered[1]]
&& cards[ordered[0]].value+2 == cards[ordered[2]]
&& cards[ordered[0]].value+3 == cards[ordered[3]]) {
straight = 1;
}
if (flush && straight) {
return RANK_STRAIGHT_FLUSH;
}
if (!straight) {
/* test for three kind, two pair, one pair */
if (cards[ordered[1]].value == cards[ordered[2]].value
&& (cards[ordered[0]].value == cards[ordered[1]].value
|| cards[ordered[3]].value == cards[ordered[1]].value)) {
return RANK_THREE;
}
if (cards[ordered[0]].value == cards[ordered[1]].value
&& cards[ordered[2]].value == cards[ordered[3]].value) {
return RANK_TWO;
}
if (cards[ordered[0]].value == cards[ordered[1]].value
|| cards[ordered[1]].value == cards[ordered[2]].value
|| cards[ordered[2]].value == cards[ordered[3]].value) {
return RANK_PAIR;
}
} else if (flush) {
return RANK_FLUSH;
} else {
return RANK_STRAIGHT;
}
return RANK_HIGH;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment