From a31bfe97ebc5125b794607b52f368a26b455fbb2 Mon Sep 17 00:00:00 2001 From: jamlevi Date: Mon, 6 Aug 2012 18:26:36 -0700 Subject: [PATCH 1/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5aca256..c8f1c21 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ game.hit game.stand ``` -2. Change the Card's to_s to show "Q5" instead of 5-queen" +2. Change the Card's to_s to show "D5" instead of "5-diamonds" Tiger Level From 7989685fcfd0cc8e8d296c4ff275c5d3c62e5b60 Mon Sep 17 00:00:00 2001 From: James Levinson Date: Mon, 6 Aug 2012 18:38:48 -0700 Subject: [PATCH 2/3] panda --- blackjack.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/blackjack.rb b/blackjack.rb index b6dcda9..eb70d7d 100644 --- a/blackjack.rb +++ b/blackjack.rb @@ -13,8 +13,16 @@ def value return @value end + # "D5" instead of "5-diamonds" def to_s - "#{@value}-#{suit}" + ### cant do this beacause it's a Symbol + ### suit_label = suit.chr.capitalize + ### "{suit_label}#{@value}" + + ### orig + ### "#{@value}-#{suit}" + + "#{suit}#{@value}" # I changed the symbols end end @@ -29,7 +37,7 @@ def initialize def self.build_cards cards = [] - [:clubs, :diamonds, :spades, :hearts].each do |suit| + [:C, :D, :S, :H].each do |suit| (2..10).each do |number| cards << Card.new(suit, number) end From a451f4db34c07fda7ebd4029b50511757d1aa384 Mon Sep 17 00:00:00 2001 From: James Levinson Date: Mon, 17 Sep 2012 18:24:29 -0700 Subject: [PATCH 3/3] blackjack homework --- blackjack.rb | 70 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/blackjack.rb b/blackjack.rb index eb70d7d..5d5191c 100644 --- a/blackjack.rb +++ b/blackjack.rb @@ -1,6 +1,8 @@ require 'rspec' class Card +# @@FORMATS = (1 => "#{@value}-#{suit}", 2 => "#{suit}#{@value}") + attr_reader :suit, :value def initialize(suit, value) @suit = suit @@ -13,6 +15,23 @@ def value return @value end + def suit + return_value = '' + if @suit.eql?(:clubs) + return_value = 'C' + end + if @suit.eql?(:spades) + return_value = 'S' + end + if @suit.eql?(:hearts) + return_value = 'H' + end + if @suit.eql?(:diamonds) + return_value = 'D' + end + return_value + end + # "D5" instead of "5-diamonds" def to_s ### cant do this beacause it's a Symbol @@ -20,9 +39,9 @@ def to_s ### "{suit_label}#{@value}" ### orig - ### "#{@value}-#{suit}" + # "#{@value}-#{suit}" - "#{suit}#{@value}" # I changed the symbols + "#{suit}#{@value}" # I changed the symbols, but the tests will fail now? end end @@ -37,7 +56,7 @@ def initialize def self.build_cards cards = [] - [:C, :D, :S, :H].each do |suit| + [:clubs, :diamonds, :spades, :hearts].each do |suit| (2..10).each do |number| cards << Card.new(suit, number) end @@ -69,6 +88,10 @@ def play_as_dealer(deck) play_as_dealer(deck) end end + + def inspect + @cards + end end class Game @@ -83,24 +106,38 @@ def initialize def hit @player_hand.hit!(@deck) + if @player_hand.value > 21 + puts "Player Busts! at #{@player_hand.value}" + self.stand + end + puts "Player is Holding #{@player_hand.value}: #{@player_hand.inspect}" end def stand - @dealer_hand.play_as_dealer(@deck) + unless @player_hand.value > 21 + @dealer_hand.play_as_dealer(@deck) + end + puts "Dealer is Holding #{@dealer_hand.value}: #{@dealer_hand.inspect}" @winner = determine_winner(@player_hand.value, @dealer_hand.value) + puts "#{@winner} wins!" end def status {:player_cards=> @player_hand.cards, :player_value => @player_hand.value, - :dealer_cards => @dealer_hand.cards, - :dealer_value => @dealer_hand.value, + :dealer_cards => '$$', + :dealer_value => '$$', :winner => @winner} end def determine_winner(player_value, dealer_value) return :dealer if player_value > 21 return :player if dealer_value > 21 + #if player_value > 21 + # stand + # :dealer + #end + #return :player if dealer_value > 21 if player_value == dealer_value :push elsif player_value > dealer_value @@ -115,17 +152,17 @@ def inspect end end - +#============================================================================== describe Card do it "should accept suit and value when building" do card = Card.new(:clubs, 10) - card.suit.should eq(:clubs) + card.suit.should eq(:clubs.to_s.capitalize.each_char.first) card.value.should eq(10) end it "should have a value of 10 for facecards" do - facecards = ["J", "Q", "K"] + facecards = %w( J Q K ) facecards.each do |facecard| card = Card.new(:hearts, facecard) card.value.should eq(10) @@ -143,7 +180,8 @@ def inspect it "should be formatted nicely" do card = Card.new(:diamonds, "A") - card.to_s.should eq("A-diamonds") + #card.to_s.should eq("A-diamonds") + card.to_s.should eq("DA") end end @@ -233,6 +271,18 @@ def inspect game.status[:winner].should_not be_nil end + it "should stand if player busts" do + game = Game.new + deck = mock(:deck, :cards => [Card.new(:clubs, 8), + Card.new(:diamonds, 7), + Card.new(:clubs, "K")]) + hand = Hand.new + 2.times { hand.hit!(deck) } + hand.hit!(deck) + + + end + describe "#determine_winner" do it "should have dealer win when player busts" do Game.new.determine_winner(22, 15).should eq(:dealer)