Beispiel #1
0
    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;
                }
            }
        }
    }