gpt4 book ai didi

c# - 以六边形模式遍历二维数组

转载 作者:行者123 更新时间:2023-11-30 21:36:34 24 4
gpt4 key购买 nike

我使用嵌套的 for 循环来创建六边形网格。这将创建一个方形网格:

for (int z = 0; z < gridSize; z++)
{
for (int x = 0; x < gridSize; x++)
{
// creates verts for a hexagon shape which later form a mesh
// x and z form the basis of the Vector3 position of the center
// of each hexagon
CreateCell(x, z);
}
}

enter image description here

我已经在图像上绘制了 z 和 x 的开始值和结束值。

我想要的是让网格本身也呈六角形:

enter image description here

我认为找到了 x 的极限:

int greaterThan = Mathf.RoundToInt(gridSize/ 3) - 1;
int lessThan = width - greaterThan;

当 z = gridSize/2 四舍五入时,(我认为)x 应该只在它的最小值和最大值(示例中的 0 和 6),尽管我很可能是错的!

我尝试在循环中放入一堆 if IF,但它很快开始变得过于复杂,我认为必须有一种更“数学”的方法来做到这一点,但遗憾的是我不是数学!

知道如何编写循环来形成所需的模式吗?

最佳答案

如果@AsfK的解决方案不够好,我也试试看:

    private static void PrintHexLine(int z, int size)
{
if (z >= size)
{
z = 2 * size - 2 - z;
}
int start = size - z - 1;
int end = start + size + z;
for (int x = 0; x < start; x++)
{
Console.Write(" ");
}
for (int x = start; x < end; x++)
{
Console.Write("* ");
//Console.Write((x - start / 2) + " "); // position v1
//Console.Write((x - (start + 1) / 2) + " "); // position v2

}
Console.WriteLine();
}

public static void PrintHex(int size)
{
for (int z = 0; z < 2 * size - 1; z++)
{
PrintHexLine(z, size);
}
}

用这样的代码PrintHex(4)结果

   * * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *

如果您取消注释 position v1行而不是打印 "* " 的行, 你会得到

   2 3 4 5
1 2 3 4 5
1 2 3 4 5 6
0 1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5
2 3 4 5

同样position v2

   1 2 3 4
1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5 6
0 1 2 3 4 5
1 2 3 4 5
1 2 3 4

看起来像 x你想要的指数。根据您的数据,我不确定您是否需要 v1v2变种。 v2对我来说看起来更一致,但这真的取决于你的 CreateCell(x, z);对待 x = 0案例。

附言显然你可以内联 PrintHexLine打电话,但这意味着有两个不同的 z你不应该搞砸的变量,我认为将它移动到一个单独的方法中会更干净。

关于c# - 以六边形模式遍历二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48051049/

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