From 3fde46a2b6f02b69b750d807c9b25008ee3caaad Mon Sep 17 00:00:00 2001 From: Philip Cole Johnson Date: Fri, 22 Jul 2016 09:17:52 -0700 Subject: [PATCH 01/13] Initial commit --- Gemfile | 6 ++++++ README.md | 2 ++ app.rb | 14 ++++++++++++++ views/blackjack.erb | 7 +++++++ views/layout.erb | 9 +++++++++ 5 files changed, 38 insertions(+) create mode 100644 Gemfile create mode 100644 app.rb create mode 100644 views/blackjack.erb create mode 100644 views/layout.erb diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..e146a8b --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' +gem 'mechanize', '~>2.7.2', '<2.7.3' +gem 'pry' # because you'll probably need it +gem 'sinatra' +gem 'sinatra-contrib' +gem 'httparty' \ No newline at end of file diff --git a/README.md b/README.md index 3f18110..b955460 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +Leo, Mike, Phil + # assignment_blackjack Hit me baby one more time? diff --git a/app.rb b/app.rb new file mode 100644 index 0000000..5663f1c --- /dev/null +++ b/app.rb @@ -0,0 +1,14 @@ +require 'sinatra' +require 'sinatra/reloader' if development? +require 'pry' +# also_reload './views' + +enable :sessions + +get '/' do + "

Welcome!


