コード例 #1
0
        private void LoadGame(object sender, EventArgs e)
        {
            if (loadedGamesListBox.SelectedIndex < 0)
            {
                return;
            }

            SingleplayerSavedGameInfo savedGameInfo =
                (SingleplayerSavedGameInfo)loadedGamesListBox.Items[loadedGamesListBox.SelectedIndex];

#if (!DEBUG)
            try
            {
#endif
            using (UtilsDbContext db = new UtilsDbContext())
            {
                Game game = Game.Load(db, savedGameInfo);
                OnSingleplayerGameLoaded?.Invoke(game);
            }
#if (!DEBUG)
        }

        catch (Exception)
        {
            MessageBox.Show("Selected game save has been damaged.", "Error", MessageBoxButtons.OK,
                            MessageBoxIcon.Error);
        }
#endif
        }
コード例 #2
0
        private void DeleteGame(object sender, EventArgs e)
        {
            if (loadedGamesListBox.SelectedIndex < 0)
            {
                return;
            }

            deleteButton.Enabled = false;
            List <SingleplayerSavedGameInfo> selectedFiles =
                loadedGamesListBox.SelectedItems.Cast <SingleplayerSavedGameInfo>().ToList();

            for (int i = selectedFiles.Count - 1; i >= 0; i--)
            {
                int selectedIndex = loadedGamesListBox.SelectedIndices[i];
                loadedGamesListBox.Items.RemoveAt(selectedIndex);
            }


            using (UtilsDbContext db = new UtilsDbContext())
            {
                foreach (SingleplayerSavedGameInfo savedGameInfo in selectedFiles)
                {
                    db.Remove(savedGameInfo);
                }
            }
            deleteButton.Enabled = true;
        }
