Javascript+Canvas实现的《生命的游戏》不起作用

Javascript+Canvas implementation of Game of Life not working

本文关键字:游戏 生命 不起作用 生命的游戏 实现 Javascript+Canvas      更新时间:2023-09-26

我在Conways Game of Life的javascript+canvas实现中遇到问题。创建的单元格非常好,表示单元格的画布框也非常好。但在这一过程中的某个地方,所有的细胞似乎都被激活了;没有切换。我一辈子都不明白出了什么问题。javascript代码在这里,我的实现在这里。有人能告诉我哪里出了问题吗。

*******************/em>***编辑

我想我已经想通了。我将2d数组的一个元素传递给reallyToggle()函数,类似于so-

var reallyToggle = function(a) {
//code
}
reallyToggle(cell[i][j]);

我认为问题出在代码的这一部分。有人能告诉我如何将数组的元素传递给函数吗?

因此,老实说,您的代码相当晦涩且过于复杂。创建一个自定义Javascript函数对象的网格远远超过了工程:您只需要一个2D布尔数组。

如果把这样的问题看作两个独立的问题:问题空间和世界空间,通常最容易解决。问题空间是解决实际问题的区域。世界空间是映射到视觉结果的问题空间。为了将其与你的问题分开,把问题空间想象成布尔值的二维数组,然后世界空间就是你的画布。

如果你想稍微清理一下你的模拟,这里有一种方法可能会有所帮助:

//Have some parameters that you can change around
var cellSize = 10;
var cellsWide = 100;
var cellsHigh = 100;
//Instantiate and initialize a 2d array to false
var theGrid = new Array();
for (var i=0; i<cellsWide; i++) {
    theGrid.push(new Array());
    for (var j=0; j<cellsHeight; j++) {
        theGrid[i].push(false);
    }
}
//Attach a click event to your canvas (assuming canvas has already been dropped on page
//at the assigned width/height
$('#simCanvas').click(function(e) {
    var i = Math.floor((e.pageX - this.offsetLeft)/cellSize);
    var j = Math.floor((e.pageY - this.offsetTop)/cellSize);
    theGrid[i][j] = !theGrid[i][j];
});

这将是一种更简洁的方式来处理问题空间。将问题空间映射到世界空间有点直接,但如果你需要帮助,请告诉我。

干杯

这行很可疑:)

if (!run) run == true;

首先,检查MoarCodePlz的答案。关于你的代码:

按下开始时为Uncaught exception: ReferenceError: Undefined variable: gameLoopinitialize中定义的所有Your函数都不在全局范围内,因此它们在全局范围中是不可访问的。

请使用Firebug;Chrome开发工具、Opera Dragonfly或其他什么工具来查找此类错误。这些工具确实有助于开发JS。