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); }
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); }
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); } }
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); } }
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; } } }
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); } }
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), }; }
public static FoodModel DeadAnt(AntModel fromAnt) { return(new FoodModel(Type.DEAD_ANT, fromAnt.Position, DEFAULT_RADIUS, 1.0f - fromAnt.Hunger + 0.1f, fromAnt.Poison)); }
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), }); }