js css html

编写生命游戏

2022-07-22  本文已影响0人  大龙10

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第7章目录

7.7 编写生命游戏

1、用二维数组表示细胞状态

int [][] board = new int[columns][rows];
for (int x = 0; x < columns; x++) {
    for (int y = 0; y < rows; y++) {
          current[x][y] = int(random(2)); 用0或1初始化每个细胞
    }
}

2、计算下一次迭代

int[][] next = new int[columns][rows];
for (int x = 0; x < columns; x++) {
      for (int y = 0; y < rows; y++) {
            next[x][y] = _________?; 为每个细胞设置新状态
      }
}

3、如何引用邻居细胞

4、邻居数变量

int neighbors = 0;
if (board[x-1][y-1] == 1) neighbors++; 最顶行的邻居
if (board[x ][y-1] == 1) neighbors++;
if (board[x+1][y-1] == 1) neighbors++;
if (board[x-1][y] == 1) neighbors++; 中间的邻居(不包括自身)
if (board[x+1][y] == 1) neighbors++;
if (board[x-1][y+1] == 1) neighbors++; 最底行的邻居
if (board[x ][y+1] == 1) neighbors++;
if (board[x+1][y+1] == 1) neighbors++;
for (int i = -1; i <= 1; i++) {
    for (int j = -1; j <= 1; j++) {
        neighbors += board[x+i][y+j]; 将所有邻居的状态相加
    }
}
neighbors -= board[x][y]; 减去自身的状态,我们不想把自身也包括在内

5、确定新状态

if ((board[x][y] == 1) && (neighbors < 2)) { 如果细胞活着,但活着的邻居少于两个,它就因孤next[x][y] = 0;
  }
  else if ((board[x][y] == 1) && (neighbors > 3)) { 如果细胞活着,但活着的邻居多于3个,它就next[x][y] = 0;
  }
  else if ((board[x][y] == 0) && (neighbors == 3)) { 如果细胞的状态为死亡,但它有3个活着的next[x][y] = 1;
  }
  else { 其他情况下,细胞的状态保持不变
    next[x][y] = board[x][y];
}

6、显示

下一代状态计算完成后,我们就可以用之前的方法绘制生命游戏——黑色方块代表“活着”,白色方块代表“死亡”。

for ( int i = 0; i < columns;i++) {
    for ( int j = 0; j < rows;j++) {   如果状态=1,就绘制黑色方块
          if ((board[i][j] == 1)) fill(0);
            else fill(255); 如果状态为0,就绘制白色方块
        stroke(0);
      rect(i*w, j*w, w, w);
    }    
}

7、结果

上一篇下一篇

猜你喜欢

热点阅读