Beispiel #1
0
 public GameController(IGameLoader game_load, IGameCreator game_creator, IProvinceLoader province_load, IPlayerLoader player_load)
 {
     this.game_load     = game_load;
     this.game_creator  = game_creator;
     this.province_load = province_load;
     this.player_load   = player_load;
 }
Beispiel #2
0
 public PlayerController(IProvinceLoader province_load, IPlayerLoader player_load, ISessionLoader session, IGameCreator game_creator, IGameLoader game_load)
 {
     this.province_load = province_load;
     this.session       = session;
     this.player_load   = player_load;
     this.game_creator  = game_creator;
     this.game_load     = game_load;
 }
Beispiel #3
0
        public Controller(IGameCreator gameCreator, IManipulator manipulator, ICommandHistory history,
                          ICommandManager commandManager, IGameMessageHolder gameMessageHolder, IConsoleManager console)
        {
            gameCreator.NotifyOnGameCreated     += OnNewGameCreated;
            manipulator.NotifyOnPlayfieldChange += OnPlayfieldChanged;

            _history           = history;
            _commandManager    = commandManager;
            _gameMessageHolder = gameMessageHolder;
            _console           = console;
        }
Beispiel #4
0
        //this doesn't add it to the schedule at all
        public IList <PlayoffGame> CreateRequiredGames(IGameCreator gameCreater)
        {
            var newGames = new List <PlayoffGame>();

            if (!Complete)
            {
                int winsRequired = RequiredWins - HomeWins <= RequiredWins - AwayWins ? RequiredWins - HomeWins : RequiredWins - AwayWins;

                int inCompleteOrUnProcessedGames = GetInCompelteOrUnProcessedGames().Count;

                for (int i = 0; i < (winsRequired - inCompleteOrUnProcessedGames); i++)
                {
                    var newGame = (PlayoffGame)gameCreater.CreateGame(Home, Away);
                    newGame.Series = this;
                    newGames.Add(newGame);
                    Games.Add(newGame);
                }
            }

            return(newGames);
        }
Beispiel #5
0
 public StartGameCommand(IGameCreator gameCreator, IManipulator manipulator, GameSettings gameSettings)
 {
     _gameCreator  = gameCreator;
     _manipulator  = manipulator;
     _gameSettings = gameSettings;
 }
Beispiel #6
0
 public StandardGameController(IGameCreator gameCreator)
 {
     _gameCreator = gameCreator;
 }
 public AIGameController(IGameCreator gameCreator)
 {
     _gameCreator = gameCreator;
 }
Beispiel #8
0
 public Results(IGameCreator gameCreator)
 {
     _gameCreator = gameCreator;
 }
 public CommandManager(IGameCreator creator, IManipulator manipulator, ICommandHistory history)
 {
     _gameCreator = creator;
     _manipulator = manipulator;
     _history     = history;
 }
Beispiel #10
0
        public static Schedule CreateAwayGamesForHomeAndAway(Schedule schedule, int dayToStartHomeAndAway, GameRules rules, IGameCreator gameCreator)
        {
            int count = 0;

            schedule.Days.Keys.ToList().ForEach(dayNumber =>
            {
                int newDay = dayToStartHomeAndAway + count;
                if (!schedule.Days.ContainsKey(newDay))
                {
                    schedule.Days.Add(newDay, new ScheduleDay(dayToStartHomeAndAway + count));
                }

                schedule.Days[dayNumber].Games.ForEach(game =>
                {
                    var g = gameCreator.CreateGame(0, newDay, game.Year, game.Away, game.Home, rules);
                    //var g = new ScheduleGame(game.Competition, 0, newDay, game.Year, game.Away, game.Home, 0, 0, false, 1, 0, rules, false);
                    schedule.Days[newDay].Games.Add(g);
                });

                count++;
            });
            return(schedule);
        }
Beispiel #11
0
        public static Schedule CreateGamesSingleGroup(Competition competition, int year, int lastGameNumber, int startDay, List <ITeam> teams, bool homeAndAway, GameRules rules, IGameCreator gameCreator)
        {
            int[,] array = CreateArrayForScheduling(teams.Count);

            int totalDays = teams.Count % 2 == 0 ? teams.Count - 1 : teams.Count;


            var schedule = new Schedule();

            for (int i = 0; i < totalDays; i++)
            {
                schedule.AddDay(i + startDay);
            }
            //agorithm for swapping the values


            for (int d = startDay; d < totalDays + startDay; d++)
            {
                for (int i = 0; i < array.GetLength(0); i++)
                {
                    if (array[i, 0] != -1)
                    {
                        var g = gameCreator.CreateGame(0, i, year, teams[array[i, 0]], teams[array[i, 1]], rules);
                        //var g = new ScheduleGame(competition, 0, i, year, teams[array[i, 0]], teams[array[i, 1]], 0, 0, false, 1, 0, rules, false);
                        schedule.Days[d].Games.Add(g);
                    }
                }

                array = ProcessNextPosition(array);
            }

            if (homeAndAway)
            {
                CreateAwayGamesForHomeAndAway(schedule, totalDays + startDay, rules, gameCreator);
            }

            foreach (KeyValuePair <int, ScheduleDay> data in schedule.Days)
            {
                lastGameNumber = UpdateGameNumbers(lastGameNumber, data.Value);
            }

            return(schedule);
        }
