Skip to content

Instantly share code, notes, and snippets.

@brentd
Created January 23, 2010 19:02
Show Gist options
  • Save brentd/284745 to your computer and use it in GitHub Desktop.
Save brentd/284745 to your computer and use it in GitHub Desktop.
class Card
include Comparable
attr_reader :rank
FACE_CARDS = {
'ace' => 1,
'jack' => 11,
'queen' => 12,
'king' => 13
}
def initialize(rank)
@rank = cast_rank(rank)
end
def <=>(other_card)
self.rank <=> other_card.rank
end
private
def cast_rank(rank)
rank = FACE_CARDS[rank] || rank.to_i
if rank.nil? || !(1..13).include?(rank)
raise ArgumentError, "rank must be: 1-13, 'jack', 'queen', 'king', or 'ace'"
end
rank
end
end
class Deck
include Enumerable
attr_reader :cards
def initialize
@cards = []
52.times { @cards << Card.new(rand(13) + 1) }
end
def each
@cards.each { |c| yield c }
end
def deal(num)
dealt_cards = []
num.times { dealt_cards << @cards.pop }
dealt_cards
end
def peek
@cards.last
end
def shuffle!
100.times do
@cards << @cards.delete_at(rand(count))
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment