public MapGenerator GetMapGenerator(string type, params Object[] additionalParams) { var rm = new MapRandomGenerator(); additionalParams[0] = rm.CurrentRandomMap; switch (type) { case "empty": if (!(additionalParams[0] is int)) { throw new ArgumentException(string.Format("Additional parameters must be of type int for map generator type {0}", type)); } if (!(additionalParams[1] is int)) { throw new ArgumentException(string.Format("Additional parameters must be of type int for map generator type {0}", type)); } int rows = (int)additionalParams[0]; int cols = (int)additionalParams[1]; if (rows < 0 || cols < 0 || rows > MapGenerator.MAX_ROWS || cols > MapGenerator.MAX_COLS) { throw new ArgumentException(string.Format("Rows must be between {0} and {1} and columns must be between {2} and {3}", 0, MapGenerator.MAX_ROWS, 0, MapGenerator.MAX_COLS)); } return(new MapGenerateEmpty(rows, cols)); case "file": if (!(additionalParams[0] is string)) { throw new ArgumentException(string.Format("Argument must contain filename")); } return(new MapGeneratorFromFile((string)additionalParams[0])); default: throw new ArgumentException(string.Format("Unrecognized map generator type {0}", type)); } }
static void Main() { List <PlayerInput> playerInputs = new List <PlayerInput>(); PlayerInputFactory pif = new PlayerInputFactory(); playerInputs.Add(pif.GetPlayerInput(playerInputs.Count, "local", ConsoleKey.W, ConsoleKey.D, ConsoleKey.S, ConsoleKey.A)); playerInputs.Add(pif.GetPlayerInput(playerInputs.Count, "local", ConsoleKey.UpArrow, ConsoleKey.RightArrow, ConsoleKey.DownArrow, ConsoleKey.LeftArrow)); playerInputs.Add(pif.GetPlayerInput(playerInputs.Count, "local", ConsoleKey.I, ConsoleKey.L, ConsoleKey.K, ConsoleKey.J)); //Generating map MapGeneratorFactory mgf = new MapGeneratorFactory(); //MapGenerator mg = mgf.GetMapGenerator("empty", 25, 100); var rm = new MapRandomGenerator();//hacked MapGenerator mg = mgf.GetMapGenerator("file", rm.CurrentRandomMap); VisualizerFactory vf = new VisualizerFactory(); GameEngine engine = new GameEngine(); CommandDispatcher cd = new CommandDispatcher(); foreach (PlayerInput pi in playerInputs) { cd.AddCommandGenerator(pi); } cd.AddCommandReciever(engine); Visualizer vis = vf.GetVisualizer("console", engine); for (int i = 0; i < playerInputs.Count; i++) { engine.AddPlayer(i); } engine.LoadMap(mg); engine.StartGame(); DateTime lastAdvanceTime = DateTime.UtcNow; while (true) { TimeSpan timeDiff = DateTime.UtcNow - lastAdvanceTime; int millisecondDiff = (int)timeDiff.TotalMilliseconds; if (millisecondDiff >= GAME_TICK_LENGTH_MS) { cd.DispatchCommands(); engine.AdvanceOneTick(); vis.VisualizeNow(); lastAdvanceTime = lastAdvanceTime.AddMilliseconds(GAME_TICK_LENGTH_MS); if (!engine.IsGameRunning) { break; } } else { Thread.Sleep(GAME_TICK_LENGTH_MS - millisecondDiff); } } if (engine.IsGameDraw) { vis.DisplayMessage("The game ended in a draw!"); } else { vis.DisplayMessage(string.Format("Player {0} won the game!", engine.WinningPlayerId)); } ConsoleKeyInfo key; do { key = Console.ReadKey(true); } while (key.Key != ConsoleKey.Escape); }