Play blackjack!" +end + +get '/blackjack' do + erb :blackjack +end \ No newline at end of file diff --git a/views/blackjack.erb b/views/blackjack.erb new file mode 100644 index 0000000..14aeb7e --- /dev/null +++ b/views/blackjack.erb @@ -0,0 +1,7 @@ +
+ +
+
+
+ +
\ No newline at end of file diff --git a/views/layout.erb b/views/layout.erb new file mode 100644 index 0000000..9064883 --- /dev/null +++ b/views/layout.erb @@ -0,0 +1,9 @@ + + + + Sinatra Blackjack + + + <%= yield %> + + \ No newline at end of file From c178d5d11b55b3ef435c76c13888c77455e94e27 Mon Sep 17 00:00:00 2001 From: Leo Ahnn Date: Fri, 22 Jul 2016 12:39:10 -0400 Subject: [PATCH 02/13] created classes for blackjack --- app.rb | 13 ++++++++++++- classes/blackjack.rb | 30 ++++++++++++++++++++++++++++++ classes/card.rb | 17 +++++++++++++++++ classes/dealer.rb | 9 +++++++++ classes/hand.rb | 17 +++++++++++++++++ helpers/blackjack_helper.rb | 6 ++++++ 6 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 classes/blackjack.rb create mode 100644 classes/card.rb create mode 100644 classes/dealer.rb create mode 100644 classes/hand.rb create mode 100644 helpers/blackjack_helper.rb diff --git a/app.rb b/app.rb index 5663f1c..78281bb 100644 --- a/app.rb +++ b/app.rb @@ -3,6 +3,7 @@ require 'pry' # also_reload './views' +helpers BlackjackHelper enable :sessions get '/' do @@ -11,4 +12,14 @@ get '/blackjack' do erb :blackjack -end \ No newline at end of file +end + +post '/blackjack/hit' do + # add_card + redirect ('blackjack') +end + +post '/blackjack/stay' do + + redirect ('blackjack') +end diff --git a/classes/blackjack.rb b/classes/blackjack.rb new file mode 100644 index 0000000..eede382 --- /dev/null +++ b/classes/blackjack.rb @@ -0,0 +1,30 @@ +require_relative 'card' +require_relative 'hand' + +class Blackjack + + + +VALUES = { + "A": 11 + "2": 2 + "3": 3 + "4": 4 + "5": 5 + "6": 6 + "7": 7 + "8": 8 + "9": 9 + "10": 10 + "J": 10 + "Q": 10 + "K": 10 +} + +SUITS = ["H", "S", "C", "D"] + + + + + +end diff --git a/classes/card.rb b/classes/card.rb new file mode 100644 index 0000000..8bdc1af --- /dev/null +++ b/classes/card.rb @@ -0,0 +1,17 @@ +# suit, number, value + +class Card + + attr_reader :suit, :face + + def initialize(suit, face) + @face = face + @suit = suit + end + + def value + Blackjack::VALUES[@face] + end + + +end diff --git a/classes/dealer.rb b/classes/dealer.rb new file mode 100644 index 0000000..423d082 --- /dev/null +++ b/classes/dealer.rb @@ -0,0 +1,9 @@ + + +class Dealer < Hand + + def decide + if hand_value > 16 + end + +end diff --git a/classes/hand.rb b/classes/hand.rb new file mode 100644 index 0000000..c745bf8 --- /dev/null +++ b/classes/hand.rb @@ -0,0 +1,17 @@ +class Hand + + def initialize(cards) + @cards + end + + # add_card, count value, see_cards, + # ace logic: 11, subtract until <21 + + def ace_value + end + + def hand_value + end + + +end diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb new file mode 100644 index 0000000..c5d1a63 --- /dev/null +++ b/helpers/blackjack_helper.rb @@ -0,0 +1,6 @@ +module BlackjackHelper + + + + +end From 6076aa0b94c95709e99e2b97caeda708db057cfb Mon Sep 17 00:00:00 2001 From: Mike Lee Date: Fri, 22 Jul 2016 13:04:28 -0400 Subject: [PATCH 03/13] working on deck --- Gemfile.lock | 73 ++++++++++++++++++++++++++++++++++++++++++++ classes/blackjack.rb | 25 ++++++++++----- classes/dealer.rb | 2 +- classes/hand.rb | 24 +++++++++++++-- 4 files changed, 113 insertions(+), 11 deletions(-) create mode 100644 Gemfile.lock diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..8812b57 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,73 @@ +GEM + remote: https://rubygems.org/ + specs: + backports (3.6.8) + coderay (1.1.1) + domain_name (0.5.20160615) + unf (>= 0.0.5, < 1.0.0) + http-cookie (1.0.2) + domain_name (~> 0.5) + httparty (0.13.7) + json (~> 1.8) + multi_xml (>= 0.5.2) + json (1.8.3) + mechanize (2.7.2) + domain_name (~> 0.5, >= 0.5.1) + http-cookie (~> 1.0.0) + mime-types (~> 1.17, >= 1.17.2) + net-http-digest_auth (~> 1.1, >= 1.1.1) + net-http-persistent (~> 2.5, >= 2.5.2) + nokogiri (~> 1.4) + ntlm-http (~> 0.1, >= 0.1.1) + webrobots (>= 0.0.9, < 0.2) + method_source (0.8.2) + mime-types (1.25.1) + mini_portile2 (2.1.0) + multi_json (1.12.1) + multi_xml (0.5.5) + net-http-digest_auth (1.4) + net-http-persistent (2.9.4) + nokogiri (1.6.8) + mini_portile2 (~> 2.1.0) + pkg-config (~> 1.1.7) + ntlm-http (0.1.1) + pkg-config (1.1.7) + pry (0.10.4) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) + rack (1.6.4) + rack-protection (1.5.3) + rack + rack-test (0.6.3) + rack (>= 1.0) + sinatra (1.4.7) + rack (~> 1.5) + rack-protection (~> 1.4) + tilt (>= 1.3, < 3) + sinatra-contrib (1.4.7) + backports (>= 2.0) + multi_json + rack-protection + rack-test + sinatra (~> 1.4.0) + tilt (>= 1.3, < 3) + slop (3.6.0) + tilt (2.0.5) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.2) + webrobots (0.1.2) + +PLATFORMS + ruby + +DEPENDENCIES + httparty + mechanize (~> 2.7.2, < 2.7.3) + pry + sinatra + sinatra-contrib + +BUNDLED WITH + 1.12.5 diff --git a/classes/blackjack.rb b/classes/blackjack.rb index eede382..d6c6872 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -3,9 +3,9 @@ class Blackjack + SUITS = ["H", "S", "C", "D"] - -VALUES = { + VALUES = { "A": 11 "2": 2 "3": 3 @@ -19,11 +19,22 @@ class Blackjack "J": 10 "Q": 10 "K": 10 -} - -SUITS = ["H", "S", "C", "D"] - - + } + + def initialize + @deck = {} + build_deck + end + + def build_deck + VALUES.keys.each do |key| + @deck[key] = SUITS + end + end + + def give_card + @deck[@deck.keys.sample] + end diff --git a/classes/dealer.rb b/classes/dealer.rb index 423d082..034a73d 100644 --- a/classes/dealer.rb +++ b/classes/dealer.rb @@ -3,7 +3,7 @@ class Dealer < Hand def decide - if hand_value > 16 + add_card until hand_value > 16 end end diff --git a/classes/hand.rb b/classes/hand.rb index c745bf8..48ab444 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -1,16 +1,34 @@ class Hand - def initialize(cards) - @cards + attr_reader :cards + + def initialize(cards = []) + @cards = cards end # add_card, count value, see_cards, # ace logic: 11, subtract until <21 - def ace_value + def ace_logic(value, aces) + while value > 21 && aces > 0 + value -= 10 + aces -= 1 + end + value end def hand_value + value = 0 + aces = 0 + cards.each do |card| + aces += 1 if card.value == 11 + value += card.value + end + value = ace_logic(value, aces) + end + + def add_card + @cards << @deck. end From 7af458db626dd170ae7e1ca74f31d3168999a57d Mon Sep 17 00:00:00 2001 From: Philip Cole Johnson Date: Fri, 22 Jul 2016 10:33:43 -0700 Subject: [PATCH 04/13] Flushing out blackjack logic --- classes/blackjack.rb | 50 ++++++++++++++++++++++++++++---------------- classes/card.rb | 2 +- classes/hand.rb | 11 ++++++++-- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/classes/blackjack.rb b/classes/blackjack.rb index d6c6872..90dd585 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -1,41 +1,55 @@ require_relative 'card' require_relative 'hand' +require_relative 'dealer' class Blackjack + #delete deck! + attr_reader :player_hand, :dealer_hand, :deck SUITS = ["H", "S", "C", "D"] VALUES = { - "A": 11 - "2": 2 - "3": 3 - "4": 4 - "5": 5 - "6": 6 - "7": 7 - "8": 8 - "9": 9 - "10": 10 - "J": 10 - "Q": 10 + "A": 11, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "10": 10, + "J": 10, + "Q": 10, "K": 10 } - def initialize + def initialize(player_hand = [], dealer_hand = []) @deck = {} - build_deck + @player_hand = Hand.new(player_hand) + @dealer_hand = Dealer.new(dealer_hand) + build_deck() end def build_deck VALUES.keys.each do |key| - @deck[key] = SUITS + # don't add cards from hands + @deck[key] = SUITS.dup end end - def give_card - @deck[@deck.keys.sample] + def give_card(player) + face = @deck.keys.sample + suit = @deck[face].sample + @deck[face].delete(suit) + player.add_card(face, suit) end - + def finish + return #dealer wins if @player_hand.busted? + return #player wins if @dealer_hand.busted? + return #player if @player_hand.hand_value > @dealer_hand.hand_value + return #dealer hand + end end diff --git a/classes/card.rb b/classes/card.rb index 8bdc1af..8c52f23 100644 --- a/classes/card.rb +++ b/classes/card.rb @@ -4,7 +4,7 @@ class Card attr_reader :suit, :face - def initialize(suit, face) + def initialize(face, suit) @face = face @suit = suit end diff --git a/classes/hand.rb b/classes/hand.rb index 48ab444..dea154b 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -27,9 +27,16 @@ def hand_value value = ace_logic(value, aces) end - def add_card - @cards << @deck. + def add_card(face, suit) + @cards << Card.new(face, suit) end + def busted? + hand_value > 21 + end + + def contains?(face, suit) + + end end From 4528dcec1d4cb43a31b49a5fd50e3cde55b3e961 Mon Sep 17 00:00:00 2001 From: Leo Ahnn Date: Fri, 22 Jul 2016 13:59:17 -0400 Subject: [PATCH 05/13] worked on blackjack --- app.rb | 6 +++++- classes/blackjack.rb | 33 ++++++++++++++++++++++++++------- classes/hand.rb | 18 ++++++++++++++---- helpers/blackjack_helper.rb | 8 +++++++- 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/app.rb b/app.rb index 78281bb..cca1e64 100644 --- a/app.rb +++ b/app.rb @@ -1,6 +1,7 @@ require 'sinatra' require 'sinatra/reloader' if development? require 'pry' +require './classes/blackjack' # also_reload './views' helpers BlackjackHelper @@ -11,11 +12,14 @@ end get '/blackjack' do - erb :blackjack + player_hand = get_player_hand + dealer_hand = get_dealer_hand + erb :blackjack, locals: { player_hand: player_hand, dealer_hand: dealer_hand } end post '/blackjack/hit' do # add_card + get_player_hand redirect ('blackjack') end diff --git a/classes/blackjack.rb b/classes/blackjack.rb index 90dd585..9e119dc 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -33,23 +33,42 @@ def initialize(player_hand = [], dealer_hand = []) def build_deck VALUES.keys.each do |key| - # don't add cards from hands @deck[key] = SUITS.dup end + @player_hand.cards.each {|card| delete(card.face, card.suit)} + @dealer_hand.cards.each {|card| delete(card.face, card.suit)} + end + + + def delete(face, suit) + @deck[face].delete(suit) end def give_card(player) face = @deck.keys.sample suit = @deck[face].sample - @deck[face].delete(suit) + delete(face, suit) player.add_card(face, suit) end - def finish - return #dealer wins if @player_hand.busted? - return #player wins if @dealer_hand.busted? - return #player if @player_hand.hand_value > @dealer_hand.hand_value - return #dealer hand + # def finish + # return #dealer wins if @player_hand.busted? + # return #player wins if @dealer_hand.busted? + # return #player if @player_hand.hand_value > @dealer_hand.hand_value + # return #dealer hand + # end + +# (dealer)[[face, suit][face, suit]], +# (player)[[face,suit],[face,suit]] + + + def save + save = {} + dealer = @dealer_hand.cards.map { |card| [card.face, card.suit] } + player = @player_hand.cards.map { |card| [card.face, card.suit] } + save["dealer"] = dealer + save["player"] = player + save end end diff --git a/classes/hand.rb b/classes/hand.rb index dea154b..433223a 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -2,13 +2,20 @@ class Hand attr_reader :cards +# [[face, suit][face, suit]] + def initialize(cards = []) - @cards = cards + @cards = get_cards(cards) unless cards.empty? end # add_card, count value, see_cards, # ace logic: 11, subtract until <21 + def get_cards(cards) + cards.map { |card| Card.new(card[0], card[1])} + end + + def ace_logic(value, aces) while value > 21 && aces > 0 value -= 10 @@ -35,8 +42,11 @@ def busted? hand_value > 21 end - def contains?(face, suit) - - end + # def contains?(face, suit) + # @cards.each do |card| + # return true if card.face == face && card.suit == suit + # end + # false + # end end diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb index c5d1a63..17a37fb 100644 --- a/helpers/blackjack_helper.rb +++ b/helpers/blackjack_helper.rb @@ -1,6 +1,12 @@ module BlackjackHelper - + def get_player_hand + session["player"] + end + + def get_dealer_hand + session["dealer"] + end end From 6388a8e9e982110a487f31a22f806c8548724929 Mon Sep 17 00:00:00 2001 From: Mike Lee Date: Fri, 22 Jul 2016 14:19:38 -0400 Subject: [PATCH 06/13] ace up our sleeve --- app.rb | 12 ++++++++---- classes/blackjack.rb | 7 ++++++- helpers/blackjack_helper.rb | 10 ++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app.rb b/app.rb index cca1e64..3e3b62d 100644 --- a/app.rb +++ b/app.rb @@ -12,14 +12,18 @@ end get '/blackjack' do - player_hand = get_player_hand - dealer_hand = get_dealer_hand - erb :blackjack, locals: { player_hand: player_hand, dealer_hand: dealer_hand } + @game = make_blackjack + erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand } end post '/blackjack/hit' do + @game = make_blackjack + @game.give_card(@game.player_hand) + #check for end + save_game(@game) + # add_card - get_player_hand + redirect ('blackjack') end diff --git a/classes/blackjack.rb b/classes/blackjack.rb index 9e119dc..884148a 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -24,13 +24,18 @@ class Blackjack "K": 10 } - def initialize(player_hand = [], dealer_hand = []) + def initialize(player_hand, dealer_hand) + player_hand ||= [] + dealer_hand ||= [] @deck = {} @player_hand = Hand.new(player_hand) @dealer_hand = Dealer.new(dealer_hand) build_deck() end + def start_game + end + def build_deck VALUES.keys.each do |key| @deck[key] = SUITS.dup diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb index 17a37fb..6eff590 100644 --- a/helpers/blackjack_helper.rb +++ b/helpers/blackjack_helper.rb @@ -1,5 +1,9 @@ module BlackjackHelper + def make_blackjack + Blackjack.new(get_player_hand, get_dealer_hand) + end + def get_player_hand session["player"] end @@ -8,5 +12,11 @@ def get_dealer_hand session["dealer"] end + def save_game(game) + state = game.save + session["player"] = state["player"] + session["dealer"] = state["dealer"] + end + end From 3d1a70f539fd6a7041a4148c9bbb6d04a479f7fb Mon Sep 17 00:00:00 2001 From: Philip Cole Johnson Date: Fri, 22 Jul 2016 11:46:07 -0700 Subject: [PATCH 07/13] Dealt another card to blackjack routes --- app.rb | 16 +++++++++++----- classes/blackjack.rb | 6 ++++++ classes/hand.rb | 2 +- views/blackjack.erb | 3 +++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app.rb b/app.rb index 3e3b62d..c12dc84 100644 --- a/app.rb +++ b/app.rb @@ -2,6 +2,7 @@ require 'sinatra/reloader' if development? require 'pry' require './classes/blackjack' +require './helpers/blackjack_helper' # also_reload './views' helpers BlackjackHelper @@ -12,15 +13,20 @@ end get '/blackjack' do - @game = make_blackjack - erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand } + game = make_blackjack + save_game(game) unless get_player_hand + # if game.over? + # erb :blackjack_finish, locals: { conditions:conditions } + # else + erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand } + # end end post '/blackjack/hit' do - @game = make_blackjack - @game.give_card(@game.player_hand) + game = make_blackjack + game.give_card(game.player_hand) #check for end - save_game(@game) + save_game(game) # add_card diff --git a/classes/blackjack.rb b/classes/blackjack.rb index 884148a..4a670dc 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -31,15 +31,21 @@ def initialize(player_hand, dealer_hand) @player_hand = Hand.new(player_hand) @dealer_hand = Dealer.new(dealer_hand) build_deck() + start_game if player_hand.empty? end def start_game + 2.times do + give_card(@player_hand) + give_card(@dealer_hand) + end end def build_deck VALUES.keys.each do |key| @deck[key] = SUITS.dup end + @player_hand.cards.each {|card| delete(card.face, card.suit)} @dealer_hand.cards.each {|card| delete(card.face, card.suit)} end diff --git a/classes/hand.rb b/classes/hand.rb index 433223a..4a4b9db 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -5,7 +5,7 @@ class Hand # [[face, suit][face, suit]] def initialize(cards = []) - @cards = get_cards(cards) unless cards.empty? + @cards = get_cards(cards) end # add_card, count value, see_cards, diff --git a/views/blackjack.erb b/views/blackjack.erb index 14aeb7e..5373475 100644 --- a/views/blackjack.erb +++ b/views/blackjack.erb @@ -1,3 +1,6 @@ +Player:<%= player_hand %>
+Dealer:<%= dealer_hand %>
+
From aa27aca9c2f1dd57b38090b6da9bb9be43d623f0 Mon Sep 17 00:00:00 2001 From: Leo Ahnn Date: Fri, 22 Jul 2016 16:54:28 -0400 Subject: [PATCH 08/13] added stay --- app.rb | 9 ++--- classes/blackjack.rb | 70 +++++++++++++++++++++++-------------- classes/dealer.rb | 4 +-- classes/hand.rb | 7 ---- helpers/blackjack_helper.rb | 11 ++++++ views/blackjack.erb | 10 +++++- 6 files changed, 70 insertions(+), 41 deletions(-) diff --git a/app.rb b/app.rb index c12dc84..82b6bc2 100644 --- a/app.rb +++ b/app.rb @@ -18,7 +18,7 @@ # if game.over? # erb :blackjack_finish, locals: { conditions:conditions } # else - erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand } + erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand} # end end @@ -27,13 +27,14 @@ game.give_card(game.player_hand) #check for end save_game(game) - # add_card - + redirect ('blackjack') end post '/blackjack/stay' do - + game = make_blackjack + game.dealer_play + save_game(game) redirect ('blackjack') end diff --git a/classes/blackjack.rb b/classes/blackjack.rb index 4a670dc..e9deb70 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -3,8 +3,8 @@ require_relative 'dealer' class Blackjack - #delete deck! - attr_reader :player_hand, :dealer_hand, :deck + + attr_reader :player_hand, :dealer_hand SUITS = ["H", "S", "C", "D"] @@ -34,8 +34,40 @@ def initialize(player_hand, dealer_hand) start_game if player_hand.empty? end + def give_card(player) + face = @deck.keys.sample + suit = @deck[face].sample + delete(face, suit) + player.add_card(face, suit) + end + + def dealer_play + give_card(@dealer_hand) while @dealer_hand.decide_hit? + end_game + end + + def end_game + return "player" if win? + return "tie" if tie? + return "dealer" if lose? + end + + def over? + @player_hand.busted? || @player_hand.value == 21 || @dealer_hand.busted? + end + + def save + save = {} + dealer = @dealer_hand.cards.map { |card| [card.face, card.suit] } + player = @player_hand.cards.map { |card| [card.face, card.suit] } + save["dealer"] = dealer + save["player"] = player + save + end + + def start_game - 2.times do + 2.times do give_card(@player_hand) give_card(@dealer_hand) end @@ -50,36 +82,20 @@ def build_deck @dealer_hand.cards.each {|card| delete(card.face, card.suit)} end - def delete(face, suit) @deck[face].delete(suit) + @deck.delete(face) if @deck[face].empty? end - def give_card(player) - face = @deck.keys.sample - suit = @deck[face].sample - delete(face, suit) - player.add_card(face, suit) + def tie? + (@player_hand.busted && @player_hand.busted) || (@player_hand.value && @dealer_hand.value) end - # def finish - # return #dealer wins if @player_hand.busted? - # return #player wins if @dealer_hand.busted? - # return #player if @player_hand.hand_value > @dealer_hand.hand_value - # return #dealer hand - # end - -# (dealer)[[face, suit][face, suit]], -# (player)[[face,suit],[face,suit]] - - - def save - save = {} - dealer = @dealer_hand.cards.map { |card| [card.face, card.suit] } - player = @player_hand.cards.map { |card| [card.face, card.suit] } - save["dealer"] = dealer - save["player"] = player - save + def win? + (@player_hand.value > @dealer_hand.value) && !@player_hand.busted? end + def lose? + (@player_hand.value < @dealer_hand.value) || @player_hand.busted? + end end diff --git a/classes/dealer.rb b/classes/dealer.rb index 034a73d..6ba1b2c 100644 --- a/classes/dealer.rb +++ b/classes/dealer.rb @@ -2,8 +2,8 @@ class Dealer < Hand - def decide - add_card until hand_value > 16 + def decide_hit? + hand_value < 17 end end diff --git a/classes/hand.rb b/classes/hand.rb index 4a4b9db..a7a54e6 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -42,11 +42,4 @@ def busted? hand_value > 21 end - # def contains?(face, suit) - # @cards.each do |card| - # return true if card.face == face && card.suit == suit - # end - # false - # end - end diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb index 6eff590..498e95c 100644 --- a/helpers/blackjack_helper.rb +++ b/helpers/blackjack_helper.rb @@ -12,10 +12,21 @@ def get_dealer_hand session["dealer"] end + def get_player_score + session["player_score"] + end + + def get_dealer_score + session["dealer_score"] + end + + def save_game(game) state = game.save session["player"] = state["player"] session["dealer"] = state["dealer"] + # session["player"] = state["player_score"] + # session["dealer"] = state["dealer_score"] end diff --git a/views/blackjack.erb b/views/blackjack.erb index 5373475..ef9a9bb 100644 --- a/views/blackjack.erb +++ b/views/blackjack.erb @@ -7,4 +7,12 @@ Dealer:<%= dealer_hand %>

