#* http://rosettacode.org/wiki/Playing_Cards
Simulate a deck of cards
*#
card = object.new
card.init = { pip, suit |
my.pip = pip
my.suit = suit
}
card.suits = [ :Clubs :Hearts :Spades :Diamonds ]
card.pips = 2.to(10) + [ :Jack :Queen :King :Ace ]
card.prototype.to_s = {
"#{my.pip} of #{my.suit}"
}
#Allows for sorting
card.prototype.<=> = { rhs |
suit_cmp = card.suits.index_of(my.suit) <=> card.suits.index_of(rhs.suit)
true? suit_cmp == 0
{ card.pips.index_of(my.pip) <=> card.pips.index_of(rhs.pip) }
{ suit_cmp }
}
deck = object.new
deck.init = {
cards = []
card.suits.each { suit |
card.pips.each { pip |
cards << card.new pip, suit
}
}
my.cards = cards
}
deck.prototype [
shuffle:
{
my.cards.shuffle!
my
}
deal: { num |
my.cards.pop num
}
to_s: {
my.cards.to_s
}
]
d = deck.new.shuffle
p "Number of cards in deck: #{d.cards.length}"
p "Hand of five cards: #{d.deal(5).sort}"
p "Number of cards remaining: #{d.cards.length}"