为Cway(控制台)制作一个环形阵列,用于我的康威生活游戏,需要一点帮助

时间:2011-04-08 10:19:48

标签: c# arrays multidimensional-array

嘿那里,我的程序到目前为止的工作方式是......

我有一个名为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方法的一部分)

3 个答案:

答案 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();

^失败^