RosettaCodeData/Task/Playing-cards/Fantom/playing-cards.fantom

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
}
}