-
Notifications
You must be signed in to change notification settings - Fork 3
/
Deck.java
111 lines (99 loc) · 3.21 KB
/
Deck.java
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
/*
* The purpose of this class is to create and fill a deck of cards.
* With multiple actions that can be done to it like shuffling, dealing and checking the size
* Created by AP Developers
* Modified by Yolanda Yu
* Last modified on 06/06/2017
*/
//imports
import java.util.List;
import java.util.ArrayList;
public class Deck {
// fields
private List<Card> cards; // filled with all the cards in the deck
private int size; // number of cards left to be dealt
// Constructor of the class that puts every card with its according
// matched/paired up properties into one arraylist
public Deck(String[] ranks, String[] suits, int[] values) {
cards = new ArrayList<Card>();
// All cards are added with its respective rank, suit and point value
for (int r = 0; r < ranks.length; r++) {
for (int s = 0; s < suits.length; s++) {
Card card = new Card(ranks[r], suits[s], values[r]);
cards.add(card);
}
}
size = cards.size();
shuffle(); // shuffle would be called here to display different sequence
// of cards every run
}
// This method checks if the deck is empty, if it is, then it doesn't need
// to be dealt with
public boolean isEmpty() {
if (size == 0) {
return true;
} else
return false;
}
// This method checks and returns the number of undealt cards in the deck
public int size() {
return cards.size();
}
// This method finds a random card based on its corresponding location
// number and put it in the "shuffled array" by switching the card at that
// location with the last card.
public void shuffle() {
// Repeat the switching step until "k" has decreased to below zero
for (int k = cards.size() - 1; k > 0; k--) {
int howMany = k + 1;
int start = 0;
int randPos = (int) (Math.random() * howMany) + start;
Card temp = cards.get(k);
cards.set(k, cards.get(randPos));
cards.set(randPos, temp);
}
size = cards.size(); // reset the size of the cards so the program can
// run again
}
// This method deals the deck by getting one at a time, then decrease the
// deck size to deal the next one until there are no more undealt cards left
public Card deal() {
if (size > 0) {
size--;
Card dealt = cards.get(size); // size will decrease by one each time
// to get the next card
return dealt;
} else
return null;
}
// the @override annotation means that the method original method "toString"
// in the Object's class is being overrided in this Deck class
@Override
// Organizes, creates and outputs information of the deck in string form
public String toString() {
String rtn = "size = " + size + "\nUndealt cards: \n";
// Returns all the undealt cards
for (int k = size - 1; k >= 0; k--) {
rtn = rtn + cards.get(k);
if (k != 0) {
rtn = rtn + ", ";
}
if ((size - k) % 2 == 0) {
rtn = rtn + "\n";
}
}
// Returns all the dealted cards
rtn = rtn + "\nDealt cards: \n";
for (int k = cards.size() - 1; k >= size; k--) {
rtn = rtn + cards.get(k);
if (k != size) {
rtn = rtn + ", ";
}
if ((k - cards.size()) % 2 == 0) {
rtn = rtn + "\n";
}
}
rtn = rtn + "\n";
return rtn;
}
}