diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/.DS_Store differ
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..15ebcea
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,7 @@
+source 'https://rubygems.org'
+gem 'sinatra'
+gem 'sinatra-contrib'
+
+group :development do
+ gem 'pry-byebug'
+end
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000..231233a
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,44 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ backports (3.6.8)
+ byebug (9.0.6)
+ coderay (1.1.1)
+ method_source (0.8.2)
+ multi_json (1.12.1)
+ pry (0.10.4)
+ coderay (~> 1.1.0)
+ method_source (~> 0.8.1)
+ slop (~> 3.4)
+ pry-byebug (3.4.2)
+ byebug (~> 9.0)
+ pry (~> 0.10)
+ rack (1.6.5)
+ rack-protection (1.5.3)
+ rack
+ rack-test (0.6.3)
+ rack (>= 1.0)
+ sinatra (1.4.8)
+ 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.6)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ pry-byebug
+ sinatra
+ sinatra-contrib
+
+BUNDLED WITH
+ 1.13.7
diff --git a/README.md b/README.md
index 3f18110..e51b1dc 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,24 @@
-# assignment_blackjack
-Hit me baby one more time?
+# Simple Black Jack Game in Sinatra
-[A Blackjack game using the Ruby Sinatra web application framework which uses object oriented programming, cookies, sessions, and JSON from the Viking Code School](http://www.vikingcodeschool.com)
+ The goal of this simple Blackjack game is to focus on the function of the application rather than styling. The game is limited ot it's simplest logic - hitting, staying, making bets. (no split, double betting etc.)
+
+
+
+
+## Getting Started
+
+If you want to quick run some the examples to see the code in action, and you have installed Ruby and Rails, run
+```
+$ ruby app_bj_2.rb
+```
+
+Open browser on http://localhost:4567/
+
+## Authors
+
+* **Dariusz Biskupski** - *Initial work* - https://dariuszbiskupski.com
+
+
+## Acknowledgments
+
+The assignment is created for [Viking Code School](https://www.vikingcodeschool.com/)
diff --git a/app_bj_2.rb b/app_bj_2.rb
new file mode 100644
index 0000000..1fee7e4
--- /dev/null
+++ b/app_bj_2.rb
@@ -0,0 +1,162 @@
+
+require 'erb'
+require 'pry-byebug'
+require "bundler/setup"
+require 'sinatra'
+require 'sinatra/reloader' if development?
+require './helpers/bj_helper_2.rb'
+require 'json'
+
+helpers BJHelper
+
+enable :sessions
+set :session_secret, '*&(^B234'
+
+get "/" do
+ erb :home
+end
+
+get '/blackjack/bet' do
+ dealer_hand = BJHelper::Dealer.new(session[:dealer_hand]).load_dealer_hand
+ player = BJHelper::Player.new(session[:player_hand], session[:player_bankroll])
+ player_bankroll = player.bankroll
+ player_hand = player.load_player_hand
+ session[:player_bankroll] = player_bankroll.to_json
+ session[:dealer_hand] = dealer_hand.to_json
+ session[:player_hand] = player_hand.to_json
+ erb :"blackjack/bet", locals: { player_bankroll: player_bankroll }
+end
+
+post '/bet' do
+ dealer_hand = BJHelper::Dealer.new(session[:dealer_hand]).load_dealer_hand
+ player = BJHelper::Player.new(session[:player_hand], session[:player_bankroll])
+ player_bankroll = player.bankroll
+ player_hand = player.load_player_hand
+ player_bet = params[:amount].to_i
+ if player_bet < player_bankroll
+ session[:dealer_hand] = dealer_hand.to_json
+ session[:player_hand] = player_hand.to_json
+ player_bankroll = (player_bankroll - player_bet)
+ session[:player_bankroll] = player_bankroll.to_json
+ session[:player_bet] = player_bet.to_json
+ erb :"blackjack/hit", locals: { player_bet: player_bet, player_bankroll: player_bankroll, dealer_hand: dealer_hand, player_hand: player_hand }
+ else
+ player_bet = 0
+ session[:player_bet] = player_bet.to_json
+ erb :"blackjack/bet", locals: { player_bet: player_bet, player_bankroll: player_bankroll, dealer_hand: dealer_hand, player_hand: player_hand }
+ end
+end
+
+get '/blackjack/hit' do
+ dealer_hand = BJHelper::Dealer.new(session[:dealer_hand]).load_dealer_hand
+ player = BJHelper::Player.new(session[:player_hand], session[:player_bankroll])
+ player_bankroll = player.bankroll
+ player_hand = player.load_player_hand
+ player_bet = session[:player_bet]
+ session[:dealer_hand] = dealer_hand.to_json
+ session[:player_hand] = player_hand.to_json
+ session[:player_bankroll] = player_bankroll.to_json
+ erb :"blackjack/hit", locals: { player_bet: player_bet, player_bankroll: player_bankroll, dealer_hand: dealer_hand, player_hand: player_hand }
+end
+
+post '/hit' do
+ dealer_hand = BJHelper::Dealer.new(session[:dealer_hand]).load_dealer_hand
+ player = BJHelper::Player.new(session[:player_hand], session[:player_bankroll])
+ player_bankroll = player.bankroll
+ player_hand = player.load_player_hand
+ player_bet = session[:player_bet]
+ deck = BJHelper::Deck.new
+ if deck.checking_points(player_hand) >= 21
+ dealer_hand << deck.deal_hand
+ session[:dealer_hand] = dealer_hand.to_json
+ session[:player_hand] = player_hand.to_json
+ session[:player_bankroll] = player_bankroll.to_json
+ erb :"blackjack/stay", locals: { player_bet: player_bet, player_bankroll: player_bankroll,dealer_hand: dealer_hand, player_hand: player_hand }
+ redirect to("/blackjack/stay")
+ else
+ player_hand << deck.deal_hand
+ session[:dealer_hand] = dealer_hand.to_json
+ session[:player_hand] = player_hand.to_json
+ session[:player_bankroll] = player_bankroll.to_json
+ if deck.checking_points(player_hand) >= 21
+ erb :"blackjack/stay", locals: { player_bet: player_bet, player_bankroll: player_bankroll,dealer_hand: dealer_hand, player_hand: player_hand }
+ redirect to("/blackjack/stay")
+ else
+ erb :"blackjack/hit", locals: { player_bet: player_bet, player_bankroll: player_bankroll,dealer_hand: dealer_hand, player_hand: player_hand }
+ end
+ end
+end
+
+get '/blackjack/stay' do
+ dealer_hand = BJHelper::Dealer.new(session[:dealer_hand]).load_dealer_hand
+ player = BJHelper::Player.new(session[:player_hand], session[:player_bankroll])
+ player_bankroll = player.bankroll
+ player_hand = player.load_player_hand
+ player_bet = session[:player_bet]
+ session[:dealer_hand] = dealer_hand.to_json
+ session[:player_hand] = player_hand.to_json
+ session[:player_bankroll] = player_bankroll.to_json
+ erb :"blackjack/stay", locals: { player_bet: player_bet, player_bankroll: player_bankroll, dealer_hand: dealer_hand, player_hand: player_hand }
+end
+
+post '/stay' do
+ dealer_hand = BJHelper::Dealer.new(session[:dealer_hand]).load_dealer_hand
+ player = BJHelper::Player.new(session[:player_hand], session[:player_bankroll])
+ player_bankroll = player.bankroll
+ player_hand = player.load_player_hand
+ player_bet = JSON.parse(session[:player_bet],:quirks_mode => true)
+ deck = BJHelper::Deck.new
+ while deck.checking_points(dealer_hand) < 17
+ dealer_hand << deck.deal_hand
+ end
+ who_won = deck.check_who_won(player_hand, dealer_hand)
+ if who_won == -1
+ player_bet = 0
+ player_bankroll = player_bankroll - player_bet
+ session[:player_bankroll] = player_bankroll.to_json
+ session[:player_bet] = player_bet.to_json
+ elsif who_won == 0
+ player_bankroll = player_bankroll + player_bet
+ session[:player_bankroll] = player_bankroll.to_json
+ player_bet = 0
+ session[:player_bet] = player_bet.to_json
+ else
+ player_bankroll = player_bankroll + player_bet*2
+ session[:player_bankroll] = player_bankroll.to_json
+ player_bet = 0
+ session[:player_bet] = player_bet.to_json
+ end
+ session[:who_won] = who_won.to_json
+ session[:dealer_hand] = dealer_hand.to_json
+ session[:player_hand] = player_hand.to_json
+ erb :"blackjack/results", locals: { player_bet: player_bet, player_bankroll: player_bankroll, who_won: who_won, dealer_hand: dealer_hand, player_hand: player_hand }
+ redirect to("/blackjack/results")
+end
+
+get '/blackjack/results' do
+ dealer_hand = BJHelper::Dealer.new(session[:dealer_hand]).load_dealer_hand
+ player = BJHelper::Player.new(session[:player_hand], session[:player_bankroll])
+ player_bankroll = player.bankroll
+ player_hand = player.load_player_hand
+ player_bet = JSON.parse(session[:player_bet],:quirks_mode => true)
+ who_won = JSON.parse(session[:who_won],:quirks_mode => true)
+ erb :"blackjack/results", locals: { player_bet: player_bet, player_bankroll: player_bankroll,who_won: who_won, dealer_hand: dealer_hand, player_hand: player_hand }
+end
+
+post '/new_game' do
+ session.delete(:dealer_hand)
+ session.delete(:player_hand)
+ session.delete(:player_bankroll)
+ session.delete(:who_won)
+ session[:player_bet] = 0
+ redirect to("/blackjack/bet")
+end
+
+post '/continue_game' do
+ session.delete(:dealer_hand)
+ session.delete(:player_hand)
+ session.delete(:who_won)
+ session[:player_bet] = 0
+ redirect to("/blackjack/bet")
+end
+
diff --git a/black_jack.png b/black_jack.png
new file mode 100644
index 0000000..2dd3ec5
Binary files /dev/null and b/black_jack.png differ
diff --git a/helpers/.DS_Store b/helpers/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/helpers/.DS_Store differ
diff --git a/helpers/bj_helper_2.rb b/helpers/bj_helper_2.rb
new file mode 100644
index 0000000..812a372
--- /dev/null
+++ b/helpers/bj_helper_2.rb
@@ -0,0 +1,91 @@
+
+module BJHelper
+
+ class Player
+
+ attr_accessor :bankroll
+
+ def initialize(session_hand, bankroll) #make it to_json in app
+ session_hand == nil ? @session_hand = nil : @session_hand = JSON.parse(session_hand,:quirks_mode => true)
+ bankroll.nil? ? @bankroll = 1000 : @bankroll = JSON.parse(bankroll,:quirks_mode => true)
+ @decks = Deck.new
+ end
+
+ def load_player_hand
+ @session_hand ? @session_hand : [@decks.deal_hand, @decks.deal_hand]
+ end
+
+ end
+
+ class Dealer
+
+ def initialize(session_hand) #make it to_json in app
+ session_hand == nil ? @session_hand = nil : @session_hand = JSON.parse(session_hand,:quirks_mode => true)
+ @decks = Deck.new
+ end
+
+ def load_dealer_hand
+ @session_hand ? @session_hand : [@decks.deal_hand, @decks.deal_hand]
+ end
+
+ end
+
+ class Deck
+
+ def initialize #make it to_json in app
+ @five_decks = create_decks # if @session_hash.decks == nil || @session_hash.decks == []
+ end
+
+ def decks_builder
+ [2,3,4,5,6,7,8,9,10, "J", "Q", "K", "A"].product(["Diamonds", "Hearts", "Clubs", "Spades"])
+ end
+
+ def create_decks
+ the_deck = []
+ 4.times { |i| the_deck += decks_builder }
+ the_deck.shuffle
+ end
+
+ def deal_hand
+ @five_decks.pop
+ end
+
+ def checking_points(current_hand)
+ total = 0
+ as_value = 0
+ current_hand.each do |arr|
+ if %w{J K Q}.include? arr[0]
+ total += 10
+ elsif "A" == arr[0]
+ total += 1
+ as_value += 10
+ else
+ total += arr[0]
+ end
+ end
+ puts "DBG: total = #{total.inspect}"
+ puts "DBG: match_ases_for_best_total(total, as_value) = #{match_ases_for_best_total(total, as_value).inspect}"
+ match_ases_for_best_total(total, as_value)
+ end
+
+ def match_ases_for_best_total(total, as_value)
+ if total <= 11
+ as_value != 0 ? total += 10 : total
+ else
+ total
+ end
+ end
+
+ def check_who_won(player_hand, dealer_hand)
+ if checking_points(player_hand) <= 21 && checking_points(dealer_hand) <= 21
+ checking_points(player_hand) <=> checking_points(dealer_hand)
+ elsif checking_points(player_hand) > 21
+ -1
+ else
+ 1
+ end
+ end
+
+ end
+
+end
\ No newline at end of file
diff --git a/views/.DS_Store b/views/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/views/.DS_Store differ
diff --git a/views/blackjack/.DS_Store b/views/blackjack/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/views/blackjack/.DS_Store differ
diff --git a/views/blackjack/bet.erb b/views/blackjack/bet.erb
new file mode 100644
index 0000000..33c546c
--- /dev/null
+++ b/views/blackjack/bet.erb
@@ -0,0 +1,12 @@
+
+
+
hidden card
+