public string NextAction(LegacyMap map, IPlayer player) { if (path == null) { return(null); } else if (idx < path.Length) { Point p = path[idx]; var type = map.tileTypeMap[p.X, p.Y]; if (type == TileContent.Lava || type == TileContent.Resource || type == TileContent.Unknown) { return(null); } else if (type == TileContent.Wall) { Console.WriteLine("RAWR"); return(AIHelper.CreateMeleeAttackAction(p - player.Position)); //hotfix degueu } idx++; return(AIHelper.CreateMoveAction(p - player.Position)); } else { return(null); } }
public static MultipleActions MoveThenCollect(IPlayer player, LegacyMap map, Point target) { Move move = Move.MoveAdjencent(player, map, target); Collect collect = new Collect(target); return(new MultipleActions(new HighAction[] { move, collect })); }
public string NextAction(LegacyMap map, IPlayer player) { if (!done) { done = true; Console.WriteLine(target - player.Position); return(AIHelper.CreateCollectAction(target - player.Position)); } else { return(null); } }
public static Move MoveAdjencent(IPlayer player, LegacyMap m, Point target) { Point diff = target - player.Position; if (diff.X >= diff.Y) { diff = new Point(diff.X > 0 ? 1 : -1, 0); } else { diff = new Point(0, diff.Y > 0 ? 1 : -1); } return(new Move(player, m, target - diff)); }
public string NextAction(LegacyMap map, IPlayer player) { string next = null; while (next == null) { next = actions[idx]?.NextAction(map, player); if (next == null) { ++idx; } if (idx >= actions.Length) { break; } } return(next); }
public Point GetClosestMineralPosition(IPlayer player, LegacyMap map) { int max_x = 0; int max_y = 0; bool online = GameController.playerBot.PlayerInfo.Name != "Player 1"; if (!online) { max_x = 66; max_y = 66; } else { max_x = 132; max_y = 198; } Point centerOfSearch = player.Position; for (int edge = 1; edge < max_x && edge < max_y; edge++) { for (int i = centerOfSearch.X - edge; i < max_x && i < centerOfSearch.X + edge; i++) { if (i >= 0) { for (int j = centerOfSearch.Y - edge; j < max_y && j < centerOfSearch.Y + edge; j++) { if (j >= 0) { if (map.tileTypeMap[i, j] == TileContent.Resource) { return(new Point(i, j)); } } } } } } // Retourner a la maison si jamais on trouve rien return(player.HouseLocation); }
public List <Point> GetFreeAdjacentPositions(Point position, LegacyMap map) { List <Point> adjacentPositions = new List <Point>(); if (position.X + 1 < GameController.playerBot.x_max && map.tileTypeMap[position.X + 1, position.Y] == TileContent.Empty) { adjacentPositions.Add(new Point(position.X + 1, position.Y)); } if (position.X - 1 >= 0 && map.tileTypeMap[position.X - 1, position.Y] == TileContent.Empty) { adjacentPositions.Add(new Point(position.X - 1, position.Y)); } if (position.Y + 1 < GameController.playerBot.y_max && map.tileTypeMap[position.X, position.Y + 1] == TileContent.Empty) { adjacentPositions.Add(new Point(position.X, position.Y + 1)); } if (position.Y - 1 >= 0 && map.tileTypeMap[position.X, position.Y - 1] == TileContent.Empty) { adjacentPositions.Add(new Point(position.X, position.Y - 1)); } return(adjacentPositions); }
public Move(IPlayer player, LegacyMap map, Point target) { Node goal = new Node(null, target, null, map.tileTypeMap[target.X, target.Y]); Node start = new Node(goal, player.Position, null, map.tileTypeMap[player.Position.X, player.Position.Y]); var a = new AStar.AStar(start, goal); var status = a.Run(); // debug show path Console.WriteLine("Current Goal : " + goal.Point.X + ", " + goal.Point.Y); Console.WriteLine("Goal node type : " + goal.tileContent.ToString()); if (status != AStar.State.GoalFound) { path = null; Console.WriteLine("Cannot find path"); } else { var nodes = a.GetPath(); int size = 0; foreach (var _ in nodes) { ++size; } path = new Point[size - 1]; int idx = 0; foreach (var n in nodes) { if (idx != 0) { Node node = (Node)n; path[idx - 1] = node.Point; } idx++; } } }
public static void PickStrategy(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map) { if (!IsFighting(player, visiblePlayers)) { currentStrategy = new MiningStrategy(); } }
public override string GetNextMove(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map) { throw new NotImplementedException(); }
public override string GetNextMove(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map) { Point direction = new Point(ennemy.Position.X - player.Position.X, ennemy.Position.Y - player.Position.Y); return(AIHelper.CreateMeleeAttackAction(direction)); }
public override string GetNextMove(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map) { // Dropper nos ressoruces si on est colles a la maison if (Point.DistanceManhatan(player.HouseLocation, player.Position) == 0 && player.CarriedResources > 0) { return(AIHelper.CreateEmptyAction()); } // Verifier si on doit rentrer pour drop nos ressources if (player.CarryingCapacity - player.CarriedResources < 100) { Move moveTowardsHome = new Move(player, map, player.HouseLocation); return(moveTowardsHome.NextAction(map, player)); } // Trouver le filon le plus proche Point closestMineralPosition = GetClosestMineralPosition(player, map); // Si le filon le plus proche renvoit la maison, ca veut dire quon ne truove rien proche de nous. Nous allons donc aller explorer. //if (closestMineralPosition.X == player.HouseLocation.X && closestMineralPosition.Y == player.HouseLocation.Y) //{ // Random random = new Random(); // int randomlyGeneratedNumber = random.Next(1, 3); // if (randomlyGeneratedNumber == 1) // { // Move moveTowardsHome = new Move(player, map, new Point(player.Position.X + 1, player.Position.Y)); // return moveTowardsHome.NextAction(map, player); // } // else // { // Move moveTowardsHome = new Move(player, map, new Point(player.Position.X, player.Position.Y -1)); // return moveTowardsHome.NextAction(map, player); // } //} Console.WriteLine(""); // Sinon, good, on a qqch a miner. On trouve la case a partir de laquelle on va miner Point closestMineralAdjacentPosition = GetClosestFreeAdjacentPosition(player, closestMineralPosition, map); // Si on est colles au filon, le miner if (Point.DistanceManhatan(closestMineralPosition, player.Position) <= 1) { return(AIHelper.CreateCollectAction(new Point(closestMineralPosition.X - player.Position.X, closestMineralPosition.Y - player.Position.Y))); } // Si aller passer par la maison avant daller au filon ne nous ralenti pas, on va aller a la maison tds // Verifier si on doit rentrer pour drop nos ressources if ((player.CarriedResources >= 500) && ((player.Position.X <= player.HouseLocation.X && closestMineralAdjacentPosition.X >= player.HouseLocation.X && player.Position.Y <= player.HouseLocation.Y && closestMineralAdjacentPosition.Y >= player.HouseLocation.Y) || (player.Position.X <= player.HouseLocation.X && closestMineralAdjacentPosition.X >= player.HouseLocation.X && player.Position.Y >= player.HouseLocation.Y && closestMineralAdjacentPosition.Y <= player.HouseLocation.Y) || (player.Position.X >= player.HouseLocation.X && closestMineralAdjacentPosition.X <= player.HouseLocation.X && player.Position.Y >= player.HouseLocation.Y && closestMineralAdjacentPosition.Y <= player.HouseLocation.Y) || (player.Position.X >= player.HouseLocation.X && closestMineralAdjacentPosition.X <= player.HouseLocation.X && player.Position.Y <= player.HouseLocation.Y && closestMineralAdjacentPosition.Y >= player.HouseLocation.Y))) { Move moveTowardsHome = new Move(player, map, player.HouseLocation); return(moveTowardsHome.NextAction(map, player)); } // Si on est pas colles, quon rentre pas, aller vers le filon Move moveTowardsMineral = new Move(player, map, closestMineralAdjacentPosition); return(moveTowardsMineral.NextAction(map, player)); }
public Point GetClosestFreeAdjacentPosition(IPlayer player, Point position, LegacyMap map) { List <Point> freeAdjacentPositions = GetFreeAdjacentPositions(position, map); return(freeAdjacentPositions.OrderByDescending(p => Point.DistanceManhatan(p, player.Position)).LastOrDefault()); }
public virtual string GetNextMove(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map) { return(""); }
/*PlayerInfo enemie; * bool done = false; * public Attack(PlayerInfo enemie) * { * this.enemie = enemie; * } * public string NextAction(LegacyMap map, IPlayer gameInfo) * { * if (!done) * { * done = true; * return AIHelper.CreateAttackAction(enemie.Position); * } * else * { * return null; * } * }*/ public string NextAction(LegacyMap map, IPlayer player) { throw new NotImplementedException(); }