Example #1
0
        //---------------------------------------------- Properties ----------------------------------------------


        //---------------------------------------------- Ctor ----------------------------------------------
        public RushBot(game.map.GameMap Map,
                       byte botId
                       ) : base(Map, botId)
        {
            cities = Map.Cities;
            units  = Map.Units;
        }
Example #2
0
        //---------------------------------------------- Ctor ----------------------------------------------
        public BasicBot(game.map.GameMap Map,
                        byte botId)
        {
            map      = Map;
            PlayerId = botId;

            this.SetSettings(this.CreateLinkedSetting());
        }
        public static void Init(game.map.GameMap map, byte controlsCnt)
        {
            ControlInfoForParts = new List <Dictionary <city.BasicCity, UnitsMovingToCity> >(controlsCnt + 1);
            for (int i = 0; i < controlsCnt + 1; ++i)
            {
                ControlInfoForParts.Add(new Dictionary <city.BasicCity, UnitsMovingToCity>());
            }

            foreach (var city in map.Cities)
            {
                //if (city.PlayerId != 0)
                ControlInfoForParts[city.PlayerId].Add(city, new UnitsMovingToCity());


                city.Captured += (args) => {
                    ControlInfoForParts[args.newPlayerId].Add(args.city, ControlInfoForParts[args.prevPlayerId][args.city]);
                    ControlInfoForParts[args.prevPlayerId].Remove(args.city);

                    foreach (var unit in ControlInfoForParts[args.newPlayerId][args.city].AllyUnitsMovingToCity)
                    {
                        ControlInfoForParts[args.newPlayerId][args.city].EnemyUnitsMovingToCity.Add(unit);
                    }
                    ControlInfoForParts[args.newPlayerId][args.city].AllyUnitsMovingToCity.Clear();

REPEAT_ALLY_FILL:
                    foreach (var unit in ControlInfoForParts[args.newPlayerId][args.city].EnemyUnitsMovingToCity)
                    {
                        if (unit.PlayerId == args.city.PlayerId)
                        {
                            ControlInfoForParts[args.newPlayerId][args.city].AllyUnitsMovingToCity.Add(unit);
                            ControlInfoForParts[args.newPlayerId][args.city].EnemyUnitsMovingToCity.Remove(unit);
                            goto REPEAT_ALLY_FILL;
                        }
                    }
                };

                city.UnitSend += (args) => {
                    if (args.unit.destination.PlayerId == args.unit.PlayerId)
                    {
                        ControlInfoForParts[args.unit.destination.PlayerId][args.unit.destination]
                        .AllyUnitsMovingToCity.Add(args.unit);
                    }
                    else
                    {
                        ControlInfoForParts[args.unit.destination.PlayerId][args.unit.destination]
                        .EnemyUnitsMovingToCity.Add(args.unit);
                    }
                };

                city.UnitGet += (args) => {
                    if (args.unit.destination.PlayerId == args.unit.PlayerId)
                    {
                        ControlInfoForParts[args.unit.destination.PlayerId][args.unit.destination]
                        .AllyUnitsMovingToCity.Remove(args.unit);
                    }
                    else
                    {
                        ControlInfoForParts[args.unit.destination.PlayerId][args.unit.destination]
                        .EnemyUnitsMovingToCity.Remove(args.unit);
                    }
                };

                city.Captured += (args) => {
                    foreach (var i in ControlInfoForParts[args.prevPlayerId])
                    {
                        i.Key.ClearHashedPath();
                    }
                    foreach (var i in ControlInfoForParts[args.newPlayerId])
                    {
                        i.Key.ClearHashedPath();
                    }
                };
            }
        }