Ejemplo n.º 1
0
        public void ScheduleNewRound(string tournamentName, bool printNewMatches = true)
        {
            Tournament  CurrentTournament = tournamentRepository.GetTournament(tournamentName);
            int         NoR = CurrentTournament.GetNumberOfRounds();
            bool        isRoundFinished;
            List <Team> teams     = new List <Team>();
            Round       LastRound = new Round();

            if (NoR == 0)
            {
                teams = CurrentTournament.GetTeams();


                if (teams.Count > 1)
                {
                    //shuffle
                    int n = teams.Count;
                    while (n > 1)
                    {
                        Random rng = new Random();
                        n--;
                        int  k    = rng.Next(n + 1);
                        Team team = teams[k];
                        teams[k] = teams[n];
                        teams[n] = team;
                    }
                    //end of shuffle
                    Round NewRound = new Round();
                    if (teams.Count % 2 == 1)
                    {
                        Team newFreeRider = new Team("newFreeRider");
                        newFreeRider = teams[teams.Count - 1];
                        teams.Remove(newFreeRider);
                        NewRound.AddFreeRider(newFreeRider);
                    }

                    while (teams.Count > 0)
                    {
                        Match match = new Match();
                        Team  first = teams[0];
                        teams.Remove(teams[0]);
                        Team second = teams[0];
                        teams.Remove(teams[0]);

                        match.FirstOpponent  = first;
                        match.SecondOpponent = second;
                        NewRound.AddMatch(match);
                    }
                    CurrentTournament.AddRound(NewRound);
                    Console.WriteLine("New round: " + (NoR + 1) + " was added to " + CurrentTournament.Name + "\n" + "with the following matches");
                    foreach (Match match in NewRound.GetMatches())
                    {
                        Console.WriteLine(match.FirstOpponent.Name + " VS " + match.SecondOpponent.Name);
                    }
                }
            }
            else
            {
                LastRound       = CurrentTournament.GetRound(NoR - 1);
                isRoundFinished = LastRound.IsMatchesFinished();
                if (isRoundFinished)
                {
                    teams = LastRound.GetWinningTeams();
                    if (teams.Count > 1)
                    {
                        //shuffle
                        int n = teams.Count;
                        while (n > 1)
                        {
                            Random rng = new Random();
                            n--;
                            int  k    = rng.Next(n + 1);
                            Team team = teams[k];
                            teams[k] = teams[n];
                            teams[n] = team;
                        }
                        //end of shuffle

                        Round NewRound = new Round();

                        if (teams.Count % 2 == 1)
                        {
                            Team oldFreeRider = LastRound.GetFreeRider();
                            Team newFreeRider = new Team("newFreeRider");
                            for (int x = 0; oldFreeRider != newFreeRider; x++)
                            {
                                newFreeRider = teams[x];
                            }
                            teams.Remove(newFreeRider);
                            teams.Add(oldFreeRider);
                            NewRound.AddFreeRider(newFreeRider);
                        }

                        for (int i = 0; i < teams.Count / 2; i++)
                        {
                            Match match = new Match();
                            Team  first = teams[0];
                            teams.Remove(teams[0]);
                            Team second = teams[0];
                            teams.Remove(teams[0]);

                            match.FirstOpponent  = first;
                            match.SecondOpponent = second;
                            NewRound.AddMatch(match);
                        }
                        CurrentTournament.AddRound(NewRound);
                        Console.WriteLine("New round: " + (NoR + 1) + " was added to " + CurrentTournament.Name + "\n" + "with the following matches");
                        foreach (Match match in NewRound.GetMatches())
                        {
                            Console.WriteLine(match.FirstOpponent.Name + " VS " + match.SecondOpponent.Name);
                        }
                    }
                    else
                    {
                        CurrentTournament.SetStatus("Finished");
                    }
                }
                else
                {
                    Console.WriteLine("Error round not finished");
                }
            }
        }
Ejemplo n.º 2
0
        public void ScheduleNewRound(string tournamentName, bool printNewMatches = true)
        {
            TournamentRepo tr             = new TournamentRepo();
            Tournament     t              = tr.GetTournament(tournamentName);
            int            numberOfRounds = t.GetNumberOfRounds() - 1;
            List <Team>    teams          = new List <Team>();
            Team           oldFreeRider;
            Round          lastRound;

            lastRound = t.GetRound(numberOfRounds - 1);
            if (numberOfRounds == 0)
            {
                teams = t.GetTeams();
            }
            else
            {
                bool isRoundFinished = lastRound.IsRoundFinished();
                if (isRoundFinished)
                {
                    teams = lastRound.GetWinningTeams();
                }
                else
                {
                    Console.WriteLine("Runden er endnu ikke afsluttet");
                }
            }
            if (teams.Count > 1)
            {
                //fundet på stackoverflow skal undersøges nærmere.
                Random rng = new Random();
                int    n   = teams.Count;
                while (n > 1)
                {
                    n--;
                    int  k     = rng.Next(n + 1);
                    Team value = teams[k];
                    teams[k] = teams[n];
                    teams[n] = value;
                }
                Round newRound = new Round();
                if (teams.Count % 2 == 1)
                {
                    oldFreeRider = lastRound.GetFreeRider();
                    Team newFreeRider;
                    //freerider holdet springer runden over
                    int i = 0;
                    do
                    {
                        newFreeRider = teams[i];
                        i++;
                    } while (oldFreeRider.Equals(teams[i]));

                    teams.Remove(newFreeRider);
                    newRound.Add(newFreeRider);
                }
                int numberOfMatches = teams.Count / 2;
                for (int i = 0; i < numberOfMatches; i++)
                {
                    Match newMatch = new Match();
                    Team  first    = teams[0];
                    teams.Remove(teams[0]);
                    Team second = teams[0];
                    teams.Remove(teams[0]);
                    newMatch.FirstOpponent  = first;
                    newMatch.SecondOpponent = second;
                    newRound.Add(newMatch);
                }

                // Jesper har tilføjet herfra
                t.Add(newRound);
                if (printNewMatches)
                {
                    Console.Clear();
                    Console.WriteLine("Kommende Runde:");
                    Console.WriteLine("---------------");
                    List <Match> matches = newRound.GetMatches();
                    int          i       = 1;
                    foreach (Match match in matches)
                    {
                        Console.WriteLine(i + ". " + match.FirstOpponent.Name + " vs. " + match.SecondOpponent.Name);
                        i++;
                    }
                    Console.ReadKey();
                }
            }
            else
            {
                // SetStatusFinished() er tilføjet til tournament-klassen
                t.SetStatusFinished();
                Console.WriteLine("Turneringen " + t.Name + " er afsluttet");
                Console.ReadKey();
                Console.Clear();
            }

            // Jesper out.
        }