Beispiel #12
0
        public static Schedule CreateGames(Competition competition, int year, int lastGameNumber, int startDay, List <ITeam> homeTeams, List <ITeam> awayTeams, int iterations, bool homeAndAway, GameRules rules, IGameCreator gameCreator)
        {
            var result = new Schedule();

            for (int i = 0; i < iterations; i++)
            {
                if (awayTeams == null || awayTeams.Count == 0)
                {
                    lastGameNumber = MergeSchedules(result, CreateGamesSingleGroup(competition, year, lastGameNumber, startDay, homeTeams, homeAndAway, rules, gameCreator));
                }
                else
                {
                    lastGameNumber = MergeSchedules(result, CreateGamesTwoDifferentGroups(competition, year, lastGameNumber, startDay, homeTeams, awayTeams, homeAndAway, rules, gameCreator));
                }
            }

            //this will overwrite whatever game number work was done in the other methods
            foreach (KeyValuePair <int, ScheduleDay> data in result.Days)
            {
                lastGameNumber = UpdateGameNumbers(lastGameNumber, data.Value);
            }

            return(result);
        }
Beispiel #13
0
 /* these are the two entry methods if multiple iterations of a series of games are needed */
 public static Schedule CreateGames(Competition competition, int year, int lastGameNumber, int startDay, List <ITeam> teams, int iterations, bool homeAndAway, GameRules rules, IGameCreator gameCreator)
 {
     return(CreateGames(competition, year, lastGameNumber, startDay, teams, null, iterations, homeAndAway, rules, gameCreator));
 }
Beispiel #14
0
        public static Schedule CreateAwayGamesForHomeAndAway(Schedule schedule, int dayToStartHomeAndAway, IGameCreator gameCreator)
        {
            int count = 0;

            schedule.Days.Keys.ToList().ForEach(dayNumber =>
            {
                int newDay = dayToStartHomeAndAway + count;
                if (!schedule.Days.ContainsKey(newDay))
                {
                    schedule.Days.Add(newDay, new ScheduleDay(dayToStartHomeAndAway + count));
                }

                schedule.Days[dayNumber].Games.ToList().ForEach(game =>
                {
                    var g = gameCreator.CreateGame(game.Away, game.Home);
                    schedule.Days[newDay].Games.Add(g);
                });

                count++;
            });
            return(schedule);
        }
Beispiel #15
0
 /* these are the two entry methods if multiple iterations of a series of games are needed */
 public static Schedule CreateGames(int year, int lastGameNumber, int startDay, List <ITeam> teams, int iterations, bool homeAndAway, IGameCreator gameCreator)
 {
     return(CreateGames(year, lastGameNumber, startDay, teams, null, iterations, homeAndAway, gameCreator));
 }
Beispiel #16
0
        //Assumption is that they can add days afterwards.  Different methods need to handle adding games to already established days
        //todo need to rework this
        public static Schedule CreateGamesTwoDifferentGroups(Competition competition, int year, int lastGameNumber, int startDay, List <ITeam> homeTeams, List <ITeam> awayTeams, bool homeAndAway, GameRules rules, IGameCreator gameCreator)
        {
            int  initialDays        = 0;
            var  aTeamList          = new List <ITeam>();
            var  bTeamList          = new List <ITeam>();
            bool reverseHomeAndAway = false;

            //the larger team list has to be the top loop
            if (homeTeams.Count >= awayTeams.Count)
            {
                aTeamList   = homeTeams;
                bTeamList   = awayTeams;
                initialDays = homeTeams.Count;
            }
            else
            {
                bTeamList          = homeTeams;
                aTeamList          = awayTeams;
                reverseHomeAndAway = true;
                initialDays        = awayTeams.Count;
            }

            int maxDay = initialDays + startDay - 1;

            var schedule = new Schedule();

            for (int i = 0 + startDay; i <= maxDay; i++)
            {
                schedule.AddDay(i);
            }

            int currentDay   = startDay;
            int teamStartDay = currentDay;

            aTeamList.ForEach(aTeam =>
            {
                currentDay = teamStartDay;
                //for each home team loop through the away teams, increment the day by one and add the next game.
                bTeamList.ForEach(bTeam =>
                {
                    var game = gameCreator.CreateGame(0, currentDay, year, reverseHomeAndAway ? bTeam : aTeam, reverseHomeAndAway ? aTeam : bTeam, rules);

                    /*
                     * var game = new ScheduleGame(competition, 0, currentDay, year,
                     *  reverseHomeAndAway ? bTeam:aTeam, reverseHomeAndAway ? aTeam:bTeam,
                     *  0, 0, false, 1, 0, rules, false);
                     */
                    schedule.Days[currentDay].AddGame(game);

                    currentDay = GetNextDay(currentDay, startDay, maxDay, 1);
                });
                //when done the home team games, start on the previous day the last team started on and go through it again
                teamStartDay = GetNextDay(teamStartDay, startDay, maxDay, -1);
            });


            if (homeAndAway)
            {
                CreateAwayGamesForHomeAndAway(schedule, maxDay + 1, rules, gameCreator);
            }
            //do the game numbers last so that they are in order by day
            foreach (KeyValuePair <int, ScheduleDay> data in schedule.Days)
            {
                lastGameNumber = UpdateGameNumbers(lastGameNumber, data.Value);
            }

            return(schedule);
        }
Beispiel #17
0
 public GameCreateController(IGameCreator gameCreator)
 {
     this.gameCreator = gameCreator;
 }