示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }