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); }
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); } }
public static int CalculateDistance(AntWrapper ant, MapTile tile) { return(CalculateDistance(ant, tile.X, tile.Y)); }
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); }
public static int CalculateDistance(AntWrapper ant, int x, int y) { return(Math.Abs(x - ant.CurrentTile.X + y - ant.CurrentTile.Y)); }