+ def start_game(p1, p2)
+ p1.sente = true
+ p2.sente = false
+ Game.new(p1.game_name, p1, p2)
+ end
+
+ def delete_most_playing_player(players)
+ if players.size % 2 == 1
+ max_player = players.max {|a,b| a.win + a.loss <=> b.win + b.loss}
+ players.delete(max_player)
+ end
+ end
+ end # Pairing
+
+ class RandomPairing < Pairing
+ def match(players)
+ if players.size < 2
+ log_message("Floodgate: too few players [%d]" % [players.size])
+ return
+ end
+ log_message("Floodgate: found %d players. Making games..." % [players.size])
+ delete_most_playing_player(players)
+
+ random_players = players.sort{ rand < 0.5 ? 1 : -1 }
+ pairs = [[random_players.shift]]
+ while !random_players.empty? do
+ if pairs.last.size < 2
+ pairs.last << random_players.shift
+ else
+ pairs << [random_players.shift]
+ end
+ end
+ pairs.each do |pair|
+ start_game(pair.first, pair.last)
+ end
+ end
+ end # RadomPairing