question

sharonglipman-9594 avatar image
0 Votes"
sharonglipman-9594 asked TimonYang-MSFT edited

How can I get a maze last rows/columns ?

This is the maze class logic :

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
    
 public class Maze
 {
     //Grid size
     public int width;
     public int height;
    
     //Store grid
     private bool[,] grid;
     //Generate random directions to move
     private System.Random rg;
    
     //Start position
     public int startX;
     public int startY;
    
     //Public getter
     public bool[,] Grid
     {
         get { return grid; }
     }
    
     //Constructor of the grid for setting values
     public Maze(int width, int height, System.Random rg)
     {
         this.width = width;
         this.height = height;
    
         this.rg = rg;
     }
    
     //Generate the grid
     public void Generate()
     {
         grid = new bool[width, height];
    
         startX = 1;
         startY = 1;
    
         grid[startX, startY] = true;
    
         MazeDigger(startX, startY);
     }
    
     void MazeDigger(int x, int y)
     {
         int[] directions = new int[] { 1, 2, 3, 4 };
    
         //We create random array of directions
         HelpingTools.Shuffle(directions, rg);
    
         //We are looping over all the directions
         for (int i = 0; i < directions.Length; i++)
         {
             if (directions[i] == 1)
             {
                 if (y - 2 <= 0)
                     continue;
    
                 if (grid[x, y - 2] == false)
                 {
                     grid[x, y - 2] = true;
                     grid[x, y - 1] = true;
    
                     MazeDigger(x, y - 2);
                 }
             }
    
             if (directions[i] == 2)
             {
                 if (x - 2 <= 0)
                     continue;
    
                 if (grid[x - 2, y] == false)
                 {
                     grid[x - 2, y] = true;
                     grid[x - 1, y] = true;
    
                     MazeDigger(x - 2, y);
                 }
             }
    
             if (directions[i] == 3)
             {
                 if (x + 2 >= width - 1)
                     continue;
    
                 if (grid[x + 2, y] == false)
                 {
                     grid[x + 2, y] = true;
                     grid[x + 1, y] = true;
    
                     MazeDigger(x + 2, y);
                 }
             }
    
             if (directions[i] == 4)
             {
                 if (y + 2 >= height - 1)
                     continue;
    
                 if (grid[x, y + 2] == false)
                 {
                     grid[x, y + 2] = true;
                     grid[x, y + 1] = true;
    
                     MazeDigger(x, y + 2);
                 }
             }
         }
     }
 }

And this is the class that generate the maze :

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
    
 public class MazeGenerator : MonoBehaviour
 {
     public Maze maze;
     public int mazeWidth;
     public int mazeHeight;
     public string mazeSeed;
     public GameObject wallPrefab;
    
     private GameObject wall;
     private GameObject wallCorner;
     private System.Random mazeRG;
    
     // Use this for initialization
     void Start()
     {
         mazeRG = new System.Random();
    
         if (mazeWidth % 2 == 0)
             //mazeWidth++;
    
             if (mazeHeight % 2 == 0)
             {
                 //mazeHeight++;
             }
    
         maze = new Maze(mazeWidth, mazeHeight, mazeRG);
         GenerateMaze();
     }
    
     public void GenerateMaze()
     {
         maze.Generate();
         DrawMaze();
     }
    
     void DrawMaze()
     {
         for (int x = 0; x < mazeWidth; x++)
         {
             for (int y = 0; y < mazeHeight; y++)
             {
                 Vector3 position = new Vector3(x, 0.5f, y);
    
                 if (maze.Grid[x, y] == true)
                 {
                     CreateMaze(position, transform, 0, mazeRG.Next(0, 3) * 90);
                 }
             }
         }
    
         for (int x = 0; x < mazeWidth; x++)
         {
             for (int y = 0; y < mazeHeight; y++)
             {
                 Vector3 position = new Vector3(x, 0.5f, y);
    
                 if (maze.Grid[x, y] == false)
                 {
                     var t = Instantiate(wallPrefab, position, Quaternion.identity);
                     t.GetComponent<Renderer>().material.color = Color.yellow;
                 }
             }
         }
     }
    
     void CreateMaze(Vector3 position, Transform parent, int sortingOrder, float rotation)
     {
         GameObject mazePrefab = Instantiate(wallPrefab, position, Quaternion.identity);
         mazePrefab.transform.SetParent(parent);
         mazePrefab.transform.Rotate(0, 0, rotation);
         mazePrefab.tag = "MazeBrick";
     }
    
     // Update is called once per frame
     void Update () {
            
     }
 }

From line 55 to 67 in the MazeGenerator class I'm trying to fill only the outer gaps empty places in the maze only the outer.
For this I need to find the last rows/columns but the way I did it now it's making a loop all over the maze and fill the gaps in all the maze.

How can I find the last/outer rows/columns and fill the gaps on them ?

not-supported
· 1
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

@sharonglipman-9594
Unity is a third-party application, and it is not supported in Microsoft Q&A.
I suggest you go to the Unity Forum to ask your questions to get better support.
The list of products currently supported by Microsoft Q&A is as follows:
Microsoft Q&A supported products.

0 Votes 0 ·

0 Answers