-
\ No newline at end of file + + +<% if session["conditions"]%> + +<% end %> + +<% if session["conditions"]%> + +<% end %> From f0a1ac625ebfd2b191b6400b874e08519d824b34 Mon Sep 17 00:00:00 2001 From: Mike Lee Date: Fri, 22 Jul 2016 17:17:31 -0400 Subject: [PATCH 09/13] working on bets --- app.rb | 9 ++++----- classes/blackjack.rb | 8 ++++---- views/blackjack.erb | 2 ++ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app.rb b/app.rb index 82b6bc2..c6b52ef 100644 --- a/app.rb +++ b/app.rb @@ -13,13 +13,11 @@ end get '/blackjack' do + winner = session[:condition] game = make_blackjack save_game(game) unless get_player_hand - # if game.over? - # erb :blackjack_finish, locals: { conditions:conditions } - # else - erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand} - # end + winner = game.end_game if game.over? + erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand, condition: winner} end post '/blackjack/hit' do @@ -35,6 +33,7 @@ post '/blackjack/stay' do game = make_blackjack game.dealer_play + session[:condition] = game.end_game save_game(game) redirect ('blackjack') end diff --git a/classes/blackjack.rb b/classes/blackjack.rb index e9deb70..e990565 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -53,7 +53,7 @@ def end_game end def over? - @player_hand.busted? || @player_hand.value == 21 || @dealer_hand.busted? + @player_hand.busted? || @player_hand.hand_value == 21 || @dealer_hand.busted? end def save @@ -88,14 +88,14 @@ def delete(face, suit) end def tie? - (@player_hand.busted && @player_hand.busted) || (@player_hand.value && @dealer_hand.value) + (@player_hand.busted? && @dealer_hand.busted?) || (@player_hand.hand_value == @dealer_hand.hand_value) end def win? - (@player_hand.value > @dealer_hand.value) && !@player_hand.busted? + ((@player_hand.hand_value > @dealer_hand.hand_value) || @dealer_hand.busted?) && !@player_hand.busted? end def lose? - (@player_hand.value < @dealer_hand.value) || @player_hand.busted? + ((@player_hand.hand_value < @dealer_hand.hand_value) || @player_hand.busted?) && !@dealer_hand.busted? end end diff --git a/views/blackjack.erb b/views/blackjack.erb index ef9a9bb..73b5915 100644 --- a/views/blackjack.erb +++ b/views/blackjack.erb @@ -1,6 +1,8 @@ Player:<%= player_hand %>
Dealer:<%= dealer_hand %>
+<%= condition %> +
From 5cbadc68953eaba0b9fc7cb4464e0f6f9650e8ba Mon Sep 17 00:00:00 2001 From: Philip Cole Johnson Date: Fri, 22 Jul 2016 14:40:21 -0700 Subject: [PATCH 10/13] Started adding bets --- app.rb | 19 +++++++++++++++++-- classes/hand.rb | 5 +++-- helpers/blackjack_helper.rb | 9 +++++++++ views/bet.erb | 5 +++++ 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 views/bet.erb diff --git a/app.rb b/app.rb index c6b52ef..413e9ea 100644 --- a/app.rb +++ b/app.rb @@ -9,15 +9,30 @@ enable :sessions get '/' do - "

