Created
October 30, 2011 06:44
-
-
Save rkh/1325594 to your computer and use it in GitHub Desktop.
Rock, paper, scissors in Sinatra
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, 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 computer_trow == @defeat[player_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