예제 #1
0
        public Graph(AntModel antModel)
        {
            AntModel   = antModel;
            PlanetSize = AntModel.Map["areas"].Count; //shortcut
            RowSize    = (int)Math.Sqrt(PlanetSize);  //shortcut !!! requires squere

            GraphBody = BuildGraph(antModel, PlanetSize, RowSize);
            StartNode = AntModel.GetStartingNode(this);
            EndNode   = AntModel.GetEndingNode(this);
        }
예제 #2
0
        public GraphNode[] BuildGraph(AntModel antModel, int planetSize, int planetRowSize)
        {
            var tempGraph = new GraphNode[planetSize];

            var i = 0;

            foreach (var conn in antModel.Map["areas"])
            {
                tempGraph[i] = new GraphNode(i, conn, planetRowSize);
                i++;
            }
            return(tempGraph);
        }
예제 #3
0
        public void AddBots(IEnumerable<ICompetitor> competitors)
        {
            _competitors = competitors;

            foreach (var competitor in _competitors)
            {
                var viewModel = new AntViewModel();
                var antModel = new AntModel(viewModel, competitor);

                do
                {
                    antModel.X = _rand.Next(0, _antWarsViewModel.ColumnCount);
                    antModel.Y = _rand.Next(0, _antWarsViewModel.RowCount);
                } while (!IsMoveValid(antModel.X, antModel.Y));

                _antWarsViewModel.MovableObjectsCollection.Add(antModel);
            }
        }
예제 #4
0
        public void AddBots(IEnumerable <ICompetitor> competitors)
        {
            _competitors = competitors;

            foreach (var competitor in _competitors)
            {
                var viewModel = new AntViewModel();
                var antModel  = new AntModel(viewModel, competitor);

                do
                {
                    antModel.X = _rand.Next(0, _antWarsViewModel.ColumnCount);
                    antModel.Y = _rand.Next(0, _antWarsViewModel.RowCount);
                } while (!IsMoveValid(antModel.X, antModel.Y));

                _antWarsViewModel.MovableObjectsCollection.Add(antModel);
            }
        }
예제 #5
0
 public void updateAntFeelings(AntModel model)
 {
     mainGraphics.transform.localScale = Vector3.one;
     if (model.SlowMove())
     {
         mainGraphics.transform.localScale = Vector3.one * 1.5f;
     }
     feelingsRenderer.enabled = false;
     if (model.IsConfused())
     {
         feelingsRenderer.sprite  = confusion;
         feelingsRenderer.enabled = true;
     }
     if (model.IsHungry() && blinkCutoff())
     {
         feelingsRenderer.color   = new Color(1f, 1f, 1f);
         feelingsRenderer.sprite  = hunger;
         feelingsRenderer.enabled = true;
         if (model.IsStarving())
         {
             feelingsRenderer.sprite = starving;
         }
     }
 }