Welcome!


Play blackjack!" + "

Welcome!


Play blackjack!" +end + +get '/blackjack/bet' do + game = make_blackjack + bank = get_bank + erb :bet +end + +post '/blackjack/bet' do + session["bet"] = params[:bet] + bet = get_bet + bank = get_bank + + redirect ('blackjack') end get '/blackjack' do winner = session[:condition] + game = make_blackjack save_game(game) unless get_player_hand winner = game.end_game if game.over? - erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand, condition: winner} + erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand, condition: winner, bet: bet} end post '/blackjack/hit' do diff --git a/classes/hand.rb b/classes/hand.rb index a7a54e6..171d419 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -1,11 +1,12 @@ class Hand - attr_reader :cards + attr_reader :cards, :bank # [[face, suit][face, suit]] - def initialize(cards = []) + def initialize(cards = [], bank = 1000) @cards = get_cards(cards) + @bank = bank end # add_card, count value, see_cards, diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb index 498e95c..37ec90b 100644 --- a/helpers/blackjack_helper.rb +++ b/helpers/blackjack_helper.rb @@ -20,11 +20,20 @@ def get_dealer_score session["dealer_score"] end + def get_bet + session["bet"] + end + + def get_bank + session["bank"] + end + def save_game(game) state = game.save session["player"] = state["player"] session["dealer"] = state["dealer"] + session["bank"] = game.player_hand.bank # session["player"] = state["player_score"] # session["dealer"] = state["dealer_score"] end diff --git a/views/bet.erb b/views/bet.erb new file mode 100644 index 0000000..36e6660 --- /dev/null +++ b/views/bet.erb @@ -0,0 +1,5 @@ +What's your bet? +
+ + +
\ No newline at end of file From 7be4a170a7a28867bda6ce406651bb331ab88be6 Mon Sep 17 00:00:00 2001 From: Leo Ahnn Date: Fri, 22 Jul 2016 18:31:14 -0400 Subject: [PATCH 11/13] working on making bank --- app.rb | 30 +++++++++++++++--------------- classes/blackjack.rb | 22 ++++++++++++++-------- classes/hand.rb | 11 +++++++++-- helpers/blackjack_helper.rb | 17 ++++++++++------- views/bet.erb | 10 ++++++++-- views/blackjack.erb | 21 +++++++++++++++++---- 6 files changed, 73 insertions(+), 38 deletions(-) diff --git a/app.rb b/app.rb index 413e9ea..13be13b 100644 --- a/app.rb +++ b/app.rb @@ -14,41 +14,41 @@ get '/blackjack/bet' do game = make_blackjack - bank = get_bank + save_game(game) erb :bet end post '/blackjack/bet' do session["bet"] = params[:bet] - bet = get_bet - bank = get_bank - - redirect ('blackjack') + if enough_money?(get_bet) + redirect('blackjack') + else + redirect('blackjack/bet') + end end get '/blackjack' do winner = session[:condition] - game = make_blackjack save_game(game) unless get_player_hand - winner = game.end_game if game.over? - erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand, condition: winner, bet: bet} + if game.over? + winner = game.end_game(get_bet) + save_game(game) + end + erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand, condition: winner} end post '/blackjack/hit' do game = make_blackjack game.give_card(game.player_hand) - #check for end save_game(game) - # add_card - - redirect ('blackjack') + redirect('blackjack') end post '/blackjack/stay' do game = make_blackjack - game.dealer_play - session[:condition] = game.end_game + game.dealer_play(get_bet) + session[:condition] = game.end_game(get_bet) save_game(game) - redirect ('blackjack') + redirect('blackjack') end diff --git a/classes/blackjack.rb b/classes/blackjack.rb index e990565..76e39a0 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -24,11 +24,11 @@ class Blackjack "K": 10 } - def initialize(player_hand, dealer_hand) + def initialize(player_hand, dealer_hand, bank) player_hand ||= [] dealer_hand ||= [] @deck = {} - @player_hand = Hand.new(player_hand) + @player_hand = Hand.new(player_hand, bank) @dealer_hand = Dealer.new(dealer_hand) build_deck() start_game if player_hand.empty? @@ -41,15 +41,21 @@ def give_card(player) player.add_card(face, suit) end - def dealer_play + def dealer_play(bet) give_card(@dealer_hand) while @dealer_hand.decide_hit? - end_game + end_game(bet) end - def end_game - return "player" if win? - return "tie" if tie? - return "dealer" if lose? + def end_game(bet) + if win? + @player_hand.make_bank(bet) + return "player" + elsif tie? + return "tie" + elsif lose? + @player_hand.lose_bank(bet) + return "dealer" + end end def over? diff --git a/classes/hand.rb b/classes/hand.rb index 171d419..d4865d5 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -4,9 +4,9 @@ class Hand # [[face, suit][face, suit]] - def initialize(cards = [], bank = 1000) + def initialize(cards = [], bank = nil) @cards = get_cards(cards) - @bank = bank + @bank ||= 1000 end # add_card, count value, see_cards, @@ -16,6 +16,13 @@ def get_cards(cards) cards.map { |card| Card.new(card[0], card[1])} end + def make_bank(bet) + @bank += bet + end + + def lose_bank(bet) + @bank -= bet + end def ace_logic(value, aces) while value > 21 && aces > 0 diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb index 37ec90b..d99b0a7 100644 --- a/helpers/blackjack_helper.rb +++ b/helpers/blackjack_helper.rb @@ -1,7 +1,7 @@ module BlackjackHelper def make_blackjack - Blackjack.new(get_player_hand, get_dealer_hand) + Blackjack.new(get_player_hand, get_dealer_hand, get_bank) end def get_player_hand @@ -21,11 +21,16 @@ def get_dealer_score end def get_bet - session["bet"] + session["bet"].to_i end def get_bank - session["bank"] + session["bank"].to_i + end + + def enough_money?(bet) + bet ||= 0 + session["bank"].to_i >= bet.to_i end @@ -34,9 +39,7 @@ def save_game(game) session["player"] = state["player"] session["dealer"] = state["dealer"] session["bank"] = game.player_hand.bank - # session["player"] = state["player_score"] - # session["dealer"] = state["dealer_score"] + session["player_score"] = game.player_hand.hand_value + session["dealer_score"] = game.dealer_hand.hand_value end - - end diff --git a/views/bet.erb b/views/bet.erb index 36e6660..c34bcef 100644 --- a/views/bet.erb +++ b/views/bet.erb @@ -1,5 +1,11 @@ What's your bet? -
+ -
\ No newline at end of file + + +<%unless enough_money?(get_bet)%> + +

