Beispiel #1
0
        public void Match_Bye()
        {
            var p1    = new Player("1", 1500);
            var match = new ByeMatch(p1);

            match.Score();
            p1.Rating.Should().BeGreaterThan(1500);
        }
Beispiel #2
0
        public IEnumerable <IEnumerable <Match> > BuildMatchPairs(IList <Player> players, Tournament tournament)
        {
            if (players.Count % 2 == 1)
            {
                // create bye
                var byePlayer = players.Where(p => !p.HadBye).OrderBy(p => p.Rating).FirstOrDefault();
                var byeMatch  = new ByeMatch(byePlayer);
                var remaining = players.Except(new List <Player> {
                    byePlayer
                }).ToList();
                var matches = new List <Match> {
                    byeMatch
                };
                foreach (var subsequentMatch in BuildMatchPairs(remaining, tournament))
                {
                    matches.AddRange(subsequentMatch);
                }
                yield return(matches);
            }
            else
            {
                for (var offset = 0; offset < players.Count / 2; offset++)
                {
                    int   offsetInc  = 1;
                    bool  validMatch = false;
                    Match match      = null;
                    while (!validMatch)
                    {
                        match = new Match {
                            Player1 = players.ElementAt(offset),
                            Player2 = players.ElementAt(offset + offsetInc)
                        };
                        validMatch = tournament.IsValidMatch(match.Player1, match.Player2);
                        offsetInc++;
                    }

                    var remaining = players.Except(match.Players).ToList();
                    var matches   = new List <Match> {
                        match
                    };
                    foreach (var subsequentMatch in BuildMatchPairs(remaining, tournament))
                    {
                        matches.AddRange(subsequentMatch);
                    }
                    yield return(matches);
                }
            }
        }