예제 #6
0
        public static void RunAntQuest(JsonTypes jsonWorker, PathAlgorithms pathAlgorithm, bool DEBUG, string url = "")
        {
            try
            {
                var sw = new Stopwatch();
                sw.Start();

                Console.WriteLine("Running ANT QUEST for {0} and {1}", jsonWorker, pathAlgorithm);

                AntModel antModel = JsonSimpleFactory.GetJsonData(jsonWorker, url);
                if (DEBUG)
                {
                    Console.WriteLine("Obtaining data took: {0} ms", sw.Elapsed.Milliseconds);
                }

                sw.Restart();

                var antGraph = new Graph(antModel);
                if (DEBUG)
                {
                    Console.WriteLine("Graph preparation took: {0} ms", sw.Elapsed.Milliseconds);
                }

                sw.Restart();

                var pathFinder = PathFinderFactory.PathFactory(antGraph, pathAlgorithm);
                var path       = pathFinder.FindPath();
                var pathString = pathFinder.GetPathSimpleString(path);

                if (DEBUG)
                {
                    Console.WriteLine("Path finding took: {0} ms", sw.Elapsed.Milliseconds);
                }
                if (DEBUG)
                {
                    Console.WriteLine("Final path is: {0}", pathString);
                }

                sw.Restart();

                if (jsonWorker == JsonTypes.TEST || jsonWorker == JsonTypes.URL || jsonWorker == JsonTypes.API_QUADIENT)
                {
                    var serverResponse =
                        JsonSimpleFactory.SendJsonResponse(jsonWorker, antGraph.ID, pathString, url);
                    Console.WriteLine(serverResponse.Message);

                    if (serverResponse.Valid && serverResponse.InTime && DEBUG)
                    {
                        Console.WriteLine("Test passed");
                    }
                    else if (DEBUG)
                    {
                        Console.WriteLine("Test failed");
                    }
                }

                if (DEBUG)
                {
                    Console.WriteLine("Sending data took: {0} ms", sw.Elapsed.Milliseconds);
                }

                sw.Stop();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
예제 #7
0
        private async Task<RoundPartialHistory> PerformMove(AntModel movableObject, int roundNumber)
        {
            var move = await movableObject.NextMoveAsync(null);
            var actionDescription = move.Action.ToString() + " ";

            if (move.ActionDirection != null)
            {
                actionDescription += move.ActionDirection.Value.ToString() + ". ";
            }

            switch (move.Action)
            {
                case AvailableActions.Move:
                    {
                        switch (move.ActionDirection)
                        {
                            case ActionDirections.Down:
                                {
                                    if (IsMoveValid(movableObject.X, movableObject.Y + 1))
                                    {
                                        movableObject.Down();
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                            case ActionDirections.Up:
                                {
                                    if (IsMoveValid(movableObject.X, movableObject.Y - 1))
                                    {
                                        movableObject.Up();
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                            case ActionDirections.Left:
                                {
                                    if (IsMoveValid(movableObject.X - 1, movableObject.Y))
                                    {
                                        movableObject.Left();
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                            case ActionDirections.Right:
                                {
                                    if (IsMoveValid(movableObject.X + 1, movableObject.Y))
                                    {
                                        movableObject.Right();
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                        }
                        break;
                    }
                case AvailableActions.Watch:
                    {
                        // movableObject.Watch();
                        break;
                    }
                case AvailableActions.FireMissile:
                    {

                        switch (move.ActionDirection)
                        {
                            case ActionDirections.Down:
                                {
                                    if (IsMoveValid(movableObject.X, movableObject.Y + 1))
                                    {
                                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                            case ActionDirections.Up:
                                {
                                    if (IsMoveValid(movableObject.X, movableObject.Y - 1))
                                    {
                                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                            case ActionDirections.Left:
                                {
                                    if (IsMoveValid(movableObject.X - 1, movableObject.Y))
                                    {
                                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                            case ActionDirections.Right:
                                {
                                    if (IsMoveValid(movableObject.X + 1, movableObject.Y))
                                    {
                                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                                    }
                                    else
                                    {
                                        actionDescription += "Lost his move.";
                                    }
                                    break;
                                }
                        }
                        break;
                    }
            }

            return new RoundPartialHistory
            {
                Caption = string.Format("Round {0} {1}: {2}", roundNumber, movableObject.Competitor.Name, actionDescription),
            };
        }
예제 #8
0
 public static FoodModel DeadAnt(AntModel fromAnt)
 {
     return(new FoodModel(Type.DEAD_ANT, fromAnt.Position, DEFAULT_RADIUS, 1.0f - fromAnt.Hunger + 0.1f, fromAnt.Poison));
 }
예제 #9
0
        private async Task <RoundPartialHistory> PerformMove(AntModel movableObject, int roundNumber)
        {
            var move = await movableObject.NextMoveAsync(null);

            var actionDescription = move.Action.ToString() + " ";

            if (move.ActionDirection != null)
            {
                actionDescription += move.ActionDirection.Value.ToString() + ". ";
            }

            switch (move.Action)
            {
            case AvailableActions.Move:
            {
                switch (move.ActionDirection)
                {
                case ActionDirections.Down:
                {
                    if (IsMoveValid(movableObject.X, movableObject.Y + 1))
                    {
                        movableObject.Down();
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }

                case ActionDirections.Up:
                {
                    if (IsMoveValid(movableObject.X, movableObject.Y - 1))
                    {
                        movableObject.Up();
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }

                case ActionDirections.Left:
                {
                    if (IsMoveValid(movableObject.X - 1, movableObject.Y))
                    {
                        movableObject.Left();
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }

                case ActionDirections.Right:
                {
                    if (IsMoveValid(movableObject.X + 1, movableObject.Y))
                    {
                        movableObject.Right();
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }
                }
                break;
            }

            case AvailableActions.Watch:
            {
                // movableObject.Watch();
                break;
            }

            case AvailableActions.FireMissile:
            {
                switch (move.ActionDirection)
                {
                case ActionDirections.Down:
                {
                    if (IsMoveValid(movableObject.X, movableObject.Y + 1))
                    {
                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }

                case ActionDirections.Up:
                {
                    if (IsMoveValid(movableObject.X, movableObject.Y - 1))
                    {
                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }

                case ActionDirections.Left:
                {
                    if (IsMoveValid(movableObject.X - 1, movableObject.Y))
                    {
                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }

                case ActionDirections.Right:
                {
                    if (IsMoveValid(movableObject.X + 1, movableObject.Y))
                    {
                        _listOfMissilesToFire.Add(movableObject.FireMissile(move.ActionDirection.Value));
                    }
                    else
                    {
                        actionDescription += "Lost his move.";
                    }
                    break;
                }
                }
                break;
            }
            }

            return(new RoundPartialHistory
            {
                Caption = string.Format("Round {0} {1}: {2}", roundNumber, movableObject.Competitor.Name, actionDescription),
            });
        }