SCREEN_WIDTH = 72

MOVE_WORDS = {
  1 => 'PAPER',
  2 => 'SCISSORS',
  3 => 'ROCK'
}

WIN_TABLE = {
  1 => 3,
  2 => 1,
  3 => 2
}

def center_text(text)
  text.rjust((SCREEN_WIDTH / 2) + (text.size / 2))
end

def ask_for_number_of_games
  loop do
    puts "HOW MANY GAMES"
    response = STDIN.gets.to_i
    return response if response > 0 and response < 11
    puts "SORRY, BUT WE AREN'T ALLOWED TO PLAY THAT MANY."
  end
end

def ask_for_human_move
  loop do
    puts "3=ROCK...2=SCISSORS...1=PAPER"
    puts "1...2...3...WHAT'S YOUR CHOICE"
    response = STDIN.gets.to_i
    return response if [1,2,3].include?(response)
    puts "INVALID"
  end
end

def calculate_result(human_move, computer_move)
  return 'TIE' if human_move == computer_move
  return 'WIN' if WIN_TABLE[human_move] == computer_move
  'LOSE'
end

puts center_text('GAME OF ROCK, SCISSORS, PAPER')
puts center_text('CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY')
puts
puts
puts

number_of_games = ask_for_number_of_games
games_won = 0
games_lost = 0

number_of_games.times do |game_number|
  puts
  puts "GAME NUMBER #{game_number + 1}"
  computer_move = rand(3) + 1
  human_move = ask_for_human_move
  puts "THIS IS MY CHOICE..."
  puts "...#{MOVE_WORDS[computer_move]}"

  case calculate_result(human_move, computer_move)
  when 'WIN'
    puts "YOU WIN!!!"
    games_won += 1
  when 'TIE'
    puts "TIE GAME.  NO WINNER."
  when 'LOSE'
    puts "WOW!  I WIN!!!"
    games_lost = games_lost += 1
  end
end

puts
puts "HERE IS THE FINAL GAME SCORE:"
puts "I HAVE WON #{games_lost} GAME(S)."
puts "YOU HAVE WON #{games_won} GAME(S)."
puts "AND #{number_of_games - (games_lost + games_won)} GAME(S) ENDED IN A TIE."
puts "THANKS FOR PLAYING!!"
