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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
Hit me baby one more time?

[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)

Tamal Riedman
110 changes: 110 additions & 0 deletions helpers/blackjack_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
module DeckHelper

def create_deck
@deck = []
suits = ['Hearts', 'Spades', 'Clubs', 'Diamonds']
values = %w[Ace 2 3 4 5 6 7 8 9 10 Jack Queen King]
@deck = suits.product(values).shuffle!
end

def deal_card
@deck.pop
end

def new_hand
@winner = nil
@player_hand = []
@dealer_hand = []
@player_hand << deal_card
@dealer_hand << deal_card
@player_hand << deal_card
@dealer_hand << deal_card
session[:deck] = @deck
session[:dealer_hand] = @dealer_hand
session[:player_hand] = @player_hand
end

def player_total
calculate_total(session[:player_hand])
end

def dealer_total
calculate_total(session[:dealer_hand])
end

def player_hit
session[:player_hand] << session[:deck].pop
end

def dealer_hit
session[:dealer_hand] << session[:deck].pop
end

def player_busted?
player = player_total
if player > 21
return true
end
false
end

def dealer_busted?
dealer = dealer_total
if dealer > 21
return true
end
false
end

def player_blackjack?
if player_total == 21
return true
end
false
end

def dealer_blackjack?
if dealer_total == 21
return true
end
false
end

def compare_hands
player = player_total
dealer = dealer_total
if player > 21
@winner = "dealer"
elsif dealer > 21
@winner = "player"
elsif player > dealer
@winner = "player"
elsif player == dealer
@winner = "tie"
elsif dealer > player
@winner = "dealer"
end
end

def calculate_total(hand)
total = 0
aces = 0
hand.each do |card_value|
if card_value[1] == 'Ace'
total += 11
aces += 1
elsif card_value[1] == 'King' || card_value[1] == 'Queen' || card_value[1] == 'Jack'
total += 10
else
total += card_value[1].to_i
end
end
aces.times do
if total > 21
total -= 10
end
end
return total
end

end
44 changes: 44 additions & 0 deletions main.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
require 'sinatra'
require 'erb'
require_relative 'helpers/blackjack_helper.rb'

enable :sessions
helpers DeckHelper


get '/' do
erb :home
end

post '/blackjack' do
create_deck
new_hand
if player_blackjack? || dealer_blackjack?
redirect '/blackjack/stay'
else
erb :blackjack
end
end

post '/blackjack/hit' do
player_hit
if player_busted?
redirect '/blackjack/stay'
else
erb :blackjack
end
end

post '/blackjack/stay' do
if !dealer_busted?
while dealer_total < 17
dealer_hit
end
end
redirect '/blackjack/stay'
end

get '/blackjack/stay' do
compare_hands
erb :gameover
end
33 changes: 33 additions & 0 deletions views/blackjack.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!doctype html>
<html>
<head>
<title>
Blackjack
</title>
</head>

<body>
<h4>Dealer's Hand</h4>
<% session[:dealer_hand].each do |card| %>
<%= card %>
<% end %>
<p>Dealer's current total: <%= dealer_total %></p>
<br>
<h4>Your Hand</h4>
<% session[:player_hand].each do |card| %>
<%= card %>
<% end %>
<p>Your current total: <%= player_total %></p>
<br>
<h4>What will you do?</h4>
<form action='/blackjack/hit' method='post'>
<button name='action' type='submit' value='hit'>Hit</button>
</form>
<form action='/blackjack/stay' method='post'>
<button name='action' type='submit' value='stay'>Stay</button>
</form>


</body>

</html>
34 changes: 34 additions & 0 deletions views/game_over.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<!doctype html>
<html>
<head>
<title>
Blackjack
</title>
</head>

<body>
<h4>Dealer's Hand</h4>
<% session[:dealer_hand].each do |card| %>
<%= card %>
<% end %>
<p>Dealer's current total: <%= dealer_total %></p>
<br>
<h4>Your Hand</h4>
<% session[:player_hand].each do |card| %>
<%= card %>
<% end %>
<p>Your current total: <%= player_total %></p>
<br>
<% while !winner.nil? %>
<% if winner == "player" %>
<h4>Congratulations, you won this round!</h4>
<% elsif winner == "dealer" %>
<h4>The dealer won this round!</h4>
<% else %>
<h4>It was a tie!</h4>
<% end %>
<% end %>

</body>

</html>
36 changes: 36 additions & 0 deletions views/gameover.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!doctype html>
<html>
<head>
<title>
Blackjack
</title>
</head>

<body>
<h4>Dealer's Hand</h4>
<% session[:dealer_hand].each do |card| %>
<%= card %>
<% end %>
<p>Dealer's current total: <%= dealer_total %></p>
<br>
<h4>Your Hand</h4>
<% session[:player_hand].each do |card| %>
<%= card %>
<% end %>
<p>Your current total: <%= player_total %></p>
<br>
<% if @winner == "player" %>
<h4>Congratulations, you won this round!</h4>
<% elsif @winner == "dealer" %>
<h4>The dealer won this round!</h4>
<% else %>
<h4>It was a tie!</h4>
<% end %>

<form action='/blackjack' method='post'>
<button name='action' type='submit' value='play'>Play Again?</button>
</form>

</body>

</html>
17 changes: 17 additions & 0 deletions views/home.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!doctype html>
<html>
<head>
<title>
Blackjack
</title>
</head>

<body>
<h4>Let's play Blackjack!</h4>
<form action='/blackjack' method='post'>
<button name='action' type='submit' value='play'>Let's Play</button>
</form>

</body>

</html>