Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.elsys.cardgame.factory;
- import java.util.*;
- import org.elsys.cardgame.api.*;
- public abstract class AbstractDeck implements Deck {
- private ArrayList<Card> deck = new ArrayList<>();
- private HandImpl hand;
- private List<Rank> ranking;
- private int handSize;
- public AbstractDeck(List<Rank> ranking, int handSize) {
- this.ranking = ranking;
- this.handSize = handSize;
- for(Suit suit : Suit.values()) {
- for(Rank rank : ranking) {
- deck.add(new CardImpl(suit, rank));
- }
- }
- }
- @Override
- public List<Card> getCards() {
- return deck;
- }
- @Override
- public int size() {
- return deck.size();
- }
- @Override
- public int handSize() {
- return hand.size();
- }
- @Override
- public Card drawTopCard() {
- Card cardToAdd = deck.get(0);
- hand.addCard(cardToAdd);
- deck.remove(0);
- return cardToAdd;
- }
- @Override
- public Card topCard() {
- return deck.get(0);
- }
- @Override
- public Card drawBottomCard() {
- Card cardToAdd = deck.get(deck.size() - 1);
- hand.addCard(cardToAdd);
- deck.remove(deck.size());
- return cardToAdd;
- }
- @Override
- public Card bottomCard() {
- return deck.get(deck.size() - 1);
- }
- @Override
- public Hand deal() {
- for(int i = 0; i < handSize; i++) {
- hand.addCard(deck.remove(0));
- }
- return hand;
- }
- @Override
- public void sort() {
- deck.sort((c1, c2) -> {
- if(c1.getSuit() == c2.getSuit()) {
- if(ranking.indexOf(c1.getRank()) > ranking.indexOf(c2.getRank())) {
- return 1;
- }
- return 0;
- }else{
- return c1.getSuit().compareTo(c2.getSuit());
- }
- });
- }
- @Override
- public void shuffle() {
- Collections.shuffle(deck);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement