Skip to content

Instantly share code, notes, and snippets.

@leklund

leklund/game.rb

Created Oct 30, 2011
Embed
What would you like to do?
Rock, paper, scissors, lizard, spock in Sinatra
require 'sinatra'
# before we process a route, we'll set the response as
# plain text and set up an array of viable moves that
# a player (and the computer) can perform
before do
content_type :txt
@defeat = {
rock: [:scissors, :lizard],
paper: [:rock, :spock],
scissors: [:paper, :lizard],
lizard: [:paper, :spock],
spock: [:rock, :scissors]
}
#@defeat = {rock: :scissors, paper: :rock, scissors: :paper}
@throws = @defeat.keys
end
get '/throw/:type' do
# the params[] hash stores querystring and form data.
player_throw = params[:type].to_sym
# in the case of a player providing a throw that is not valid,
# we halt with a status code of 403 (Forbidden) and let them
# know they need to make a valid throw to play.
if !@throws.include?(player_throw)
halt 403, "You must throw one of the following: #{@throws}"
end
# now we can select a random throw for the computer
computer_throw = @throws.sample
# compare the player and computer throws to determine a winner
if player_throw == computer_throw
"You tied with the computer. Try again!"
elsif @defeat[player_throw].index(computer_throw)
"Nicely done; #{player_throw} beats #{computer_throw}!"
else
"Ouch; #{computer_throw} beats #{player_throw}. Better luck next time!"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.