作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用嵌套的 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);
}
}
我已经在图像上绘制了 z 和 x 的开始值和结束值。
我想要的是让网格本身也呈六角形:
我认为找到了 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
你想要的指数。根据您的数据,我不确定您是否需要 v1
或 v2
变种。 v2
对我来说看起来更一致,但这真的取决于你的 CreateCell(x, z);
对待 x = 0
案例。
附言显然你可以内联 PrintHexLine
打电话,但这意味着有两个不同的 z
你不应该搞砸的变量,我认为将它移动到一个单独的方法中会更干净。
关于c# - 以六边形模式遍历二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48051049/
我是一名优秀的程序员,十分优秀!