mirror of
https://github.com/danbee/scoreboard
synced 2025-03-04 08:59:11 +00:00
95 lines
1.8 KiB
Ruby
95 lines
1.8 KiB
Ruby
class Match
|
|
include Redis::Objects
|
|
|
|
value :initial_serve
|
|
value :serve
|
|
|
|
def initialize(name_one = nil, name_two = nil)
|
|
@one, @two = Player.new(:one),
|
|
Player.new(:two)
|
|
@one.name = name_one unless name_one.nil?
|
|
@two.name = name_two unless name_two.nil?
|
|
end
|
|
|
|
def add_point(colour)
|
|
players[colour].score.increment
|
|
if @one.has_beaten(@two)
|
|
reset_scores
|
|
@one.games.increment
|
|
elsif @two.has_beaten(@one)
|
|
reset_scores
|
|
@two.games.increment
|
|
end
|
|
set_serve
|
|
end
|
|
|
|
def set_serve
|
|
total_points = @one.score.value + @two.score.value
|
|
|
|
if @one.score.value >= 10 && @two.score.value >= 10
|
|
initial_server = total_points.even?
|
|
else
|
|
initial_server = (total_points / 2).even?
|
|
end
|
|
|
|
case self.initial_serve.value
|
|
when 'blue'
|
|
self.serve = initial_server ? :blue : :red
|
|
when 'red'
|
|
self.serve = initial_server ? :red : :blue
|
|
end
|
|
end
|
|
|
|
def undo_point(colour)
|
|
player = players[colour]
|
|
if player.score.value > 0
|
|
player.score.decrement
|
|
elsif no_scores?
|
|
set_initial_serve(colour)
|
|
end
|
|
set_serve
|
|
end
|
|
|
|
def set_initial_serve(colour)
|
|
self.initial_serve = colour
|
|
self.serve = colour
|
|
end
|
|
|
|
def reset_scores
|
|
@one.score.reset
|
|
@two.score.reset
|
|
end
|
|
|
|
def reset_games
|
|
@one.games.reset
|
|
@two.games.reset
|
|
set_initial_serve(nil)
|
|
end
|
|
|
|
def total_games
|
|
@one.games.value + @two.games.value
|
|
end
|
|
|
|
def players
|
|
if total_games.even?
|
|
{ red: @two, blue: @one }
|
|
else
|
|
{ red: @one, blue: @two }
|
|
end
|
|
end
|
|
|
|
def scores
|
|
{ red: players[:red].attributes.merge(serve: self.serve == 'red'),
|
|
blue: players[:blue].attributes.merge(serve: self.serve == 'blue') }
|
|
end
|
|
|
|
def no_scores?
|
|
@one.score == 0 && @two.score == 0
|
|
end
|
|
|
|
# This is required for Redis
|
|
def id
|
|
1
|
|
end
|
|
end
|