This repository has been archived by the owner on Jul 24, 2020. It is now read-only.
forked from rchatley/extreme_startup
/
quiz_master.rb
90 lines (75 loc) · 2.53 KB
/
quiz_master.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
require_relative 'question_factory'
require 'uri'
require 'logger'
module ExtremeStartup
class WarmupQuizMaster
class WarmupQuestion < Question
def initialize(player)
@player = player
end
def correct_answer
@player.name
end
def as_text
"what is your name"
end
end
def initialize(player, scoreboard, question_factory)
@player = player
@scoreboard = scoreboard
end
def start
got_the_hang_of_it = false
while true
question = WarmupQuestion.new(@player)
url = @player.url + '?q=' + URI.escape(question.to_s)
puts "GET:" + url
begin
response = HTTParty.get(url)
puts "question was " + question.to_s
puts "player #{@player.name} said #{response}"
if (question.answered_correctly?(response)) then
puts "player #{@player.name} was correct"
if !got_the_hang_of_it
@scoreboard.increment_score_for(@player, question.points)
@player.log_result(question.id, "correct", question.points)
got_the_hang_of_it = true
else
@player.log_result(question.id, "correct again", 0)
end
else
puts "player #{@player.name} was wrong"
@player.log_result(question.id, "wrong", 0)
end
rescue => exception
puts "player #{@player.name} was down - try again later #{exception}"
@player.log_result(question.id, "no_response", 0)
end
sleep 5
end
end
end
class QuizMaster
def initialize(player, scoreboard, question_factory, default_delay = 5)
@player = player
@scoreboard = scoreboard
@question_factory = question_factory
@default_delay = default_delay
end
def player_passed?(response)
response.to_s.downcase.strip == "pass"
end
def start
log = Logger.new("extreme_startup-#$$.log")
while true
question = @question_factory.next_question(@player)
question.ask(@player)
puts "For player #{@player}\n#{question.display_result}" unless $silence_logging
log.info("Player: #{@player}|#{question.log_result}") unless $silence_logging
@scoreboard.increment_score_for(@player, question.score)
@player.log_result(question.id, question.result, question.score)
sleep question.delay_before_next(@default_delay)
end
end
end
end