Javascript 如何检查表中的相邻单元格,以及它们是否应着色

Javascript 如何检查表中的相邻单元格,以及它们是否应着色,javascript,Javascript,如何检查相邻的单元格?这些是单元格的规则 如果一个活细胞的邻居少于两个,它就会死亡 如果一个活细胞有两个或三个活邻居,它将继续存活 如果一个活细胞有三个以上的活邻居,它就会死亡 如果一个死亡的细胞恰好有三个活着的邻居,它就产生了 这是我目前掌握的代码 函数应该是活动的(行、列){ 如果(模型[i][j]==真){ //检查它是否应该存活或死亡 } 否则{ //检查它是死了还是活了 } }康威的人生游戏,做过一次,我基本上是这样做的: 函数应该是活动的(行、列){ var\u alive=

如何检查相邻的单元格?这些是单元格的规则

  • 如果一个活细胞的邻居少于两个,它就会死亡
  • 如果一个活细胞有两个或三个活邻居,它将继续存活
  • 如果一个活细胞有三个以上的活邻居,它就会死亡
  • 如果一个死亡的细胞恰好有三个活着的邻居,它就产生了
这是我目前掌握的代码

函数应该是活动的(行、列){
如果(模型[i][j]==真){
//检查它是否应该存活或死亡
}
否则{
//检查它是死了还是活了
}

}
康威的人生游戏,做过一次,我基本上是这样做的:

函数应该是活动的(行、列){
var\u alive=0;
//首先,计算活动邻居的数量
//1.检查是否有顶级邻居
如果(行>0){
邻居_alive+=模型[第1行][col];
}
//2.检查是否有底部邻居
if(行<型号长度-1){
邻居_alive+=模型[行+1][列];
}
//3.检查是否有左邻右舍
如果(列>0){
邻居_alive+=模型[行][col-1];
}
//4.检查是否有合适的邻居
if(列<模型[行]。长度-1){
邻居_alive+=模型[行][col+1];
}
//5.检查是否有右上角的邻居
if(行>0&&col0和列>0){
邻居_alive+=模型[row-1][col-1];
}
//7.检查是否有右下角的邻居
if(行0){
邻居_alive+=模型[行+1][列-1];
}
如果(模型[行][列]==真){
//检查它是否应该存活或死亡
如果(邻居活着<2 | |邻居活着>3){
返回false;
}
返回true;
}
否则{
//检查它是死了还是活了
如果(邻居_活动===2){
返回true;
}
返回false;
}

}
让我们把计算活邻居数纳入它自己的函数中。在下面的一个例子中,我的循环有点不同,因此您不必包含所有那些if语句。它获取任何方向上一个距离内的任何单元,不包括单元本身

function getLiveNeighborCount (row, col) {

  let result = 0;

  let rLow = row == 0 ? 0 : row - 1;
  let rHigh = row == model.length -1 ? row : row + 1;

  for (let r = rLow; r <= rHigh; r++) {

    let cLow = col == 0 ? 0 : col - 1;
    let cHigh = col == model[r].length -1 ? col : col + 1;

    for (let c = cLow; c <= cHigh; c++)
      if (r != 0 || c != 0) 
        result += model[r][c];

  }

  return result;

}
顺便说一下。您可能希望在所有“应该”计算发生之前阻止执行shouldBeAlive。我这样说是因为我不认为左上角的单元格应该比右下角的单元格优先。它们都应该同时获得它们的价值。所以考虑把你的进化函数变成这样的:

function evolve() {

  let anticipated = [];

  for (let r = 0; r < model.length; r++) {

    anticipated[r] = [];

    for (let c = 0; c < model[r].length; c++) 
      anticipated[r][c] = shouldBeAlive(r,c);

  }

  model = anticipated;
  paintGrid();

}
function evolve(){
让预期=[];
for(设r=0;r
当我运行该代码并添加彩色框并点击evolve时,它不会杀死单元格或添加单元格。布尔值是弄乱了我的代码还是有其他问题?@canijusttravel检查我的编辑,第一个是我现在从
应该是活的
中返回值,第二个是你的
evolve
函数中的一个错误,它正在工作。@canijusttravel我刚刚发现另一个错误,检查编辑,我还考虑了对角线上的邻居,这是我以前忘记考虑过的。
function evolve() {

  let anticipated = [];

  for (let r = 0; r < model.length; r++) {

    anticipated[r] = [];

    for (let c = 0; c < model[r].length; c++) 
      anticipated[r][c] = shouldBeAlive(r,c);

  }

  model = anticipated;
  paintGrid();

}