-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCheckHand.java
More file actions
129 lines (117 loc) · 4.05 KB
/
Copy pathCheckHand.java
File metadata and controls
129 lines (117 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package peterson;
import java.util.Arrays;
public class CheckHand {
public final static int PAIR = 100;
public final static int TWOPAIR = 200;
public final static int THREEKIND = 300;
public final static int STRAIGHT = 400;
public final static int FLUSH = 500;
public final static int FULLHOUSE = 600;
public final static int FOURKIND = 700;
public final static int NUMBER_OF_CARDS = 5;
// TAKES HAND AND RECURSIVELY CHECKS TYPE OF HANDS
// RETURNS A UNIQUE NUMBER CORESPONDING TO THE VALUE
public int checkHand(Card[] hand) {
return Math.max(checkPair(hand), highCardandStraight(hand) + flush(hand));
}
// CHECKS FOR THE HIGH CARD AND IF THE HAND IS A STRAIGHT
public int highCardAndStraight(Card[] hand) {
int[] values = new int[NUMBER_OF_CARDS];
for (int i = 0; i < NUMBER_OF_CARDS; i++)
values[i] = hand[i].digit;
Arrays.sort(values);
int highCard = values[NUMBER_OF_CARDS - 1];
if (values[0] + 1 == values[1] && values[1] + 1 == values[2]
&& values[2] + 1 == values[3] &&
(values[3] + 1 == values[4] || values[3] + 9 == values[4]))
return highCard + STRAIGHT;
else
return highCard;
}
// CHECKS IF THE HAND IS A FLUSH
public int flush(Card[] hand) {
if (hand[0].suit + hand[1].suit + hand[2].suit + hand[3].suit + hand[4].suit
== hand[0].suit * NUMBER_OF_CARDS)
return FLUSH;
else
return 0;
}
// CHECKS FOR PAIR
public int checkPair(Card[] hand) {
if (hand[0].digit == hand[1].digit)
return checkThree(hand[0].digit, hand[2].digit, hand[3].digit,
hand[4].digit);
else if (hand[0].digit == hand[2].digit)
return checkThree(hand[0].digit, hand[1].digit, hand[3].digit,
hand[4].digit);
else if (hand[0].digit == hand[3].digit)
return checkThree(hand[0].digit, hand[1].digit, hand[2].digit,
hand[4].digit);
else if (hand[0].digit == hand[4].digit)
return checkThree(hand[0].digit, hand[1].digit, hand[2].digit,
hand[3].digit);
else if (hand[1].digit == hand[2].digit)
return checkThree(hand[1].digit, hand[0].digit, hand[3].digit,
hand[4].digit);
else if (hand[1].digit == hand[3].digit)
return checkThree(hand[1].digit, hand[0].digit, hand[2].digit,
hand[4].digit);
else if (hand[1].digit == hand[4].digit)
return checkThree(hand[1].digit, hand[0].digit, hand[2].digit,
hand[3].digit);
else if (hand[2].digit == hand[3].digit)
return checkThree(hand[2].digit, hand[0].digit, hand[1].digit,
hand[4].digit);
else if (hand[2].digit == hand[4].digit)
return checkThree(hand[2].digit, hand[0].digit, hand[1].digit,
hand[3].digit);
else if (hand[3].digit == hand[4].digit)
return checkThree(hand[3].digit, hand[0].digit, hand[1].digit,
hand[2].digit);
else
return (0);
}
// CHECKS IF A FOUND PAIR HAS THREE OF A KIND
public int checkThree(int pair, int card1, int card2, int card3) {
if (pair == card1)
return checkFour(pair, card2, card3);
else if (pair == card2)
return checkFour(pair, card1, card3);
else if (pair == card3)
return checkFour(pair, card1, card2);
else
return checkTwoPair(pair, card1, card2, card3);
}
// CHECKS IF A FOUND THREE OF A KIND HAS FOUR OF A KIND
public int checkFour(int triple, int card1, int card2) {
if (triple == card1 || triple == card2)
return (FOURKIND + triple);
else
return fullHouse1(triple, card1, card2);
}
// CHECKS IF THERE IS A SECOND PAIR
public int checkTwoPair(int pair, int card1, int card2, int card3) {
if (card1 == card2)
return fullHouse2(pair, card1, card3);
else if (card1 == card3)
return fullHouse2(pair, card1, card2);
else if (card2 == card3)
return fullHouse2(pair, card2, card3);
else
return (PAIR + pair);
}
// CHECKS IF A FOUND THREE OF A KIND IS A FULL HOUSE
public int fullHouse1(int triple, int card1, int card2) {
if (card1 == card2)
return (FULLHOUSE + triple);
else
return (THREEKIND + triple);
}
// CHECKS IF A FOUND TWO PAIRS IS A FULL HOUSE
public int fullHouse2(int pair1, int pair2, int card) {
if (pair1 == card || pair2 == card)
return (FULLHOUSE + card);
else
return (TWOPAIR + Math.max(pair1, pair2));
}
}