gpt4 book ai didi

c# - 二维区域中的未知字符

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:02 28 4
gpt4 key购买 nike

我目前正在尝试使用 C# 在 Unity 上编写战术 RPG,为此,我需要使用寻路、Dijkstra、节点边缘等。我正在尝试将代表我的 map 的 2D char 区域转换为具有边缘的节点的 2D 区域,这里是 map :

map

# 在这里标记 map 的边界并避免索引超出范围错误。

项目代码如下:

public Nodes[,] GenerateNodes(TextAsset lvl)
{
Nodes[,] nodeArray;
char[,] matrix = GenerateArray(lvl);

nodeArray = new Nodes[matrix.GetLength(0), matrix.GetLength(1)];

for (int row = 0; row < matrix.GetLength(0); row++)
{
for (int col = 0; col < matrix.GetLength(1); col++)
{
char type = matrix[row, col];
if (type != '#' && type != '\n')
{
Debug.LogError(type);
Nodes n = new Nodes(row, col, type);
nodeArray[row, col] = n;
findNeighbors(row, col, matrix, nodeArray); //assuming nodes and matrix variables are instance variables
}
else
nodeArray[row, col] = null;
}
}
return nodeArray;
}
public void findNeighbors(int row, int col, char[,] matrix, Nodes[,] nodeArray)
{
for (int r = -1; r <= 1; r++)
{
for (int c = -1; c <= 1; c++)
{
Debug.LogError(row);
Debug.LogError(col);
if (matrix[row + r, col + c] != '#')
{
nodeArray[row, col].addEdges(nodeArray[row + r, col + c]);
}
}
}
}

GenerateArray() 方法正在运行;我以前用过那个。问题来自 findNeighbors()。我有这个错误:

Array Out of range at the row 0 and the columns 19

问题是我这里只有一些#,它甚至不应该在这里。我尝试打印那个字符,但它什么也没打印,所以我尝试重写该行,抑制 \n 等,但我仍然一无所获。

最佳答案

据我统计,有 18 列,而您正试图访问第 19 列,当然它会抛出此异常。

你应该把这样的 if 放在你的 findneighbors 的第二个 for 上:

if(row == 0 && r == -1)
continue;
if(col == matrix.GetLength(1) && c == 1)
continue;

也许您可以找到更好的方法来执行我告诉您的操作,但请记住,如果您不避免访问不存在的数组索引,您将不断收到此错误。

编辑。根据我们的同事@yes 的说法,有 19 个列,而不是我错误计算的 18 个。我提供的解决方案仍然有效:D

关于c# - 二维区域中的未知字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36892626/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com