Почему лабиринт я строю левые и нижние внешние стены удвоены вместо одной стены? И как сделать его единственной внешней C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему лабиринт я строю левые и нижние внешние стены удвоены вместо одной стены? И как сделать его единственной внешней

Сообщение Anonymous »

Этот скриншот показывает лабиринт, и в этом примере размер лабиринта составляет 30,30, а левая и нижняя внешняя стена составляет две стены, вместо одной. src = "https://i.sstatic.net/jfngrk72.jpg"/>
Например, WallPrefab в положении 28,1,13:

и следующее с ним слева A WallPrefab в позиции 29,1,13:
> > Создать лабиринт: < /p>

Код: Выделить всё

using UnityEngine;

public class MazeGenerator : MonoBehaviour
{
public int width = 10;
public int height = 10;
public GameObject wallPrefab;
public GameObject floorPrefab;

private bool[,] maze;

void Start()
{
GenerateMaze();
BuildMaze();
}

void GenerateMaze()
{
maze = new bool[width, height];

for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
maze[x, y] = true;
}
}

int startX = 1, startY = 1;
maze[startX, startY] = false;
CarvePath(startX, startY);
}

void CarvePath(int x, int y)
{
int[] directions = { 0, 1, 2, 3 };
ShuffleArray(directions);

foreach (int dir in directions)
{
int nx = x, ny = y;

switch (dir)
{
case 0: ny -= 2; break; // up
case 1: ny += 2; break; // down
case 2: nx -= 2; break; // left
case 3: nx += 2; break; // right
}

if (nx > 0 && nx < width - 1 && ny > 0 && ny < height - 1 && maze[nx, ny])
{
maze[nx, ny] = false;
maze[(x + nx) / 2, (y + ny) / 2] = false;
CarvePath(nx, ny);
}
}
}

void BuildMaze()
{
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
if (maze[x, y])
{
Vector3 position = new Vector3(x, 1, y);
Instantiate(wallPrefab, position, Quaternion.identity, transform);
}
}
}

Vector3 floorPosition = new Vector3(width / 2f, 0, height / 2f);
GameObject floor = Instantiate(floorPrefab, floorPosition, Quaternion.identity, transform);
floor.transform.localScale = new Vector3(width / 10f, 1, height / 10f);
}

void ShuffleArray(int[] array)
{
for (int i = array.Length - 1; i > 0; i--)
{
int randomIndex = Random.Range(0, i + 1);
int temp = array[i];
array[i] = array[randomIndex];
array[randomIndex] = temp;
}
}
}
< /code>
Если я сделаю здесь, если я добавлю - 1 < /p>
void BuildMaze()
{
for (int x = 0; x < width - 1; x++)
{
for (int y = 0; y < height - 1; y++)
Затем теперь слева и снизу будет одна стена, но тогда лабиринт не будет размером 30,30, так как я устанавливаю ее в инспекторе.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ead-single
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»