示例#1
0
        public Game()
        {
            settings = GetSettings();

            // Connect players
            if (settings.Players.Count(p => p == PlayerType.AI) > 0)
            {
                SocketForm socketForm = new SocketForm(settings);
                socketForm.Show();
                socketManager = socketForm.CreateSocketManager();
                socketForm.Close();
                if (socketManager == null)
                    return;
            }

            // Setup graphics
            graphics = new FormGraphics();
            graphics.Show();
            graphics.Closed += (sender, args) => Dispose();

            // Get keyboard control
            KeyboardHandler keyboardHandler = new KeyboardHandler(graphics);
            gameManager = new GameManager(settings, keyboardHandler, socketManager, graphics);

            // Start game
            gameManager.Start();
        }
示例#2
0
        public SocketForm(GameSettings settings)
        {
            InitializeComponent();
            this.settings = settings;
            maxClients = settings.Players.Count(p => p == PlayerType.AI);

            Closing += (sender, args) => backgroundWorker1.CancelAsync();
            backgroundWorker1.WorkerReportsProgress = true;
            backgroundWorker1.WorkerSupportsCancellation = true;
        }
示例#3
0
        private static GameSettings GetSettings()
        {
            GameSettings gameSettings = new GameSettings();
            string[] lines = new string[] { };
            if (File.Exists("settings.txt"))
                lines = File.ReadAllLines("settings.txt");

            foreach (string line in lines.Where(l => !l.StartsWith("#")))
            {
                string[] words = line.Split(' ');
                string key = words.FirstOrDefault().ToLower();
                switch (key)
                {
                    case "port":
                        int port;
                        if (int.TryParse(words[1], out port))
                            gameSettings.Port = port;
                        break;
                    case "map":
                        string map = line.Substring(key.Length+1).Replace('"', ' ').Trim();
                        if (File.Exists(map))
                            gameSettings.Map = map;
                        break;
                    case "human":
                        gameSettings.Players.Add(PlayerType.Human);
                        break;
                    case "ai":
                        gameSettings.Players.Add(PlayerType.AI);
                        break;
                    case "test":
                        gameSettings.Players.Add(PlayerType.Test);
                        break;
                }
            }
            if(gameSettings.Port == 0 && !string.IsNullOrEmpty(gameSettings.Map))
                Application.Exit();

            return gameSettings;
        }
示例#4
0
        public GameManager(
            GameSettings gameSettings,
            IInputHandler keyboardHandler,
            SocketManager socketManager,
            IGraphicsHandler graphics)
        {
            this.gameSettings = gameSettings;
            this.graphics = graphics;
            const int ticksPerSecond = 30;
            gameLoop = new GameLoop(5, ticksPerSecond);
            gameLoop.Update += Update;
            gameLoop.Render += Render;

            Map map = new Map(gameSettings.Map);
            world = new World(map);

            int countShip = 0;
            List<Bumpership> bumperships = gameSettings.Players.Take(world.Map.StartPositions.Count)
                .Select(p => CreateBumpership(p, keyboardHandler, socketManager, ref countShip))
                .ToList();
            world.AddShips(bumperships);
        }