コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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 }));
        }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
        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));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
    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);
    }
コード例 #7
0
    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);
    }
コード例 #8
0
        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++;
                }
            }
        }
コード例 #9
0
 public static void PickStrategy(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map)
 {
     if (!IsFighting(player, visiblePlayers))
     {
         currentStrategy = new MiningStrategy();
     }
 }
コード例 #10
0
 public override string GetNextMove(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map)
 {
     throw new NotImplementedException();
 }
コード例 #11
0
    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));
    }
コード例 #12
0
    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));
    }
コード例 #13
0
    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());
    }
コード例 #14
0
 public virtual string GetNextMove(IPlayer player, IEnumerable <IPlayer> visiblePlayers, LegacyMap map)
 {
     return("");
 }
コード例 #15
0
 /*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();
 }