Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2015
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.21 KB | None | 0 0
  1. require_relative 'player'
  2. require_relative 'question'
  3.  
  4. class GameEngine
  5.  
  6.   def initialize
  7.     @players        = []
  8.     @gameover       = false
  9.     @gameover_text = ''
  10.   end
  11.  
  12.   def clear_screen
  13.     # system = evil and besides, it wont work since clearing console entails spawning a new one - a funny unexpected effect - when executed inside the loop,
  14.     # it spawns the new console and the loop in it but forsaken anything outside of the loop - in effect creating infinite loop
  15.     # use only when you have to, preferably if you restart the process itself
  16.     system ("cls")
  17.     system ("clear")
  18.   end
  19.  
  20.   def add_player
  21.     name = get_input
  22.     if name.empty?
  23.       name = "Player#{@players.count + 1}"
  24.     end
  25.     @players << Player.new(name)
  26.   end
  27.  
  28.   def initialize_game(greeting, play_text, continue_text, gameover_text)
  29.     setup_counter   = 0
  30.     @gameover_text = gameover_text
  31.     @continue_text  = continue_text
  32.     clear_screen
  33.     greeting.call
  34.     get_input.to_i.times do
  35.       setup_counter += 1
  36.       clear_screen
  37.       play_text.call("#{setup_counter}")
  38.       add_player
  39.     end
  40.   end
  41.  
  42.   def true_answer
  43.     Question.solution.to_s
  44.   end
  45.  
  46.   def verify_answer(answer)
  47.     true_answer == answer ? true : false
  48.   end
  49.  
  50.   def get_input
  51.     gets.chomp.to_s
  52.   end
  53.  
  54.   def loop(question_text, p_q_text1, p_q_text2, resolution_text, correct_text, incorrect_text, answer_text, score_text, p_score_text, continue_text)
  55.     @question_text   = question_text
  56.     @p_q_text1       = p_q_text1
  57.     @p_q_text2       = p_q_text2
  58.     @resolution_text = resolution_text
  59.     @correct_text    = correct_text
  60.     @incorrect_text  = incorrect_text
  61.     @answer_text     = answer_text
  62.     @score_text      = score_text
  63.     @p_score_text    = p_score_text
  64.     @continue_text   = continue_text
  65.     until @gameover do
  66.       get_question
  67.       resolve
  68.       judge
  69.     end
  70.     top_score if @gameover
  71.     @continue_text.call
  72.     restart = get_input
  73.     if restart == 'y' || restart == 'yes'
  74.       system ("ruby main.rb")
  75.     else
  76.       print "Good Bye!"
  77.     end
  78.   end
  79.  
  80.   def get_question
  81.     question = Question.generate
  82.     @question_text.call("#{question}")
  83.     @players.each do |player|
  84.       @p_q_text1.call("#{player.name} ? : ")
  85.       player.answer = get_input
  86.       @p_q_text2.call("#{player.name}!")
  87.     end
  88.   end
  89.  
  90.   def resolve
  91.     @resolution_text.call
  92.     @players.each do |player|
  93.       if verify_answer(player.answer)
  94.         @correct_text.call("#{player.name}")
  95.         player.score += 1
  96.       else
  97.         @incorrect_text.call("#{player.name}")
  98.         player.life -= 1
  99.       end
  100.     end
  101.     @answer_text.call("#{true_answer}")
  102.   end
  103.  
  104.   def judge
  105.     @score_text.call
  106.     @players.each do |player|
  107.       @p_score_text.call("#{player.name}", "#{player.score}", "#{player.life}")
  108.       @gameover = true if player.life == 0
  109.     end
  110.   end
  111.  
  112.   def top_score
  113.     @top_score = 0
  114.     @winner    = nil
  115.     @players.each do |player|
  116.       if player.score > @top_score
  117.         @top_score = player.score
  118.         @winner    = player.name
  119.       end
  120.       @winner = 'Nobody' if @winner == nil || @winner.empty?
  121.     end
  122.     @gameover_text.call("#{@winner}", "#{@top_score}")
  123.   end
  124. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement