繁体   English   中英

在Conway的生活游戏中用C#(控制台)制作环形阵列,需要一点帮助

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM