import groovy.transform.TupleConstructor enum Pip { ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING } enum Suit { DIAMONDS, SPADES, HEARTS, CLUBS } @TupleConstructor class Card { final Pip pip final Suit suit String toString() { "$pip of $suit" } } class Deck { private LinkedList cards = [] Deck() { reset() } void reset() { cards = [] Suit.values().each { suit -> Pip.values().each { pip -> cards << new Card(pip, suit) } } } Card deal() { cards.poll() } void shuffle() { Collections.shuffle cards } String toString() { cards.isEmpty() ? "Empty Deck" : "Deck $cards" } }