Example #1
0
        public MapTile GetTileTo(AntWrapper ant, AntAction action)
        {
            var x = ant.CurrentTile.X;
            var y = ant.CurrentTile.Y;

            switch (action)
            {
            case AntAction.ShootRight:
            case AntAction.EchoRight:
                return(GetTileTo(() => ++ x, () => y));

            case AntAction.ShootDown:
            case AntAction.EchoDown:
                return(GetTileTo(() => x, () => ++ y));

            case AntAction.ShootLeft:
            case AntAction.EchoLeft:
                return(GetTileTo(() => -- x, () => y));

            case AntAction.ShootUp:
            case AntAction.EchoUp:
                return(GetTileTo(() => x, () => -- y));
            }

            return(null);
        }
Example #2
0
 private static void AntCollision(int x, int y, AntWrapper ant, MapTile tile, Action <AntWrapper, GameEvent> sideEvents)
 {
     if (x == ant.CurrentTile.X)
     {
         sideEvents(tile.OccupiedBy, y < ant.CurrentTile.Y ? GameEvent.ImpactDamageDown : GameEvent.ImpactDamageUp);
     }
     else
     {
         sideEvents(tile.OccupiedBy, x < ant.CurrentTile.X ? GameEvent.ImpactDamageRight : GameEvent.ImpactDamageLeft);
     }
 }
Example #3
0
 public static int CalculateDistance(AntWrapper ant, MapTile tile)
 {
     return(CalculateDistance(ant, tile.X, tile.Y));
 }
Example #4
0
        public GameEvent MoveTo(int x, int y, AntWrapper ant, Action <AntWrapper, GameEvent> sideEvents)
        {
            if (IsEdge(x, y))
            {
                return(GameEvent.CollisionDamage);
            }

            var tile = this[x, y];

            var eventResult = GameEvent.Nothing;

            switch (tile.Item)
            {
            case Item.Empty:
                eventResult = GameEvent.Nothing;
                break;

            case Item.SteelWall:
            case Item.BrickWall:
                return(GameEvent.CollisionDamage);

            case Item.Bomb:
                eventResult = GameEvent.BombDamage;
                break;

            case Item.PowerUpBomb:
                eventResult = GameEvent.PickUpBomb;
                break;

            case Item.PowerUpHealth:
                eventResult = GameEvent.PickUpHealth;
                break;

            case Item.PowerUpShield:
                eventResult = GameEvent.PickUpShield;
                break;

            case Item.Flag:
                eventResult = GameEvent.PickUpFlag;
                break;

            case Item.RedHome:
            case Item.BlueHome:
            case Item.GreenHome:
            case Item.OrangeHome:
            case Item.PinkHome:
            case Item.YellowHome:
            case Item.GrayHome:
            case Item.WhiteHome:
                if (ant.HasFlag && tile.Item == ant.AntHome)
                {
                    return(GameEvent.GameOver);
                }
                return(GameEvent.CollisionDamage);
            }

            if (tile.OccupiedBy != null)
            {
                AntCollision(x, y, ant, tile, sideEvents);
                return(GameEvent.CollisionDamage);
            }

            ant.CurrentTile = tile;
            tile.Item       = Item.Empty;
            return(eventResult);
        }
Example #5
0
 public static int CalculateDistance(AntWrapper ant, int x, int y)
 {
     return(Math.Abs(x - ant.CurrentTile.X + y - ant.CurrentTile.Y));
 }