-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathElevensBoard (2).java
More file actions
131 lines (118 loc) · 3.88 KB
/
Copy pathElevensBoard (2).java
File metadata and controls
131 lines (118 loc) · 3.88 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
130
131
import java.util.List;
import java.util.ArrayList;
/**
* The ElevensBoard class represents the board in a game of Elevens.
*/
public class ElevensBoard extends Board {
/**
* The size (number of cards) on the board.
*/
private static final int BOARD_SIZE = 9;
/**
* The ranks of the cards for this game to be sent to the deck.
*/
private static final String[] RANKS =
{"ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king"};
/**
* The suits of the cards for this game to be sent to the deck.
*/
private static final String[] SUITS =
{"spades", "hearts", "diamonds", "clubs"};
/**
* The values of the cards for this game to be sent to the deck.
*/
private static final int[] POINT_VALUES =
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0};
/**
* Flag used to control debugging print statements.
*/
private static final boolean I_AM_DEBUGGING = false;
/**
* Creates a new <code>ElevensBoard</code> instance.
*/
public ElevensBoard() {
super(BOARD_SIZE, RANKS, SUITS, POINT_VALUES);
}
/**
* Determines if the selected cards form a valid group for removal.
* In Elevens, the legal groups are (1) a pair of non-face cards
* whose values add to 11, and (2) a group of three cards consisting of
* a jack, a queen, and a king in some order.
* @param selectedCards the list of the indices of the selected cards.
* @return true if the selected cards form a valid group for removal;
* false otherwise.
*/
@Override
public boolean isLegal(List<Integer> selectedCards) {
if(selectedCards.size() ==2) {
return containsPairSum11(selectedCards);
}
if(selectedCards.size()==3) {
return containsJQK(selectedCards);
}
return false;
}
/**
* Determine if there are any legal plays left on the board.
* In Elevens, there is a legal play if the board contains
* (1) a pair of non-face cards whose values add to 11, or (2) a group
* of three cards consisting of a jack, a queen, and a king in some order.
* @return true if there is a legal play left on the board;
* false otherwise.
*/
@Override
public boolean anotherPlayIsPossible() {
List<Integer> selected = cardIndexes();
return containsPairSum11(selected) || containsJQK(selected);
}
/**
* Check for an 11-pair in the selected cards.
* @param selectedCards selects a subset of this board. It is list
* of indexes into this board that are searched
* to find an 11-pair.
* @return true if the board entries in selectedCards
* contain an 11-pair; false otherwise.
*/
private boolean containsPairSum11(List<Integer> selectedCards) {
for(Integer n: selectedCards) {
for(Integer t: selectedCards) {
if(n != t && cardAt(n).pointValue() +cardAt(t).pointValue() == 11) {
return true;
}
}
}
return false;
}
/**
* Check for a JQK in the selected cards.
* @param selectedCards selects a subset of this board. It is list
* of indexes into this board that are searched
* to find a JQK group.
* @return true if the board entries in selectedCards
* include a jack, a queen, and a king; false otherwise.
*/
private boolean containsJQK(List<Integer> selectedCards) {
boolean flagQ = false;
boolean flagJ = false;
boolean flagK = false;
for(Integer n: selectedCards) {
if(cardAt(n).rank().equals("jack")) {
flagJ = true;
}
if(cardAt(n).rank().equals("queen")) {
flagQ = true;
}
if(cardAt(n).rank().equals("king")) {
flagK = true;
}
}
if(flagQ && flagJ && flagK)return true;
else return false;
}
public static void printCards(ElevensBoard board) {
List<Integer> cIndexes = board.cardIndexes();
for(Integer n: cIndexes) {
board.cardAt(n).toString();
}
}
}