From 96439a75419eeb263995642f4e3ed7377bb22f42 Mon Sep 17 00:00:00 2001 From: Michael Vezzani Date: Thu, 21 Nov 2013 14:57:37 -0500 Subject: [PATCH 1/3] Modified #to_s to format 'Q Hearts' to 'QH' --- blackjack.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/blackjack.rb b/blackjack.rb index b6dcda9..ce178d8 100644 --- a/blackjack.rb +++ b/blackjack.rb @@ -14,7 +14,12 @@ def value end def to_s - "#{@value}-#{suit}" + suit = "H" if @suit == :hearts + suit = "C" if @suit == :clubs + suit = "S" if @suit == :spades + suit = "D" if @suit == :diamonds + + "#{@value}#{suit}" end end @@ -134,8 +139,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 From 0e479041d6cb227fa34fc82ccb0566fb0bf24d89 Mon Sep 17 00:00:00 2001 From: Michael Vezzani Date: Fri, 22 Nov 2013 06:52:45 -0500 Subject: [PATCH 2/3] Added automatic 'stand' functionality for when the player busts. --- blackjack.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/blackjack.rb b/blackjack.rb index ce178d8..ac0c852 100644 --- a/blackjack.rb +++ b/blackjack.rb @@ -60,6 +60,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) @@ -80,6 +84,11 @@ def initialize def hit @player_hand.hit!(@deck) + if @player_hand.value > 21 + stand + else + status + end end def stand @@ -179,6 +188,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)]) From 7311504d88c2c0246ff5749e99bdc6478442d560 Mon Sep 17 00:00:00 2001 From: Michael Vezzani Date: Sat, 23 Nov 2013 04:18:50 -0500 Subject: [PATCH 3/3] Changed way of accessing first letter of suit with #initial(suit) method. Fixed my #to_s method with case statements and implemented my #initial(suit) method. --- blackjack.rb | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/blackjack.rb b/blackjack.rb index ac0c852..ddfaf04 100644 --- a/blackjack.rb +++ b/blackjack.rb @@ -13,11 +13,23 @@ def value return @value end + def initial(suit) + suit.to_s.capitalize[0] + end + def to_s - suit = "H" if @suit == :hearts - suit = "C" if @suit == :clubs - suit = "S" if @suit == :spades - suit = "D" if @suit == :diamonds + 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 @@ -84,7 +96,7 @@ def initialize def hit @player_hand.hit!(@deck) - if @player_hand.value > 21 + if @player_hand.bust? stand else status