Exemple #1
0
        public bool JumpToEdge(Forest f)
        {
            do
            {
                Tree   closestTree           = f.GetClosestTree(VisitedTrees.Last().Value, this);
                double distanceToBorder      = f.GetDistanceToBorder(VisitedTrees.Last().Value);
                double distanceToClosestTree = f.GetDistance(VisitedTrees.Last().Value, closestTree);
                if (distanceToBorder < distanceToClosestTree)
                {
                    CalculatedPath.Add(++Hops, new Tree(9696));

                    // Logging
                    Console.WriteLine($"[{f.Id}]: Monkey {Naam} jumps out of the forest");
                    Global.Log.TaskList.Add(Task.Run(() => Global.Log.ActionLog(f.Id, this.Id, $"[{f.Id}]: Monkey {Naam} jumps out of the forest")));
                    f.TextLogs.Add($"[{f.Id}]: Monkey {Naam} jumps out of the forest");
                }
                else
                {
                    Tree prev = VisitedTrees[Hops];
                    CalculatedPath.Add(++Hops, closestTree);
                    VisitedTrees.Add(Hops, closestTree);

                    // Logging
                    Console.WriteLine($"[{f.Id}]: Monkey {Naam} jumps from {prev.Id} to {closestTree.Id} at {closestTree.X},{closestTree.Y}");
                    Global.Log.TaskList.Add(Task.Run(() => Global.Log.ActionLog(f.Id, this.Id, $"[{f.Id}]: Monkey {Naam} jumps from {prev.Id} to {closestTree.Id} at {closestTree.X},{closestTree.Y}")));
                    Global.Log.TaskList.Add(Task.Run(() => Global.Log.MonkeyLog(f, this, closestTree)));
                    f.TextLogs.Add($"[{f.Id}]: Monkey {Naam} jumps from {prev.Id} to {closestTree.Id} at {closestTree.X},{closestTree.Y}");
                    Global.Log.WriteMonkeyJump(f, prev, closestTree);
                }
            } while (CalculatedPath.Last().Value.Id != 9696);
            return(true);
        }
Exemple #2
0
 public async Task Jump(Forest forest)
 {
     VisitedTrees.Add(ClosestTree);
     CurrentTree.IsOccupied = false;
     forest.Trees[ClosestTree.ID].IsOccupied = true;
     CurrentTree = ClosestTree;
     ClosestTree = null;
 }
Exemple #3
0
        public async Task CalculateClosestTree(Forest forest)
        {
            double distanceToBorder = (new List <double>()
            {
                forest.ymax - CurrentTree.PositionY,
                forest.xmax - CurrentTree.PositionX,
                CurrentTree.PositionY - forest.ymin,
                CurrentTree.PositionX - forest.xmin
            }).Min();
            double distanceToClosestTree = 100;

            foreach (Tree tree in forest.Trees)
            {
                if (!VisitedTrees.Contains(tree) && tree.ID != CurrentTree.ID && !tree.IsOccupied)
                {
                    if (ClosestTree == null && tree != CurrentTree)
                    {
                        ClosestTree = tree;
                    }
                    else
                    {
                        int x1 = CurrentTree.PositionX;
                        int y1 = CurrentTree.PositionY;
                        int x2 = tree.PositionX;
                        int y2 = tree.PositionY;

                        double distanceToTree = Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2));
                        distanceToClosestTree = Math.Sqrt(Math.Pow(x1 - ClosestTree.PositionX, 2) + Math.Pow(y1 - ClosestTree.PositionY, 2));

                        if (distanceToTree < distanceToClosestTree)
                        {
                            ClosestTree = tree;
                        }
                    }
                }
            }
            if (distanceToBorder < distanceToClosestTree)
            {
                Escaped = true;
                await DataBaseManager.WriteMonkeyRecordsToDataBase(this, forest.ID);
            }
            else
            {
                await DataBaseManager.WriteToTextFile(forest);
                await Jump(forest);
            }
        }