package com.flexpoker.table.command.service; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Random; import org.springframework.stereotype.Service; import com.flexpoker.model.card.Card; import com.flexpoker.model.card.CardRank; import com.flexpoker.model.card.CardSuit; import com.flexpoker.model.card.CardsUsedInHand; import com.flexpoker.model.card.FlopCards; import com.flexpoker.model.card.PocketCards; import com.flexpoker.model.card.RiverCard; import com.flexpoker.model.card.TurnCard; @Service public class DefaultCardService implements CardService { @Override public List<Card> createShuffledDeck() { List<Card> deckOfCards = createDeckOfCards(); Collections.shuffle(deckOfCards, new Random()); return deckOfCards; } @Override public CardsUsedInHand createCardsUsedInHand(List<Card> fullDeckOfCards, int numberOfPlayers) { int flopCardsIndex = (numberOfPlayers * 2) + 1; FlopCards flopCards = new FlopCards(fullDeckOfCards.get(flopCardsIndex), fullDeckOfCards.get(flopCardsIndex + 1), fullDeckOfCards.get(flopCardsIndex + 2)); TurnCard turnCard = new TurnCard(fullDeckOfCards.get(flopCardsIndex + 4)); RiverCard riverCard = new RiverCard(fullDeckOfCards.get(flopCardsIndex + 6)); List<PocketCards> pocketCards = new ArrayList<>(); for (int i = 0; i < numberOfPlayers; i++) { Card pocketCard1 = fullDeckOfCards.get(i); Card pocketCard2 = fullDeckOfCards.get(i + numberOfPlayers); pocketCards.add(new PocketCards(pocketCard1, pocketCard2)); } return new CardsUsedInHand(flopCards, turnCard, riverCard, pocketCards); } private List<Card> createDeckOfCards() { return Arrays.asList(new Card[] { new Card(0, CardRank.TWO, CardSuit.HEARTS), new Card(1, CardRank.THREE, CardSuit.HEARTS), new Card(2, CardRank.FOUR, CardSuit.HEARTS), new Card(3, CardRank.FIVE, CardSuit.HEARTS), new Card(4, CardRank.SIX, CardSuit.HEARTS), new Card(5, CardRank.SEVEN, CardSuit.HEARTS), new Card(6, CardRank.EIGHT, CardSuit.HEARTS), new Card(7, CardRank.NINE, CardSuit.HEARTS), new Card(8, CardRank.TEN, CardSuit.HEARTS), new Card(9, CardRank.JACK, CardSuit.HEARTS), new Card(10, CardRank.QUEEN, CardSuit.HEARTS), new Card(11, CardRank.KING, CardSuit.HEARTS), new Card(12, CardRank.ACE, CardSuit.HEARTS), new Card(13, CardRank.TWO, CardSuit.SPADES), new Card(14, CardRank.THREE, CardSuit.SPADES), new Card(15, CardRank.FOUR, CardSuit.SPADES), new Card(16, CardRank.FIVE, CardSuit.SPADES), new Card(17, CardRank.SIX, CardSuit.SPADES), new Card(18, CardRank.SEVEN, CardSuit.SPADES), new Card(19, CardRank.EIGHT, CardSuit.SPADES), new Card(20, CardRank.NINE, CardSuit.SPADES), new Card(21, CardRank.TEN, CardSuit.SPADES), new Card(22, CardRank.JACK, CardSuit.SPADES), new Card(23, CardRank.QUEEN, CardSuit.SPADES), new Card(24, CardRank.KING, CardSuit.SPADES), new Card(25, CardRank.ACE, CardSuit.SPADES), new Card(26, CardRank.TWO, CardSuit.DIAMONDS), new Card(27, CardRank.THREE, CardSuit.DIAMONDS), new Card(28, CardRank.FOUR, CardSuit.DIAMONDS), new Card(29, CardRank.FIVE, CardSuit.DIAMONDS), new Card(30, CardRank.SIX, CardSuit.DIAMONDS), new Card(31, CardRank.SEVEN, CardSuit.DIAMONDS), new Card(32, CardRank.EIGHT, CardSuit.DIAMONDS), new Card(33, CardRank.NINE, CardSuit.DIAMONDS), new Card(34, CardRank.TEN, CardSuit.DIAMONDS), new Card(35, CardRank.JACK, CardSuit.DIAMONDS), new Card(36, CardRank.QUEEN, CardSuit.DIAMONDS), new Card(37, CardRank.KING, CardSuit.DIAMONDS), new Card(38, CardRank.ACE, CardSuit.DIAMONDS), new Card(39, CardRank.TWO, CardSuit.CLUBS), new Card(40, CardRank.THREE, CardSuit.CLUBS), new Card(41, CardRank.FOUR, CardSuit.CLUBS), new Card(42, CardRank.FIVE, CardSuit.CLUBS), new Card(43, CardRank.SIX, CardSuit.CLUBS), new Card(44, CardRank.SEVEN, CardSuit.CLUBS), new Card(45, CardRank.EIGHT, CardSuit.CLUBS), new Card(46, CardRank.NINE, CardSuit.CLUBS), new Card(47, CardRank.TEN, CardSuit.CLUBS), new Card(48, CardRank.JACK, CardSuit.CLUBS), new Card(49, CardRank.QUEEN, CardSuit.CLUBS), new Card(50, CardRank.KING, CardSuit.CLUBS), new Card(51, CardRank.ACE, CardSuit.CLUBS) }); } }