Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
source 'https://rubygems.org'

gem 'sinatra'
gem 'sinatra-contrib'
gem 'pry-byebug'
44 changes: 44 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -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.0)
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.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)

PLATFORMS
ruby

DEPENDENCIES
pry-byebug
sinatra
sinatra-contrib

BUNDLED WITH
1.13.6
95 changes: 95 additions & 0 deletions app.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#!/usr/bin/env ruby
require 'sinatra'
require 'sinatra/reloader'
require_relative "./helpers/bet_helper"
require_relative "./helpers/cards_helper"
require_relative "./helpers/blackjack_helper"
require_relative "./helpers/dealer_helper"

enable :sessions
helpers BetHelper, CardsHelper, BlackjackHelper, DealerHelper

get '/' do
session.clear if params[:reset]

bankroll = load_bankroll
erb :landing, locals: { bankroll: bankroll}
end

get '/blackjack' do
place_bet( params[:bet] ) unless params[:bet].nil?
bet_placed = load_bet

if bet_placed.nil? && session["player_cards"].nil?
game_start

redirect to('game_over') if blackjack?(session['player_cards'])
redirect to('game_over') if blackjack?(session['dealer_cards'])
end

if params[:hit]
hit_me(session['player_cards'])
redirect to('game_over') if busted?(session['player_cards'])
end

if params[:double]
double_bet
hit_me(session['player_cards'])
redirect to('game_over')
end

erb :blackjack, locals: {
bet_placed: bet_placed,
player_cards: session['player_cards'],
dealer_cards: session['dealer_cards'],

}
end

get '/blackjack2' do
unless session["player2_cards"]
pair_setup
redirect to('blackjack') if blackjack?(session['player2_cards'])
end

if params[:hit]
hit_me(session['player2_cards'])
p busted?(session['player2_cards'])
redirect to('blackjack') if busted?(session['player2_cards'])
end


erb :blackjack2,locals: {
player_cards: session['player2_cards'],
dealer_cards: session['dealer_cards'],
}
end

get '/game_over' do
unless premature_win?
dealer_play
end

outcome = get_outcome
payout_bet

p_cards = session['player_cards']
d_cards = session['dealer_cards']
bet = session['bet']
bankroll = session['bankroll']
p2_cards = session["player2_cards"]

session.clear
session['bankroll'] = bankroll

erb :game_over, locals: {
outcome: outcome,
player_cards: p_cards,
player2_cards: p2_cards,
dealer_cards: d_cards,
player_points: sum_points( p_cards ),
dealer_points: sum_points( d_cards ),
bet: bet,
bankroll: bankroll
}
end
69 changes: 69 additions & 0 deletions helpers/bet_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# show current bankroll (blackjack)
# How much do you want to bet?
## display feedback - Dont have enough, okay deal hand

# deal hand
# show players two cards
# show one dealer card, one "face down"
# check if player has 21
# check if dealer has 21
# if yes - game over, player win or dealer win or draw
# handle payout
# update bankroll
#take to home screen
# if no - get players move (display partial on bottom of blackjack)
# stay or hit
# if stay or bust, dealers turn
# else get another player move - > request view again

# dealers turn - if player busted: they lose, show dealers hand
# else if dealer is under 17 points - dealer draws a card
# check again
# if dealer is 17 or above then game over,
# check player and dealer hands, higher hand wins unless
#bust

module BetHelper
def load_bankroll
session['bankroll'] ||= "1000"
end

def place_bet(number)
return nil if number.to_i > session['bankroll'].to_i
return nil if number.to_i <= 0

session['bankroll'] = (session['bankroll'].to_i - number.to_i).to_s
session['bet'] = number
end

def load_bet
session['bet']
end

def bet_reset
session['bet'] = nil
end

def payout_bet
if won?
if blackjack?(session['player_cards'])
session['bankroll'] = (session['bankroll'].to_i + session['bet'].to_i*2.5).to_s
else
session['bankroll'] = (session['bankroll'].to_i + session['bet'].to_i*2).to_s
end
elsif draw?
session['bankroll'] = (session['bankroll'].to_i + session['bet'].to_i).to_s
end
end

def double_bet
bet = session["bet"].to_i
if bet > session["bankroll"].to_i
place_bet(session["bankroll"])
session["bet"] = session["bet"].to_i + bet
else
place_bet(bet)
session['bet'] = (bet*2).to_s
end
end
end
75 changes: 75 additions & 0 deletions helpers/blackjack_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
module BlackjackHelper
POINTS = {'J' => 10, 'K' => 10, 'Q' => 10, 'A' => 11 }

def game_start
player_cards = [draw_from_deck,draw_from_deck]
dealer_cards = [draw_from_deck,draw_from_deck]
save_cards(player_cards,dealer_cards)
end

def hit_me(cards)
cards << draw_from_deck
end

def get_points(cards)
cards.map do |card|
if POINTS[ card[0] ].nil?
card[0].to_i
else
POINTS[ card[0] ]
end
end
end

def blackjack?(cards)
sum_points( cards ) == 21
end

def busted?(cards)
sum_points( cards ) > 21
end

def sum_points(cards)
points = get_points(cards)

ace_i = 0
while points.inject(:+) > 21 && !!ace_i
ace_i = points.find_index(11)
points[ace_i] = 1 unless ace_i.nil?
end

points.inject(:+)
end

def premature_win?
blackjack?(session['player_cards']) ||
blackjack?(session['dealer_cards']) ||
busted?(session['player_cards'])
end

def get_outcome
return 'lost' if lost?
return 'won' if won?
return 'draw'
end

def won?
return false if busted?(session['player_cards'])
busted?(session['dealer_cards']) ||
sum_points(session['player_cards']) >
sum_points(session['dealer_cards'])
end

def lost?
return false if busted?(session['dealer_cards'])
busted?(session['player_cards']) ||
sum_points(session['player_cards']) <
sum_points(session['dealer_cards'])
end

def draw?
sum_points(session['player_cards']) ==
sum_points(session['dealer_cards'])
end

end
48 changes: 48 additions & 0 deletions helpers/cards_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
module CardsHelper

SUITS = ['clubs', 'diamonds', 'spades', 'hearts']

DECK = {
'2' => SUITS.dup, '3' => SUITS.dup, '4' => SUITS.dup,
'5' => SUITS.dup, '6' => SUITS.dup, '7' => SUITS.dup,
'8' => SUITS.dup, '9' => SUITS.dup, '10' => SUITS.dup,
'J' => SUITS.dup, 'Q' => SUITS.dup, 'K' => SUITS.dup,
'A' => SUITS.dup
}

def load_deck
session["deck"] ||= generate_deck
end

def generate_deck
deck = DECK.dup

deck.each do |value, suits|
deck[value] = suits.dup
end
deck
end

def draw_from_deck
session["deck"] ||= load_deck
value = session["deck"].keys.sample
suit = session["deck"][value].shuffle!.pop

session['deck'].delete(value) if session["deck"][value].empty?
session['deck'] = nil if session['deck'].empty?

[value, suit]
end

def pair_setup
session["player2_cards"] = session["player_cards"][1].dup
hit_me(session["player2_cards"])
session["player_cards"].pop
hit_me(session["player_cards"])
end

def save_cards(player_cards, dealer_cards)
session["player_cards"] = player_cards
session["dealer_cards"] = dealer_cards
end
end
7 changes: 7 additions & 0 deletions helpers/dealer_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module DealerHelper
def dealer_play
while sum_points(session['dealer_cards']) < 17
hit_me(session['dealer_cards'])
end
end
end
Loading