//constructor initialises the grid array public Level() { tiles = new int[gridSize, gridSize]; for (int i = 0; i < gridSize; i++) { for (int j = 0; j < gridSize; j++) { tiles[i, j] = 0; } } aStar = new AStar(); dijkstra = new Dijkstra(); scentMap = new ScentMap(40, 40); }
protected override void ChooseNextGridLocation(Map level, Player plr) { try { if (level.pathfinder.GetAlgorithm() != PathfinderAlgorithm.ScentMap) { throw new Exception("Wrong bot used for pathfinding algorithm."); } // Get a copy of the scent map ScentMap map = (level.pathfinder as ScentMap); // Get neighbouring coordinates Coord2[] neighbours = GetNeighbours(); Coord2 highest = new Coord2(0, 0); bool validFound = false; for (int i = 0; i < neighbours.Length; i++) // Ensures a valid position is initially selected { if (level.ValidPosition(neighbours[i])) { highest = neighbours[i]; validFound = true; break; } } if (validFound) // Only update if at least one neighbouring positon is in fact valid on the map { // Find the highest neighbouring coorindate for (int i = 0; i < neighbours.Length; i++) { if (level.ValidPosition(neighbours[i])) { if (map.Scents.data[neighbours[i].X, neighbours[i].Y] > map.Scents.data[highest.X, highest.Y]) { highest = neighbours[i]; } } } SetNextGridPosition(highest, level); } } catch (Exception e) { Console.WriteLine("Bot Exception: " + e.Message); } }