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; }
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); } }
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); }
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 }); }