Conways游戏生活算法不能正常工作

时间:2016-09-06 06:49:33

标签: javascript jquery arrays algorithm conways-game-of-life

我已经建立了Conways游戏,但算法运行不正常。我为此使用了Js和Jquery的混合。我的程序所做的是逐个单元地遍历整个板,检查单元格邻居并通过检查它的邻居将游戏规则应用于每个单元。这是代码:

    function checkSquares() {
     generation++;
     document.getElementById('gen').innerHTML=generation;
     for (var i = 100; i <= 6220; i++) {

      if (squareArray[i][1] === 1) {
        var total = squareArray[i + 81][1] + squareArray[i + 80][1] + squareArray[i + 79][1] + squareArray[i - 81][1] + squareArray[i - 80][1] + squareArray[i - 79][1] + squareArray[i + 1][1] + squareArray[i - 1][1];

        switch (total) {
          case 0:
          case 1:
            squareArray[i][1] = 0;

            $('#square' + i).css("background-image", "url('http://www.fg-a.com/wallpapers/geo-shapes-black-1280.jpg')");
            break;
          case 4:
          case 5:
          case 6:
          case 7:
          case 8:
            squareArray[i][1] = 0;
            $('#square' + i).css("background-image", "url('http://www.fg-a.com/wallpapers/geo-shapes-black-1280.jpg')");
            break;
        }
      }else{
        var total = squareArray[i + 81][1] + squareArray[i + 80][1] + squareArray[i + 79][1] + squareArray[i - 81][1] + squareArray[i - 80][1] + squareArray[i - 79][1] + squareArray[i + 1][1] + squareArray[i - 1][1];
        switch(total){
          case 3:
            squareArray[i][1] = 1;
            $('#square' + i).css("background-image", "url('https://c1.staticflickr.com/3/2942/15323841455_6c64757dbd_b.jpg')");
            break;
        }
      }
    }

  eliminate();
}

简而言之,上面的代码所做的就是取一个正方形,检查它的相邻单元格并使用if-else语句来判断单元是否存在或死亡。

现在我知道问题所在;例如,采用如下的简单模式:

      cell here dies ---->   []  
      new cell born here --> []  <-- new cell born here
      cell here dies ---->   []  

我的代码中发生了什么:

                     checks this cell, only one neighbour so it dies ---> []  
    When it comes to this cell it has only one neighbour because above -> []
    neighbour died. Therefore it dies.
                     No neighbours, so this dies -----------------------> []

因此,显而易见的解决方案是以某种方式检查整个模式,然后决定细胞是活着还是死亡。但是如何一次检查几个细胞?

此外,如果有帮助,这里是完整程序的codepen链接:

http://codepen.io/Phantom-Intruder/pen/BLaBPG/

1 个答案:

答案 0 :(得分:2)

您需要保留旧电路板并使用规则生成新电路板(称为生成电路)。

然后跳过旧电路板使用新电路板。

只有一个电路板Conway's Game of Life不起作用,因为在与neibours交互时会破坏电路板的实际状态。

  

初始模式构成系统的种子。通过将上述规则同时应用于种子出生中的每个细胞并且同时发生死亡来创建第一代,并且发生这种情况的离散时刻有时被称为 tick (换句话说,每个生成是前一个的纯函数。这些规则继续被反复应用以创造更多代。