int GetHandType(int C1, int C2, int C3, int C4, int C5) { int Hand = 0; int R1 = Rank[C1], R2 = Rank[C2], R3 = Rank[C3], R4 = Rank[C4], R5 = Rank[C5]; int S1 = Suit[C1], S2 = Suit[C2], S3 = Suit[C3], S4 = Suit[C4], S5 = Suit[C5]; bool Flush = (S1 == S2) && (S2 == S3) && (S3 == S4) && (S4 == S5); if (R1 > R2) { R1 ^= R2; R2 ^= R1; R1 ^= R2; S1 ^= S2; S2 ^= S1; S1 ^= S2; } if (R1 > R3) { R1 ^= R3; R3 ^= R1; R1 ^= R3; S1 ^= S3; S3 ^= S1; S1 ^= S3; } if (R1 > R4) { R1 ^= R4; R4 ^= R1; R1 ^= R4; S1 ^= S4; S4 ^= S1; S1 ^= S4; } if (R1 > R5) { R1 ^= R5; R5 ^= R1; R1 ^= R5; S1 ^= S5; S5 ^= S1; S1 ^= S5; } if (R2 > R3) { R2 ^= R3; R3 ^= R2; R2 ^= R3; S2 ^= S3; S3 ^= S2; S2 ^= S3; } if (R2 > R4) { R2 ^= R4; R4 ^= R2; R2 ^= R4; S2 ^= S4; S4 ^= S2; S2 ^= S4; } if (R2 > R5) { R2 ^= R5; R5 ^= R2; R2 ^= R5; S2 ^= S5; S5 ^= S2; S2 ^= S5; } if (R3 > R4) { R3 ^= R4; R4 ^= R3; R3 ^= R4; S3 ^= S4; S4 ^= S3; S3 ^= S4; } if (R3 > R5) { R3 ^= R5; R5 ^= R3; R3 ^= R5; S3 ^= S5; S5 ^= S3; S3 ^= S5; } if (R4 > R5) { R4 ^= R5; R5 ^= R4; R4 ^= R5; S4 ^= S5; S5 ^= S4; S4 ^= S5; } if (Flush && (R1 == 8)) { Hand = 10; // Natural Royal Flush } else { if ((R1 == 9) && (S1 > 1)) { R1 = 13; S1 = 4; } if ((R2 == 9) && (S2 > 1)) { R2 = 13; S2 = 4; } if ((R3 == 9) && (S3 > 1)) { R3 = 13; S3 = 4; } if ((R4 == 9) && (S4 > 1)) { R4 = 13; S4 = 4; } if ((R5 == 9) && (S5 > 1)) { R5 = 13; S5 = 4; } if (R1 > R2) { R1 ^= R2; R2 ^= R1; R1 ^= R2; S1 ^= S2; S2 ^= S1; S1 ^= S2; } if (R1 > R3) { R1 ^= R3; R3 ^= R1; R1 ^= R3; S1 ^= S3; S3 ^= S1; S1 ^= S3; } if (R1 > R4) { R1 ^= R4; R4 ^= R1; R1 ^= R4; S1 ^= S4; S4 ^= S1; S1 ^= S4; } if (R1 > R5) { R1 ^= R5; R5 ^= R1; R1 ^= R5; S1 ^= S5; S5 ^= S1; S1 ^= S5; } if (R2 > R3) { R2 ^= R3; R3 ^= R2; R2 ^= R3; S2 ^= S3; S3 ^= S2; S2 ^= S3; } if (R2 > R4) { R2 ^= R4; R4 ^= R2; R2 ^= R4; S2 ^= S4; S4 ^= S2; S2 ^= S4; } if (R2 > R5) { R2 ^= R5; R5 ^= R2; R2 ^= R5; S2 ^= S5; S5 ^= S2; S2 ^= S5; } if (R3 > R4) { R3 ^= R4; R4 ^= R3; R3 ^= R4; S3 ^= S4; S4 ^= S3; S3 ^= S4; } if (R3 > R5) { R3 ^= R5; R5 ^= R3; R3 ^= R5; S3 ^= S5; S5 ^= S3; S3 ^= S5; } if (R4 > R5) { R4 ^= R5; R5 ^= R4; R4 ^= R5; S4 ^= S5; S5 ^= S4; S4 ^= S5; } if (R4 == 13) { Flush = (S1 == S2) && (S2 == S3); if (Flush) { if (R1 >= 8) { Hand = 9; // Wild Royal Flush } else if (((R3 - R1) <= 4) || ((R3 == 12) && (R2 <= 3))) { Hand = 7; // Straight Flush } else { Hand = 4; // Flush } } else { if ((R1 == R2) && (R2 == R3)) { Hand = 8; // Five of a Kind } else if ((R1 == R2) || (R2 == R3)) { Hand = 6; // Four of a Kind } else if ((((R3 - R1) <= 4) || ((R3 == 12) && (R2 <= 3))) && (R1 != R2) && (R2 != R3)) { Hand = 3; // Straight } else { Hand = 2; // Three of a Kind } } } else if (R5 == 13) { Flush = (S1 == S2) && (S2 == S3) && (S3 == S4); if (Flush) { if (R1 >= 8) { Hand = 9; // Wild Royal Flush } else if (((R4 - R1) <= 4) || ((R4 == 12) && (R3 <= 3))) { Hand = 7; // Straight Flush } else { Hand = 4; // Flush } } else { if ((R1 == R2) && (R2 == R3) && (R3 == R4)) { Hand = 8; // Five of a Kind } else if ((R2 == R3) && ((R1 == R2) || (R3 == R4))) { Hand = 6; // Four of a Kind } else if ((R1 == R2) && (R3 == R4)) { Hand = 5; // Full House } else if ((((R4 - R1) <= 4) || ((R4 == 12) && (R3 <= 3))) && (R1 != R2) && (R2 != R3) && (R3 != R4)) { Hand = 3; // Straight } else if ((R1 == R2) || (R2 == R3) || (R3 == R4)) { Hand = 2; // Three of a Kind } } } else { if (Flush) { if ((R1 == (R2 - 1)) && (R2 == (R3 - 1)) && (R3 == (R4 - 1)) && ((R4 == (R5 - 1)) || ((R1 == 0) && (R5 == 12)))) { Hand = 7; // Straight Flush } else { Hand = 4; // Flush } } else { if ((R2 == R3) && (R3 == R4) && ((R1 == R2) || (R4 == R5))) { Hand = 6; // Four of a Kind } else if ((R1 == R2) && (R4 == R5) && ((R3 == R1) || (R3 == R4))) { Hand = 5; // Full House } else if ((R1 == (R2 - 1)) && (R2 == (R3 - 1)) && (R3 == (R4 - 1)) && ((R4 == (R5 - 1)) || ((R1 == 0) && (R5 == 12)))) { Hand = 3; // Straight } else if (((R1 == R2) && (R2 == R3)) || ((R2 == R3) && (R3 == R4)) || ((R3 == R4) && (R4 == R5))) { Hand = 2; // Three of a Kind } else if (((R1 == R2) && (R3 == R4)) || ((R1 == R2) && (R4 == R5)) || ((R2 == R3) && (R4 == R5))) { Hand = 1; // Two Pair } } } } return Hand; }