Ejemplo n.º 1
0
 private static int ColorPenalty(GameColorResult wantedColorResult, GameColorResult mostlyPlayedAs)
 {
     if (mostlyPlayedAs == GameColorResult.Draw)
     {
         return(0);
     }
     if (mostlyPlayedAs == wantedColorResult)
     {
         return(-1);
     }
     return(1);
 }
Ejemplo n.º 2
0
        private static Player GetOpponent(GameColorResult wantedColorResult, Player playerToPair, List <Player> playersLeft, IEnumerable <Round> previousRounds, IEnumerable <RoundResult> standings)
        {
            var opponentsByWeight = new List <OpponentWeight>();

            foreach (var player in playersLeft)
            {
                var opponenWeight = CalculateWeight(player, playerToPair, wantedColorResult, previousRounds, standings);
                opponentsByWeight.Add(new OpponentWeight(player, opponenWeight));
            }

            var orderedByWeight = opponentsByWeight.OrderBy(o => o.Weight).ToList();

            return(orderedByWeight.First().Player);
        }
Ejemplo n.º 3
0
        private static double CalculateWeight(Player player, Player playerToPair, GameColorResult wantedColorResult, IEnumerable <Round> previousRounds, IEnumerable <RoundResult> standings)
        {
            var weight = 1d;

            if (player.PlayerId == playerToPair.PlayerId)
            {
                return(1000000);
            }
            var lastStandings = standings?.Last();
            var roundNumber   = previousRounds.Any() ? previousRounds.Last().RoundNumber + 1 : 1;
            var playerGames   = GetAllPreviousGames(previousRounds, player);

            weight += ScorePenalty(roundNumber, lastStandings, player, playerToPair);
            weight += FloatingPenalty(previousRounds, standings, player, playerToPair);
            weight += OpponentPenalty(NumberOfTimesPlayerMetPreviously(playerToPair, playerGames));
            weight += ColorPenalty(wantedColorResult, MostlyPlayedAs(playerGames, player));
            weight += CountryPenalty(roundNumber, player, playerToPair);
            return(weight);
        }