diff --git a/blackjack.rb b/blackjack.rb index b6dcda9..ddfaf04 100644 --- a/blackjack.rb +++ b/blackjack.rb @@ -13,8 +13,25 @@ def value return @value end + def initial(suit) + suit.to_s.capitalize[0] + end + def to_s - "#{@value}-#{suit}" + suit = case @suit + when :hearts + initial(:hearts) + when :diamonds + initial(:diamonds) + when :spades + initial(:spades) + when :clubs + initial(:clubs) + else + raise ArgumentError.new "Unsupported suit: #{@suit}" + end + + "#{@value}#{suit}" end end @@ -55,6 +72,10 @@ def value cards.inject(0) {|sum, card| sum += card.value } end + def bust? + value > 21 + end + def play_as_dealer(deck) if value < 16 hit!(deck) @@ -75,6 +96,11 @@ def initialize def hit @player_hand.hit!(@deck) + if @player_hand.bust? + stand + else + status + end end def stand @@ -134,8 +160,8 @@ def inspect end it "should be formatted nicely" do - card = Card.new(:diamonds, "A") - card.to_s.should eq("A-diamonds") + card = Card.new(:hearts, "Q") + card.to_s.should eq("QH") end end @@ -174,6 +200,17 @@ def inspect end + it "should bust when a player hand value exceeds 21" do + deck = mock(:deck, :cards => [Card.new(:clubs, 10), + Card.new(:diamonds, 10), + Card.new(:spades, 10)]) + + hand = Hand.new + 3.times { hand.hit!(deck) } + hand.bust?.should eq(true) + + end + describe "#play_as_dealer" do it "should hit blow 16" do deck = mock(:deck, :cards => [Card.new(:clubs, 4), Card.new(:diamonds, 4), Card.new(:clubs, 2), Card.new(:hearts, 6)])