コード例 #3
0
        private void StartNewGame(Game game)
        {
            switch (game.GameType)
            {
            case GameType.SinglePlayer:
                // save the game
                using (UtilsDbContext db = new UtilsDbContext())
                {
                    game.Save(db);
                }
                break;

            case GameType.MultiplayerHotseat:
                // save the game
                using (UtilsDbContext db = new UtilsDbContext())
                {
                    game.Save(db);
                }
                break;

            case GameType.MultiplayerNetwork:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            LoadInGameScreen(game);
        }
コード例 #4
0
        private void Start(object sender, EventArgs e)
        {
            Map map = mapSettingsControl.GetMap();

            IList <AiPlayer> aiPlayers = aiPlayerSettingsControl.GetPlayers();

            IList <Player> players = new List <Player>();

            foreach (AiPlayer aiPlayer in aiPlayers)
            {
                players.Add(aiPlayer);
            }

            players.Add(myHumanPlayerControl.GetPlayer());

            foreach (Player player in humanPlayerSettingsControl.GetPlayers())
            {
                players.Add(player);
            }

            Game game = null;

            using (UtilsDbContext db = new UtilsDbContext())
            {
                IEnumerable <HotseatSavedGameInfo> savedGamesEnum = db.HotseatSavedGameInfos.ToList();
                HotseatSavedGameInfo lastGame = savedGamesEnum.LastOrDefault();
                int gameId = 1;
                if (lastGame != null)
                {
                    gameId = lastGame.Id + 1;
                }

                var factory = new GameFactory();
                game = factory.CreateGame(gameId, GameType.MultiplayerHotseat, map, players, fogOfWar: fogOfWarCheckBox.Checked);


                // TEST

                /*NetworkObjectWrapper wrapper = new NetworkObjectWrapper<Game>() {TypedValue = game};
                 * using (var ms = new MemoryStream())
                 * {
                 *  wrapper.Serialize(ms);
                 *
                 *  ms.Position = 0;
                 *
                 *  var obj = NetworkObjectWrapper.Deserialize(ms).Value;
                 * }*/
                // END TEST
            }

            OnGameStarted?.Invoke(game);
        }
コード例 #5
0
 private void ControlLoad(object sender, EventArgs e)
 {
     Task.Run(() =>
     {
         // clear combo box items
         Invoke(new Action(mapComboBox.Items.Clear));
         // get map infos from database
         DbSet <MapInfo> mapInfos = new UtilsDbContext().Maps;
         maps = mapInfos.ToList();
         // refresh the combo box with new items
         Invoke(new Action(RefreshComboBox));
     });
 }
コード例 #6
0
        public void RefreshSavedGames()
        {
            Task.Run(() =>
            {
                using (UtilsDbContext db = new UtilsDbContext())
                {
                    var savedGames = (from game in db.SingleplayerSavedGameInfos.AsParallel()
                                      orderby game.SavedGameDate descending
                                      select game).ToList();

                    foreach (SingleplayerSavedGameInfo savedGame in savedGames)
                    {
                        Invoke(new Action(() => loadedGamesListBox.Items.Add(savedGame)));
                    }
                }
            });
        }
コード例 #7
0
        private void Start(object sender, EventArgs e)
        {
            try
            {
                Map map = mapSettingsControl.GetMap();

                IList <AiPlayer> aiPlayers = aiPlayerSettingsControl.GetPlayers();

                IList <Player> players = new List <Player>();
                foreach (AiPlayer aiPlayer in aiPlayers)
                {
                    players.Add(aiPlayer);
                }

                players.Add(myHumanPlayerControl.GetPlayer());

                Game game = null;
                // generate id for the game
                using (UtilsDbContext db = new UtilsDbContext())
                {
                    IEnumerable <SingleplayerSavedGameInfo> savedGamesEnum =
                        db.SingleplayerSavedGameInfos.AsEnumerable();
                    SingleplayerSavedGameInfo lastGame = savedGamesEnum.LastOrDefault();
                    int gameId = 1;
                    if (lastGame != null)
                    {
                        gameId = lastGame.Id + 1;
                    }

                    var factory = new GameFactory();
                    game = factory.CreateGame(gameId, GameType.SinglePlayer, map, players, fogOfWar: fogOfWarCheckBox.Checked);
                }


                OnGameStarted?.Invoke(game);
            }
            catch (UnauthorizedAccessException)
            {
                MessageBox.Show(
                    "One or more components required to start the game are missing! Please, reinstall the game!",
                    "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #8
0
        public void RefreshSavedGames()
        {
            Task.Run(() =>
            {
                using (UtilsDbContext db = new UtilsDbContext())
                {
                    var savedGames = (from game in db.HotseatSavedGameInfos.AsParallel()
                                      orderby game.SavedGameDate descending
                                      select game).ToList();

                    // TODO: might be too slow
                    foreach (HotseatSavedGameInfo savedGame in savedGames)
                    {
                        Invoke(new Action(() => loadedGamesListBox.Items.Add(savedGame)));
                    }
                    // TODO: data binding
                }
            });
        }
コード例 #9
0
        public void Initialize(Game game)
        {
            if (game == null)
            {
                throw new ArgumentException("Game cannot be null.");
            }

            MapImageProcessor mapImageProcessor;

            using (UtilsDbContext db = new UtilsDbContext())
            {
                MapInfo mapInfo = (from item in db.Maps
                                   where item.Id == game.Map.Id
                                   select item).First();

                mapImageProcessor = MapImageProcessor.Create(game.Map, mapInfo.ImageColoredRegionsPath,
                                                             mapInfo.ColorRegionsTemplatePath, mapInfo.ImagePath, game.IsFogOfWar);
            }

            // initialize game
            switch (game.GameType)
            {
            case GameType.SinglePlayer:
                gameFlowHandler = new SingleplayerGameFlowHandler(game, mapImageProcessor);
                break;

            case GameType.MultiplayerHotseat:
                gameFlowHandler = new HotseatGameFlowHandler(game, mapImageProcessor);
                break;

            case GameType.MultiplayerNetwork:
                throw new NotImplementedException();
            }

            // initialize map processor
            mapHandlerControl.Initialize(gameFlowHandler);
            gameFlowHandler.OnRoundPlayed += () =>
            {
                using (UtilsDbContext db = new UtilsDbContext())
                {
                    gameFlowHandler.Game.Save(db);
                }
            };
            gameFlowHandler.OnBegin += () =>
            {
                MessageBox.Show($"Player {gameFlowHandler.PlayerOnTurn.Name} is on turn.");
            };
            gameFlowHandler.OnEnd += player =>
            {
                MessageBox.Show($"Player {player.Name} has won the game!");
                beginGamePhaseControl.Hide();
                turnPhaseControl.Hide();
                beginRoundPhaseControl.Hide();
                GameState = GameState.GameEnd;
            };

            beginGamePhaseControl.Initialize(gameFlowHandler);
            turnPhaseControl.Initialize(gameFlowHandler);

            // initialize game state
            if (game.RoundNumber == 0)
            {
                GameState = GameState.GameBeginning;
                beginGamePhaseControl.Show();

                gameFlowHandler.Begin();
            }
            else if (game.IsFinished())
            {
                gameFlowHandler.End();
            }
            else
            {
                GameState = GameState.RoundBeginning;

                beginRoundPhaseControl.Show();

                gameFlowHandler.Begin();
            }
        }