private static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; var strategyGroups = new Dictionary <TeamColor, StrategyGroup> { { TeamColor.Blue, StrategyGroupFactory.Create(StrategyGroupType.Basic) }, { TeamColor.Red, StrategyGroupFactory.Create(StrategyGroupType.Basic) } }; var simulation = new GameSimulation("../../../../ExampleConfig.xml", strategyGroups); _logger = simulation.GameMaster.VerboseLogger; while (true) { var boardVisualizer = new BoardVisualizer(); for (var i = 0;; i++) { if (simulation.GameFinished) { break; } Thread.Sleep(200); boardVisualizer.VisualizeBoard(simulation.GameMaster.Board); Console.WriteLine(i); } if (simulation.GameFinished) { Console.WriteLine($"Game finished - team {simulation.Winners} won!"); simulation.GameFinished = false; } Thread.Sleep(1000); } }
private static Player CreatePlayerFrom(IEnumerable <string> parameters) { bool teamFlag = false, roleFlag = false, addressFlag = false; var ipAddress = default(IPAddress); var port = default(int); var gameConfigPath = default(string); var gameName = default(string); var team = default(TeamColor); var role = default(PlayerType); var loggingMode = LoggingMode.NonVerbose; var blueStrategyGroupTypeFlag = true; var redStrategyGroupTypeFlag = true; var blueStrategyGroupType = StrategyGroupType.Basic; var redStrategyGroupType = StrategyGroupType.Basic; _runtimeMode = RuntimeMode.Console; var options = new OptionSet { { "port=", "port number", (int p) => port = p }, { "conf=", "configuration filename", c => gameConfigPath = c }, { "address=", "server adress or hostname", a => addressFlag = IPAddress.TryParse(a, out ipAddress) }, { "game=", "name of the game", g => gameName = g }, { "team=", "red|blue", t => teamFlag = Enum.TryParse(t, true, out team) }, { "role=", "leader|player", r => roleFlag = Enum.TryParse(r, true, out role) }, { "blueStrategy=", "strategy options", s => blueStrategyGroupTypeFlag = Enum.TryParse(s, true, out blueStrategyGroupType) }, { "redStrategy=", "strategy options", s => redStrategyGroupTypeFlag = Enum.TryParse(s, true, out redStrategyGroupType) }, { "verbose:", "logging mode", v => loggingMode = LoggingMode.Verbose }, { "visualize:", "runtime mode", r => _runtimeMode = RuntimeMode.Visualization } }; options.Parse(parameters); if (loggingMode == LoggingMode.Verbose && _runtimeMode == RuntimeMode.Visualization) { _runtimeMode = RuntimeMode.Console; } if (!addressFlag) { addressFlag = true; var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); ipAddress = ipHostInfo.AddressList[0]; } if (port == default(int) || gameConfigPath == default(string) || gameName == default(string) || !addressFlag || !teamFlag || !roleFlag || !blueStrategyGroupTypeFlag || !redStrategyGroupTypeFlag) { Usage(options); } var configLoader = new XmlLoader <GameConfiguration>(); var config = configLoader.LoadConfigurationFromFile(gameConfigPath); var keepAliveInterval = TimeSpan.FromMilliseconds((int)config.KeepAliveInterval); var communicationClient = new AsynchronousCommunicationClient(new IPEndPoint(ipAddress, port), keepAliveInterval, MessageSerializer.Instance); var strategyGroups = new Dictionary <TeamColor, StrategyGroup> { { TeamColor.Blue, StrategyGroupFactory.Create(blueStrategyGroupType) }, { TeamColor.Red, StrategyGroupFactory.Create(redStrategyGroupType) } }; var player = new Player(communicationClient, gameName, team, role, new ErrorsMessagesFactory(), loggingMode, strategyGroups); return(player); }