public void LoadLevel() { Room[] rooms = LoadFromFile(); PrintWorld(rooms, Path <TileNode> .EMPTY); TileNode start = null, goal = null; foreach (Room r in rooms) { GameTypes.IntPoint localStart = r.WorldToLocalPoint(new GameTypes.IntPoint(-8, 1)); GameTypes.IntPoint localGoal = r.WorldToLocalPoint(new GameTypes.IntPoint(17, 6)); if (r.GetTileType(localStart) == TileType.FLOOR) { start = r.GetTile(localStart); } if (r.GetTileType(localGoal) == TileType.FLOOR) { goal = r.GetTile(localGoal); } } Assert.NotNull(start); Assert.NotNull(goal); }
public void FindPathManyRooms() { Room[] rooms = LoadFromFile(); PrintWorld(rooms, Path <TileNode> .EMPTY); TileNode start = null, goal = null; foreach (Room r in rooms) { GameTypes.IntPoint localStart = r.WorldToLocalPoint(new GameTypes.IntPoint(-8, 1)); GameTypes.IntPoint localGoal = r.WorldToLocalPoint(new GameTypes.IntPoint(17, 6)); if (r.GetTileType(localStart) == TileType.FLOOR) { start = r.GetTile(localStart); } if (r.GetTileType(localGoal) == TileType.FLOOR) { goal = r.GetTile(localGoal); } } Assert.NotNull(start); Assert.NotNull(goal); PathSolver <TileNode> solver = new PathSolver <TileNode>(); MultiRoomNetwork roomNetwork = new MultiRoomNetwork(rooms); var foundPath = solver.FindPath(start, goal, roomNetwork); Assert.AreEqual(PathStatus.FOUND_GOAL, foundPath.status); PrintWorld(rooms, foundPath); }
private static void PrintWorld(Room[] rooms, Path <TileNode> pPath) { StringBuilder sb = new StringBuilder(); for (int y = -1; y < 20; y++) { sb.Append(y.ToString()[y.ToString().Length - 1]); for (int x = -10; x < 20; x++) { char result = ' '; foreach (TileNode t in pPath.nodes) { if (t.worldPosition.x == x && t.worldPosition.y == y) { result = 'o'; } } if (result == ' ') { if (y == -1 && x > -10) { result = x.ToString()[x.ToString().Length - 1]; } else { foreach (Room r in rooms) { GameTypes.IntPoint point = r.WorldToLocalPoint(new GameTypes.IntPoint(x, y)); if (r.GetTileType(point.x, point.y) == TileType.WALL) { result = 'x'; } else if (r.GetTileType(point.x, point.y) == TileType.DOOR) { string matches = Regex.Replace((r.GetTile(point.x, point.y) as Door).name, "[A-z]", ""); result = matches[0]; } } } } sb.Append(result); } sb.Append("\r\n"); } Console.Write(sb.ToString()); }