class << self
def default_pairing
- return SwissPairing.new
- #return ExcludeSacrifice.new(SwissPairing.new)
+ #return SwissPairing.new
+ return ExcludeSacrifice.new(SwissPairing.new)
#return RandomPairing.new
#return ExcludeSacrifice.new(RandomPairing.new)
end
Game.new(p1.game_name, p1, p2)
end
+ def include_newbie?(players)
+ return players.find{|a| a.rate == 0} == nil ? false : true
+ end
+
def delete_player_at_random(players)
return players.delete_at(rand(players.size))
end
end
def delete_most_playing_player(players)
+ # TODO ??? undefined method `<=>' for nil:NilClass
max_player = players.max {|a,b| a.win + a.loss <=> b.win + b.loss}
return players.delete(max_player)
end
return if players.size < 2
if players.size % 2 == 1
- delete_most_playing_player(players)
+ delete_player_at_random(players)
end
pairing_and_start_game(players)
end
remains = players - win_players
if win_players.size >= 2
if win_players.size % 2 == 1
- remains << delete_least_rate_player(win_players)
+ if include_newbie?(win_players)
+ remains << delete_player_at_random(win_players)
+ else
+ remains << delete_least_rate_player(win_players)
+ end
end
pairing_and_start_game(win_players)
else
end
return if remains.size < 2
if remains.size % 2 == 1
- delete_most_playing_player(remains)
+ delete_player_at_random(remains)
+ # delete_most_playing_player(remains)
end
pairing_and_start_game(remains)
end
def match(players)
if @sacrifice &&
players.size % 2 == 1 &&
- players.find{|a| a.id == @sacrifice}
+ players.find{|a| a.player_id == @sacrifice}
log_message("Floodgate: first, exclude %s" % [@sacrifice])
- players.delete_if{|a| a.id == @sacrifice}
+ players.delete_if{|a| a.player_id == @sacrifice}
end
@pairing.match(players)
end