EpicKnarvik97 f1bb6ae34b Fikser opp i kode, kommentarer og testing for kort og kortstokk
Fjerner overflødige kommentarer i Deck
Forenkler en del kode i Deck
Fikser uparameteriserte typer i Deck
Bytter navn på PlayerDeck til ProgrammingCardDeck
Fjerner overflødige kommentarer i ProgrammingCard
Legger final til ting som ikke skal endres
Fikser mellomrom noen steder
Legger til en toString() metode til ProgrammingCard for enklere debugging
Fikser uparameteriserte lister i TestProgrammingCardDeck
Fjerner unødvendige mellomrom i TestProgrammingCardDeck
2020-03-03 17:25:18 +01:00

73 lines
1.8 KiB
Java

package inf112.fiasko.roborally.objects;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* This class represents a deck of cards
*/
public abstract class Deck<T> implements IDeck<T> {
private final ArrayList<T> cardList;
/**
* Initializes the deck with cards
* @param cardList list of cards
*/
public Deck (ArrayList<T> cardList) {
this.cardList = cardList;
}
@Override
public void shuffle() {
Random randomGenerator = new Random();
int deckSize = cardList.size();
int halfDeckSize = deckSize / 2;
int timesToShuffle = 30 * deckSize;
for (int i = 0; i < timesToShuffle; i++) {
int oldPosition = randomGenerator.nextInt(halfDeckSize);
int newPosition = randomGenerator.nextInt(deckSize - halfDeckSize) + halfDeckSize;
cardList.add(newPosition, cardList.remove(oldPosition));
}
}
@Override
public void draw(IDeck<T> other) {
Deck<T> otherDeck = (Deck<T>) other;
cardList.add(otherDeck.cardList.remove(0));
}
@Override
public void draw(IDeck<T> other, int n) {
Deck<T> otherDeck = (Deck<T>) other;
if (n < 1 || n > otherDeck.size()) {
throw new IllegalArgumentException("n can't be below 1 or over the size of the other card deck");
}
for (int i = 0; i < n; i++) {
draw(other);
}
}
@Override
public void emptyInto(IDeck<T> other) {
Deck<T> otherDeck = (Deck<T>) other;
otherDeck.draw(this, this.size());
}
@Override
public boolean isEmpty() {
return cardList.isEmpty();
}
@Override
public int size() {
return cardList.size();
}
@Override
public List<T> getCards() {
return new ArrayList<>(cardList);
}
}