예제 #1
0
        public CommandResponse Execute(GameState game, string[] args)
        {
            switch (args[0])
            {
                case "super_regions":
                    for (int i = 1; i < args.Length; i += 2)
                        game.Map.SuperRegions.Add(new SuperRegion(int.Parse(args[i]), int.Parse(args[i + 1])));
                    break;

                case "regions":
                    for (int i = 1; i < args.Length; i += 2)
                        game.Map.Regions.Add(new Region(int.Parse(args[i]), game.Map.SuperRegions[int.Parse(args[i + 1])]));
                    break;

                case "neighbors":
                    for (int i = 1; i < args.Length; i+=2)
                    {
                        var region = game.Map.Regions[int.Parse(args[i])];

                        foreach (string neighborId in args[i + 1].Split(new[] {','}))
                        {
                            var neighbor = game.Map.Regions[int.Parse(neighborId)];

                            region.Neighbors.Add(neighbor);
                            neighbor.Neighbors.Add(region);
                        }
                    }

                    break;
            }

            return new CommandResponse(CommandAction.None);
        }
예제 #2
0
        public CommandResponse Execute(GameState game, string[] args)
        {
            var updatedRegions = new Regions();

            // Update visible regions
            for (int i = 0; i < args.Length; i += 3)
            {
                int regionId = int.Parse(args[i]);
                int armies = int.Parse(args[i + 2]);
                string ownerId = args[i + 1];

                Region region = game.Map.Regions[regionId];

                region.Armies = armies;
                region.IsVisible = true;

                if (ownerId == "neutral")
                    region.Owner = null;
                else
                    region.Owner = ownerId == game.Bot.BotPlayer.Id ? game.Bot.BotPlayer : game.Opponents[args[i + 1]];

                updatedRegions.Add(region);
            }

            // Mark invisible regions as such.  Leave the previous info in place for now.
            game.Map.Regions.Except(updatedRegions).ToList().ForEach(r =>
            {
                r.IsVisible = false;
            });

            return new CommandResponse(CommandAction.None);
        }
        public CommandResponse Execute(GameState game, string[] args)
        {
            var availableOptions = new Regions();

            for (int i = 1; i < args.Length; i++)
                availableOptions.Add(game.Map.Regions[int.Parse(args[i])]);

            Regions selectedRegions = game.Bot.PickStartingRegions(game.Map, availableOptions);

            return new CommandResponse(CommandAction.SendData,
                string.Join(" ", selectedRegions.Select(r => r.Id.ToString())));
        }
예제 #4
0
        public CommandResponse Execute(GameState game, string[] args)
        {
            switch (args[0])
            {
                case "your_bot":
                    game.Bot.BotPlayer = new Player(args[1], friendly: true);
                    break;

                case "opponent_bot":
                    game.Opponents.Add(new Player(args[1]));
                    break;

                case "starting_armies":
                    game.BeginNewTurn();
                    game.Bot.BotPlayer.DeployableArmies = int.Parse(args[1]);
                    break;
            }

            return new CommandResponse(CommandAction.None);
        }
예제 #5
0
        public CommandResponse Execute(GameState game, string[] args)
        {
            var response = new StringBuilder();

            switch (args[0])
            {
                case "place_armies":
                    foreach (ArmyPlacement placement in game.Bot.PlaceArmies(game.Map))
                        response.AppendFormat("{0} place_armies {1} {2},",
                            game.Bot.BotPlayer.PlayerName, placement.Region.Id, placement.Armies);
                    break;

                case "attack/transfer":
                    foreach (AttackTransfer move in game.Bot.AttackTransfer(game.Map))
                        response.AppendFormat("{0} attack/transfer {1} {2} {3},",
                            game.Bot.BotPlayer.PlayerName, move.Source.Id, move.Target.Id, move.Armies);
                    break;
            }

            if (response.Length == 0)
                response.Append("No moves");

            return new CommandResponse(CommandAction.SendData, response.ToString().TrimEnd(new[]{','}));
        }
예제 #6
0
 public CommandManager(GameState game)
 {
     _game = game;
 }
예제 #7
0
 public CommandResponse Execute(GameState game, string[] args)
 {
     return new CommandResponse(CommandAction.Quit);
 }
 public CommandResponse Execute(GameState game, string[] args)
 {
     return new CommandResponse(CommandAction.None); // Noop for now
 }