Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Conway';生活问题的游戏_Javascript_Conways Game Of Life - Fatal编程技术网

Javascript Conway';生活问题的游戏

Javascript Conway';生活问题的游戏,javascript,conways-game-of-life,Javascript,Conways Game Of Life,我想用javascript制作康威的生活游戏。我做了一个计算邻居的函数,一个生成下一代细胞的函数。但是,我尝试了一个测试输入,结果不正确,我找不到错误所在。请帮忙 代码如下: (附代码) /*绘制网格*/ 对于(变量i=0;i

我想用javascript制作康威的生活游戏。我做了一个计算邻居的函数,一个生成下一代细胞的函数。但是,我尝试了一个测试输入,结果不正确,我找不到错误所在。请帮忙

代码如下:

(附代码)

/*绘制网格*/
对于(变量i=0;i<15;i++){
对于(var j=0;j<15;j++){
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.fillStyle=“#FFFFFF”;
ctx.strokeStyle=“灰色”;
ctx.strokeRect(10*j、10*i、10、10);
}
}
/*提取活细胞*/
函数平方(a){
对于(变量i=0;i<15;i++){
对于(var j=0;j<15;j++){
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.fillStyle=“#000000”;
如果(a[i][j]==1){
ctx.fillRect(10*j,10*i,10,10);
}
}
}
}/*算邻居*/
函数邻域计数(a、i、j、高度、宽度){
var-lifes=0;
var邻居=[
[-1, 1],
[0, 1],
[1, 1],
[-1, 0],
[1, 0],
[-1, -1],
[0, -1],
[1, -1]
];
/*循环遍历单元格的邻居*/
对于(var z=0;z<8;z++){
/*检查邻居是否未脱离电网*/
如果((i+邻域[z][0])>=0&&(i+邻域[z][0])=0&(j+邻域[z][1])3)){
n[i][j]=0;
} 
/*使死细胞复活*/
else如果(a[i][j]==0&&lifes==3){
n[i][j]=1;
}
}
}
拉丝方块(n);
返回(n);
}
/*测试输入*/
变量a=[
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
];
/*预期结果:
变量a=[
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
]; */
生活(a)

预期结果和实际结果是什么?
var n=a
不会创建数据结构的副本,它只是添加一个指向相同数据的新变量。因此,您在生成新一代时覆盖了旧一代,产生了不连贯的结果。@bryanchen我在帖子中编辑了代码,并在comment@Jeremybanks谢谢那么我如何创建数据结构的副本呢?@user3039965在您的例子中,您可以执行
var n=JSON.parse(JSON.stringify(a))
,但有关更多详细信息,请参阅。(这种方法对于大多数其他数据类型都无法正常工作,JavaScript中也没有通用的解决方案。)