private void createStreets(Compass comingFrom, ref bool[,] matrix) { int RandomXStreet, RandomYStreet; int rnd = Random.Range(2, 6); int[,] values = new int[rnd + 4, 2]; for (int i = 0; i < rnd; i++) { RandomXStreet = Random.Range(1, ChunckSize - 1); RandomYStreet = Random.Range(1, ChunckSize - 1); matrix[RandomXStreet, RandomYStreet] = true; values[i, 0] = RandomXStreet; values[i, 1] = RandomYStreet; } //Bordes para conectar con otras zonas int rand = Random.Range(0, ChunckSize); matrix[0, rand] = true; values[rnd, 0] = 0; values[rnd, 1] = rand; rand = Random.Range(0, ChunckSize); matrix[ChunckSize - 1, rand] = true; values[rnd + 1, 0] = ChunckSize - 1; values[rnd + 1, 1] = rand; rand = Random.Range(0, ChunckSize); matrix[rand, 0] = true; values[rnd + 2, 0] = rand; values[rnd + 2, 1] = 0; rand = Random.Range(0, ChunckSize); matrix[rand, ChunckSize - 1] = true; values[rnd + 3, 0] = rand; values[rnd + 3, 1] = ChunckSize - 1; AStar algorithm = new AStar(); for (int i = 0; i < rnd + 4; i++) { float closestOne = float.PositiveInfinity, secondClosestOne = float.PositiveInfinity; int closestOneIndex = 0, secondClosestOneIndex = 0; for (int j = 0; j < rnd + 4; j++) { float distance = Vector2.Distance(new Vector2(values[i, 0], values[i, 1]), new Vector2(values[j, 0], values[j, 1])); if (i != j && distance < closestOne) { closestOne = distance; closestOneIndex = j; } if (i != j && distance > secondClosestOne) { secondClosestOne = distance; secondClosestOneIndex = j; } } algorithm.Begin(values[i, 0], values[i, 1], values[closestOneIndex, 0], values[closestOneIndex, 1]); List <Node> path = algorithm.getPath(); foreach (Node n in path) { if (numberOfAdyacentStreets(matrix, n.i_, n.j_) < 2) { matrix[n.i_, n.j_] = true; } } algorithm.Begin(values[i, 0], values[i, 1], values[secondClosestOneIndex, 0], values[secondClosestOneIndex, 1]); path = algorithm.getPath(); foreach (Node n in path) { if (numberOfAdyacentStreets(matrix, n.i_, n.j_) < 2) { matrix[n.i_, n.j_] = true; } } } }