嘿那里,我的程序到目前为止的工作方式是......
我有一个名为Grid的类,到目前为止这个工作, 网格包含一个成员'board',它是一个二维bool数组。 我设法将文件中的值加载到网格中, 事实上,我设法很好地完成了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方法的一部分)
答案 0 :(得分:0)
检查对象的坐标(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的单元格也能正常工作。
答案 1 :(得分:0)
x和y是类网格的“当前位置”成员。
我没有在代码片段中看到错误,但是此语句引发了一个大红旗。网格没有当前位置,只有Cell。您无法跟踪网格的“next.Cell”状态,必须为每个单独的单元格计算它。在评估所有网格位置后, next 网格是从新单元创建的。或者使用两个网格并交换它们。
答案 2 :(得分:0)
我发现我的程序出了什么问题,它与网格无关,当我想制作grid = next时,我输入grid = next -sigh-当然这只是让它们变成了同一个班级的同一个实例...现在我只需要弄清楚如何更新电路板......:P显然滑翔机死在它的位置只是巧合。
grid = next;
grid.Draw();
^失败^