Not enough money!

+ +<%end%> diff --git a/views/blackjack.erb b/views/blackjack.erb index 73b5915..e2047b5 100644 --- a/views/blackjack.erb +++ b/views/blackjack.erb @@ -1,7 +1,13 @@ Player:<%= player_hand %>
+Total:<%= get_player_score %> +
Dealer:<%= dealer_hand %>
+Total:<%= get_dealer_score %> +
+Bank: <%= get_bank %> +Bet: <%= get_bet %> -<%= condition %> +<% if condition%>
@@ -11,10 +17,17 @@ Dealer:<%= dealer_hand %>
-<% if session["conditions"]%> -<% end %> +<% else %> + +<%= condition %> +
+ +
+
+
+ +
-<% if session["conditions"]%> <% end %> From a42229cf3a90e943ee34e3dbd1a76b35e701434a Mon Sep 17 00:00:00 2001 From: Mike Lee Date: Fri, 22 Jul 2016 19:16:33 -0400 Subject: [PATCH 12/13] debugging --- app.rb | 5 +++++ classes/hand.rb | 3 ++- helpers/blackjack_helper.rb | 13 ++++++++++++- views/blackjack.erb | 9 ++------- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/app.rb b/app.rb index 13be13b..dd4038e 100644 --- a/app.rb +++ b/app.rb @@ -27,6 +27,11 @@ end end +post '/blackjack/reset' do + reset + redirect('blackjack/bet') +end + get '/blackjack' do winner = session[:condition] game = make_blackjack diff --git a/classes/hand.rb b/classes/hand.rb index d4865d5..783daed 100644 --- a/classes/hand.rb +++ b/classes/hand.rb @@ -6,7 +6,8 @@ class Hand def initialize(cards = [], bank = nil) @cards = get_cards(cards) - @bank ||= 1000 + bank ||= 1000 + @bank = bank end # add_card, count value, see_cards, diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb index d99b0a7..f32ec0d 100644 --- a/helpers/blackjack_helper.rb +++ b/helpers/blackjack_helper.rb @@ -1,7 +1,12 @@ module BlackjackHelper def make_blackjack - Blackjack.new(get_player_hand, get_dealer_hand, get_bank) + if session["bank"].nil? + bank = nil + else + bank = get_bank + end + Blackjack.new(get_player_hand, get_dealer_hand, bank) end def get_player_hand @@ -29,10 +34,16 @@ def get_bank end def enough_money?(bet) + binding.pry bet ||= 0 session["bank"].to_i >= bet.to_i end + def reset + session["player"] = nil + session["dealer"] = nil + session["condition"] = nil + end def save_game(game) state = game.save diff --git a/views/blackjack.erb b/views/blackjack.erb index e2047b5..b8142ee 100644 --- a/views/blackjack.erb +++ b/views/blackjack.erb @@ -9,14 +9,9 @@ Bet: <%= get_bet %> <% if condition%> -
- + +
-
-
- -
- <% else %> From 6b006b2bb2cd837959fa56f2b1fa17dbb7f6aee0 Mon Sep 17 00:00:00 2001 From: Philip Cole Johnson Date: Fri, 22 Jul 2016 17:01:36 -0700 Subject: [PATCH 13/13] Fix winning conditions --- app.rb | 9 +++++---- classes/blackjack.rb | 17 ++++++++++++----- helpers/blackjack_helper.rb | 1 - views/bet.erb | 2 ++ views/blackjack.erb | 12 +++++++++--- views/layout.erb | 2 ++ 6 files changed, 30 insertions(+), 13 deletions(-) diff --git a/app.rb b/app.rb index dd4038e..25b680c 100644 --- a/app.rb +++ b/app.rb @@ -36,8 +36,9 @@ winner = session[:condition] game = make_blackjack save_game(game) unless get_player_hand - if game.over? - winner = game.end_game(get_bet) + if game.over? || winner + winner = game.end_game + game.update_bank(get_bet) save_game(game) end erb :blackjack, locals: { player_hand: get_player_hand, dealer_hand: get_dealer_hand, condition: winner} @@ -52,8 +53,8 @@ post '/blackjack/stay' do game = make_blackjack - game.dealer_play(get_bet) - session[:condition] = game.end_game(get_bet) + game.dealer_play + session[:condition] = game.end_game save_game(game) redirect('blackjack') end diff --git a/classes/blackjack.rb b/classes/blackjack.rb index 76e39a0..79a7cc4 100644 --- a/classes/blackjack.rb +++ b/classes/blackjack.rb @@ -32,6 +32,7 @@ def initialize(player_hand, dealer_hand, bank) @dealer_hand = Dealer.new(dealer_hand) build_deck() start_game if player_hand.empty? + #@over = false end def give_card(player) @@ -41,23 +42,29 @@ def give_card(player) player.add_card(face, suit) end - def dealer_play(bet) + def dealer_play give_card(@dealer_hand) while @dealer_hand.decide_hit? - end_game(bet) + end_game end - def end_game(bet) + def end_game if win? - @player_hand.make_bank(bet) return "player" elsif tie? return "tie" elsif lose? - @player_hand.lose_bank(bet) return "dealer" end end + def update_bank(bet) + if win? + @player_hand.make_bank(bet) + elsif lose? + @player_hand.lose_bank(bet) + end + end + def over? @player_hand.busted? || @player_hand.hand_value == 21 || @dealer_hand.busted? end diff --git a/helpers/blackjack_helper.rb b/helpers/blackjack_helper.rb index f32ec0d..a79165d 100644 --- a/helpers/blackjack_helper.rb +++ b/helpers/blackjack_helper.rb @@ -34,7 +34,6 @@ def get_bank end def enough_money?(bet) - binding.pry bet ||= 0 session["bank"].to_i >= bet.to_i end diff --git a/views/bet.erb b/views/bet.erb index c34bcef..dfe2045 100644 --- a/views/bet.erb +++ b/views/bet.erb @@ -4,6 +4,8 @@ What's your bet? +You have $<%= get_bank %> + <%unless enough_money?(get_bet)%>

Not enough money!

diff --git a/views/blackjack.erb b/views/blackjack.erb index b8142ee..cf6ac63 100644 --- a/views/blackjack.erb +++ b/views/blackjack.erb @@ -1,12 +1,19 @@ Player:<%= player_hand %>
Total:<%= get_player_score %>
-Dealer:<%= dealer_hand %>
+ +<% if condition %> +Dealer: <%= dealer_hand %>
Total:<%= get_dealer_score %> +<% else %> +Dealer: <%= dealer_hand[1] %>
+<% end %>
Bank: <%= get_bank %> Bet: <%= get_bet %> - +

+<%= condition %> +

<% if condition%>
@@ -15,7 +22,6 @@ Bet: <%= get_bet %> <% else %> -<%= condition %>
diff --git a/views/layout.erb b/views/layout.erb index 9064883..d00358c 100644 --- a/views/layout.erb +++ b/views/layout.erb @@ -1,6 +1,8 @@ + + Sinatra Blackjack