[英]Making a toroidal array in C# (console) for my Conway's game of life, need a little help
嘿,到目前为止,我的程序的工作方式是...
我有一个叫做Grid的类,到目前为止,它可以正常工作,Grid包含一个成员“ board”,它是2D布尔数组。 我设法将文件中的值加载到网格中,实际上,我设法很好地执行了Conway的生命迭代,但是程序的行为就像网格外的单元格已失效(不是环形)
这是我用来查找邻居的Grid成员的代码(C#):
public bool Peek(int Horz, int Vert)
{
int X = x + Horz, Y = y + Vert;
if (X < 0)
X = width - 1;
else if (X > width - 1)
X = 0;
if (Y < 0)
Y = height - 1;
else if (Y > height - 1)
Y = 0;
return board[X, Y];
}
这似乎是问题所在,Horz和Vert在数组'board'中定义相对位置,x和y是类网格的'当前位置'成员。
我只是看不到出什么问题了,应该在这里。
如果您需要它,这里是计算邻居的代码(在Program.Main中)
int neighbours = 0;
for (i = -1; i < 2; i++)
{
if (grid.Peek(i, -1))
neighbours++;
if (grid.Peek(i, 1))
neighbours++;
}
if (grid.Peek(-1, 0))
neighbours++;
if (grid.Peek(1, 0))
neighbours++;
if (grid.Cell)
{
if (neighbours == 2 || neighbours == 3)
next.Cell = true;
else next.Cell = false;
}
else
{
if (neighbours == 3)
next.Cell = true;
else next.Cell = false;
}
grid.Cell(网格是Grid的一个实例)的值与grid.Peek(0,0)相同,然后网格对象中的x和y位置移至下一个单元格。 (作为get和set方法的一部分)
检查您对象的坐标(x和y)的值是否均不小于0或不大于width-1或height-1,因为您的Peek代码无法正确处理此类情况。 我还建议重写该方法以使其更加灵活:
public bool Peek(int Horz, int Vert)
{
int X = x + Horz, Y = y + Vert;
if (X < 0)
X += width;
else if (X > width - 1)
X -= width;
if (Y < 0)
Y += height;
else if (Y > height - 1)
Y -= height;
return board[X, Y];
}
在这种情况下,即使坐标x = -1,y = height + 2的单元也可以正常工作。
x和y是类网格的“当前位置”成员。
我没有在代码片段中看到错误,但是此语句引发了一个大的红旗。 网格没有当前位置,只有单元格有。 您无法跟踪网格的“ next.Cell”状态,必须为每个单个单元格进行计算。 在评估所有网格位置之后,将从新单元格创建下一个网格。 或使用两个网格并交换它们。
我发现我的程序出了什么问题,并且与网格无关,当我想使grid = next时,我键入了grid = next -sigh-,当然这只是使它们成为了相同的实例。相同的类...现在,我只需要弄清楚如何更新板子即可..:P显然,这只是巧合,滑翔机在原地死掉了。
grid = next;
grid.Draw();
^失败^
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.