Newer
Older
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
package Deck;
import Card.*;
import java.util.ArrayList;
import java.util.Random;
public class Deck {
private int numOfCards;
private Card top;
private ArrayList<Card> deck;
private Random rand;
/**
* Constructor for Deck object.
*/
public Deck() {
numOfCards = 108;
deck = new ArrayList<Card>();
rand = new Random();
initCards();
assignTop();
}
/**
* Constructor for Deck object. Used for testing only.
* @param seed seed for random
*/
public Deck(long seed) {
numOfCards = 108;
deck = new ArrayList<Card>();
rand = new Random();
rand.setSeed(seed);
initCards();
assignTop();
}
/**
* Getter for number of cards.
* @return number of cards in the deck
*/
public int getNumOfCards() {
return numOfCards;
}
/**
* Initialization for all cards in the deck.
*/
private void initCards() {
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 10; ++j) {
deck.add(new NumberCard(j, i));
}
for (int j = 1; j < 10; ++j) {
deck.add(new NumberCard(j, i));
}
for (int j = 0; j < 3; ++j) {
deck.add(new ActionCard(j, i));
deck.add(new ActionCard(j, i));
}
deck.add(new ActionCard(3, 4));
deck.add(new ActionCard(4, 4));
}
}
/**
* Draw cards from deck multiple times.
* @param num number of cards to be drawn from deck
* @return array of cards drawn from deck
*/
public Card[] drawMultipleTop(int num) {
Card[] ret = new Card[num];
for (int i = 0; i < num; ++i) {
ret[i] = drawTop();
}
return ret;
}
/**
* Draw one card from deck.
* @return card drawn from deck
*/
public Card drawTop() {
Card ret = top;
deck.remove(top);
numOfCards--;
assignTop();
return ret;
}
/**
* Assign one card randomly to top.
*/
private void assignTop() {
if (numOfCards != 0) {
int idx = rand.nextInt(numOfCards);
top = deck.get(idx);
}
}
/**
* Set up a new deck when deck is empty.
* @param cards Arraylist of cards to be set up as new deck
*/
public void setUpNewDeck(ArrayList<Card> cards) {
deck.addAll(cards);
numOfCards = deck.size();
assignTop();
}
}