Ejemplo n.º 1
0
        public void GeneratePairings(Event mainEvent)
        {
            var inputPlayers  = mainEvent.Players;
            var currentRound  = mainEvent.CurrentRound;
            var rounds        = mainEvent.rounds;
            var eventName     = mainEvent.name;
            int activePlayers = inputPlayers.Count(p => !p.HasDropped());


            bool finished = false;

            while (!finished)
            {
                var matchesAtStart = inputPlayers.Sum(p => p.Opponents(currentRound).Count());
                if (matchesAtStart == activePlayers * mainEvent.RoundMatches)
                {
                    return;
                }

                // Modify player pairings

                var player = FindRandomPlayerWithFewestOpponents(inputPlayers, mainEvent.RoundMatches, currentRound);

                if (player == null)
                {
                    return;
                }

                var matchedPlayer = FindBestMatch(player, inputPlayers, mainEvent.RoundMatches, currentRound);
                if (matchedPlayer == null)
                {
                    return;
                }

                var newMatch = new Domain.Match(player, matchedPlayer, player.ID, matchedPlayer.ID, eventName, currentRound, 0, 0, 0);
                player.Matches.Add(newMatch);
                matchedPlayer.Matches.Add(newMatch);
                mainEvent.Matches.Add(newMatch);

                // End modify player pairings

                var matchesAtEnd = inputPlayers.Sum(p => p.Opponents(round: currentRound).Count);

                if (matchesAtStart == matchesAtEnd)
                {
                    finished = true;
                }

                if (matchesAtEnd == inputPlayers.Count * mainEvent.RoundMatches)
                {
                    finished = true;
                    return;
                }
            }
            return;
        }
Ejemplo n.º 2
0
        public void ThenMinutesBetweenMatchesInGroupShouldBe(int groupIndex, int expectedMinutes)
        {
            GroupBase group = createdGroups[groupIndex];

            group.Matches.Should().HaveCountGreaterOrEqualTo(2);

            for (int matchIndex = 1; matchIndex < group.Matches.Count; ++matchIndex)
            {
                Domain.Match previousMatch = group.Matches[matchIndex - 1];
                Domain.Match currentMatch  = group.Matches[matchIndex];

                DateTime previousDateTime = previousMatch.StartDateTime;
                DateTime currentDateTime  = currentMatch.StartDateTime;

                int minuteDifference = (int)currentDateTime.Subtract(previousDateTime).TotalMinutes;
                minuteDifference.Should().Be(expectedMinutes);
            }
        }
Ejemplo n.º 3
0
        public void RunSimulation_TeamA_Should_Win_With_Four_Goals_IfDefence_Other_Team_Is_0()
        {
            var sut         = CreateSut();
            var winningTeam = new Team(Guid.NewGuid(), "A");

            winningTeam.Players = CreatePlayer(winningTeam.Id, 6, 6, 5, 3, 2);


            var loosingTeam = new Team(Guid.NewGuid(), "B");

            loosingTeam.Players = CreatePlayer(loosingTeam.Id, 0, 0, 5, 3, 2);

            var match1 = new Domain.Match(winningTeam, loosingTeam);

            var matchResults = sut.RunSimulation(match1);

            Assert.AreEqual(14, matchResults.ScoreFirstTeam);
            Assert.AreEqual(0, matchResults.ScoreSecondTeam);
        }
Ejemplo n.º 4
0
            public async Task <Domain.Match> Save(Model model)
            {
                var user = await db.Users.FindAsync(model.UserId);

                if (user == null)
                {
                    throw new HttpException(400, "Identificador vazio");
                }
                if (user.DeletedAt != null)
                {
                    throw new NotFoundException();
                }

                var enterprise = await db.Enterprises.FindAsync(model.EnterpriseId);

                if (enterprise == null)
                {
                    throw new Exception();
                }
                if (enterprise.DeletedAt != null)
                {
                    throw new Exception();
                }

                var match = new Domain.Match
                {
                    UserId       = user.Id,
                    EnterpriseId = enterprise.Id
                };

                db.Matches.Add(match);

                await db.SaveChangesAsync();

                return(new Domain.Match {
                    UserId = match.UserId, EnterpriseId = match.EnterpriseId
                });
            }