Skip to content

Instantly share code, notes, and snippets.

@nilbus
Created February 28, 2014 02:16
Show Gist options
  • Select an option

  • Save nilbus/9263888 to your computer and use it in GitHub Desktop.

Select an option

Save nilbus/9263888 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
class Game
def play
setup_game
get_players
@server = pick_starter
until winner
rally
determine_server
end
end
def setup_game
@points = Hash.new(0)
end
def get_players
@players = []
@players << prompt("Who's in this game?")
@players << prompt("Who else?")
end
def prompt msg
puts msg
input = gets
exit 1 if input.nil?
input.chomp
end
def determine_server
point_total = @points.values.inject(:+)
if point_total % 5 == 0
@server = opposite_player(@server)
puts "Now serving: #@server"
end
end
def pick_starter
starter = @players[rand(2)]
puts "#{starter} gets to try first."
starter
end
def rally
serve
smack_it_back until miss?
scorer = opposite_player(@smacker)
@points[scorer] += 1
puts "#@smacker biffed it. Another point for #{scorer}!"
end
def serve
@smacker = @server
while miss?
puts "Whoa, it's a let!"
end
end
def miss?
rand(5) == 0
end
def opposite_player(player)
player == @players.first ? @players.last : @players.first
end
def smack_it_back
@smacker = opposite_player(@smacker)
puts "Wow this is getting intense" if rand(8) == 0
puts "#@smacker returns successfully!"
end
def winner
potential_winner = @points.find { |player, score| score >= 21 }
return nil unless potential_winner && @points.values.inject(:-).abs >= 2
puts "Game over! #{potential_winner[0]} wins! Final score: #{@points.values.max}-#{@points.values.min}."
exit 0
end
end
Game.new.play
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment