【问题标题】:Wrapping in Conway's Game of Life C++包含在 Conway 的生命游戏 C++ 中
【发布时间】:2015-09-18 02:33:34
【问题描述】:

我正在尝试编写一个在 20x60 单元板上实现康威生命游戏的程序。网格将环绕,因此左侧将连接到(相邻)右侧,顶部将连接到底部。

因此,任何位置为(1, col) 的单元格都将在(maxRow, col) 处有一个邻居。任何位置为(row, 1) 的单元格都将在(row, maxCol) 处有一个邻居。

下面的函数应该计算相邻单元格的数量。它适用于不在边缘的坐标,但不适用于边缘的坐标。例如,如果在 (1, 10)(1, 11)(1, 12) 处存在点,并且将 (1, 10) 传递给函数,它将返回一个高数字作为邻居计数,而不是 1

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

    if (row==maxrow-1 || row==0)
         count = count+ grid [(row-(maxrow-1))*-1][col-1]+grid[(row-(maxrow-1))*-1][col]+grid[(row-(maxrow-1))*-1][col+1];

    if (col==0 || col==maxcol-1)
         count=count +grid[row-1][(col-(maxcol-1))*-1]+grid[row][(col-(maxcol-1))*-1]+grid[row+1][(col-(maxcol-1))*-1];



    count -= grid[row][col];
    return count;
    } 

【问题讨论】:

  • 您可以将数组索引定义为函数。您可能会发现余数运算符% 很有用。但是你也可以只使用if 进行包装。
  • 顺便说一句,如果您花时间仔细地始终如一地布置您的程序,那么学习编码对您来说会容易得多。您提供的示例中的缩进足以让我停止阅读。
  • 运算符% 部分有用。对正数有用,但在某些编译器中-2 % 5变成-2,对下标无效。
  • 你的代码还能编译吗?

标签: c++ conways-game-of-life


【解决方案1】:

首先,我会将网格更改为基于 0 而不是基于 1。

然后你可以写一个简单的循环:

int count = 0;
for (i = row - 1; i <= row + 1; i++) {
   for (j = col - 1; j <= col + 1; j++) {
      if(i != row && j != col) {
         count += grid[(i + maxrow)%maxrow][(j + maxcol)%maxcol];
      }
   }
}

+ maxrow 是为了确保索引是正数。

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 2016-04-05
    • 1970-01-01
    • 2018-07-11
    • 2017-03-09
    • 2023-02-08
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多