Как разместить автоматические путевые точки в нужных местах?C#

Место общения программистов C#
Ответить
Anonymous
 Как разместить автоматические путевые точки в нужных местах?

Сообщение Anonymous »

Проблема состоит в том, что многие пути, помещенные в большие ящики прямоугольника. src = "https://i.sstatic.net/yu3p15x7.jpg"/>
Это мой код, и я попытался изменить метод isvalidwaypoint, но ничто не исправил его. В некоторых случаях путешественные точки вообще или в какой -то версии почти только путевые точки были в этих больших коробках. < /p>
Это логика метода: < /p>
bool IsValidWaypoint(int x, int y)
{
if (!IsWalkable(x, y))
return false;

// Ghost house exclusion
if (x >= 10 && x = 11 && y = 3)
return true;

// L-shaped corner (2 non-opposite)
if (count == 2)
{
if ((up && right) || (up && left) || (down && right) || (down && left))
return true;
}

// straight line or dead end
return false;
}
< /code>
Вот полный код: < /p>
using UnityEngine;

public class MazeGenerator : MonoBehaviour
{
public GameObject wallPrefab;
public GameObject cornerPrefab;
public GameObject pelletPrefab;
public GameObject powerPelletPrefab;
public GameObject floorPrefab;
public GameObject waypointPrefab;

public float tileSize = 1f;

string[] layout = new string[]
{
"WWWWWWWWWWWWWWWWWWWWWWWWWWWW",
"W............WW............W",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"WPWWWW.WWWWW.WW.WWWWW.WWWWPW",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"W..........................W",
"W.WWWW.WW.WWWWWWWW.WW.WWWW.W",
"W.WWWW.WW.WWWWWWWW.WW.WWWW.W",
"W......WW....WW....WW......W",
"WWWWWW.WWWWW WW WWWWW.WWWWWW",
" W.WWWWW WW WWWWW.W ",
" W.WW WW.W ",
" W.WW WWW--WWW WW.W ",
"WWWWWW.WW W W WW.WWWWWW",
" . W W . ",
"WWWWWW.WW W W WW.WWWWWW",
" W.WW WWWWWWWW WW.W ",
" W.WW WW.W ",
" W.WW WWWWWWWW WW.W ",
"WWWWWW.WW WWWWWWWW WW.WWWWWW",
"W............WW............W",
"W.WWWW.WWWWW.WW.WWWWW.WWWW.W",
"WP..WW................WW..PW",
"WWW.WW.WW.WWWWWWWW.WW.WW.WWW",
"W......WW....WW....WW......W",
"W.WWWWWWWWWW.WW.WWWWWWWWWW.W",
"W..........................W",
"WWWWWWWWWWWWWWWWWWWWWWWWWWWW"
};

void Start()
{
GenerateMaze();
}

void GenerateMaze()
{
int height = layout.Length;
int width = layout[0].Length;
Vector3 mazeOffset = new Vector3(-width * tileSize / 2f, height * tileSize / 2f, 0f);

for (int y = 0; y < height; y++)
{
for (int x = 0; x < layout[y].Length; x++)
{
char cell = layout[y][x];
Vector3 position = new Vector3(x * tileSize, -y * tileSize, 0f) + mazeOffset;

GameObject toSpawn = cell switch
{
'W' => wallPrefab,
'.' => pelletPrefab,
'P' => powerPelletPrefab,
'C' => cornerPrefab,
' ' => floorPrefab,
_ => null
};

if (toSpawn != null)
Instantiate(toSpawn, position, Quaternion.identity, transform);

if (IsValidWaypoint(x, y))
{
GameObject wp = Instantiate(waypointPrefab, position, Quaternion.identity, transform);
wp.name = $"Waypoint_{x}_{y}";
}
}
}
}

bool IsPathCell(char c)
{
return c == '.' || c == 'P' || c == ' ';
}

bool IsWalkable(int x, int y)
{
if (y < 0 || y >= layout.Length || x < 0 || x >= layout[0].Length)
return false;

return IsPathCell(layout[y][x]);
}

bool IsValidWaypoint(int x, int y)
{
if (!IsWalkable(x, y))
return false;

// Ghost house exclusion
if (x >= 10 && x = 11 && y = 3)
return true;

// L-shaped corner (2 non-opposite)
if (count == 2)
{
if ((up && right) || (up && left) || (down && right) || (down && left))
return true;
}

// straight line or dead end
return false;
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ght-places
Ответить

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

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

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

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

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