使用C#构建Conways生活游戏

时间:2019-04-02 10:00:09

标签: c#

我正在尝试计算靠近单元格的邻居,但是代码仅适用于中间单元,而不适用于角落单元,为此我可以使用许多if循环,但是我想知道它如何与for和if循环一起使用

我尝试创建额外的if循环或编写类似row == 0等的内容,但是一切似乎都给了我错误的答案。 btw bool [,]网格的值为false和true。并且我们需要计算给定行/列中有多少对错。

public static int CountNeighbours(bool[,] grid, int row, int col)
        {
            int total = 0;


                for (int i = row - 1; i < row + 2; i++)
                {
                    for (int j = col - 1; j < col + 2; j++)
                    {
                        if (grid[i, j] == grid[row, col])
                        {
                            total += 1;
                        }
                    }
                }

            Console.WriteLine("total neighbours for row {0} and column {1}: {2}",row,col,total-1);
            return total-1;
          }

结果应该为角和行给出完美的答案。

1 个答案:

答案 0 :(得分:1)

您的问题是您将单元格本身视为自己的邻居,而没有检查网格的边界

像这样更改循环条件:

for (int i = Math.Max(0, row - 1); i < row + 2 && i < grid.GetLength(0); i++)
{
    for (int j = Math.Max(0, col - 1); j < col + 2 && j < grid.GetLength(1); j++)
    {
        if (i == row && j == col) continue; // skip current cell

因此,对于Math.Max(),请确保不要使用 ij,因为那样会导致IndexOutOfRangeException
使用grid.GetLength()可以得到各个维度的数组大小,因为使用大于或等于该长度的ij会再次引发IndexOutOfRangeException

最后,最后一行检查您是否不对相关单元格进行计数。