67 lines
1.1 KiB
Plaintext
67 lines
1.1 KiB
Plaintext
enum class Suit { clubs, diamonds, hearts, spades }
|
|
enum class Pips { ace, two, three, four, five,
|
|
six, seven, eight, nine, ten, jack, queen, king
|
|
}
|
|
|
|
class Card
|
|
{
|
|
readonly Suit suit
|
|
readonly Pips pips
|
|
|
|
new make (Suit suit, Pips pips)
|
|
{
|
|
this.suit = suit
|
|
this.pips = pips
|
|
}
|
|
|
|
override Str toStr ()
|
|
{
|
|
"card: $pips of $suit"
|
|
}
|
|
}
|
|
|
|
class Deck
|
|
{
|
|
Card[] deck := [,]
|
|
|
|
new make ()
|
|
{
|
|
Suit.vals.each |val|
|
|
{
|
|
Pips.vals.each |pip| { deck.add (Card(val, pip)) }
|
|
}
|
|
}
|
|
|
|
Void shuffle (Int swaps := 50)
|
|
{
|
|
swaps.times { deck.swap(Int.random(0..deck.size-1), Int.random(0..deck.size-1)) }
|
|
}
|
|
|
|
Card[] deal (Int cards := 1)
|
|
{
|
|
if (cards > deck.size) throw ArgErr("$cards is larger than ${deck.size}")
|
|
Card[] result := [,]
|
|
cards.times { result.push (deck.removeAt (0)) }
|
|
return result
|
|
}
|
|
|
|
Void show ()
|
|
{
|
|
deck.each |card| { echo (card.toStr) }
|
|
}
|
|
}
|
|
|
|
class PlayingCards
|
|
{
|
|
public static Void main ()
|
|
{
|
|
deck := Deck()
|
|
deck.shuffle
|
|
Card[] hand := deck.deal (7)
|
|
echo ("Dealt hand is:")
|
|
hand.each |card| { echo (card.toStr) }
|
|
echo ("Remaining deck is:")
|
|
deck.show
|
|
}
|
|
}
|