Javascript + Canvas实现Game of Life无法正常工作

时间:2011-06-30 17:57:29

标签: javascript canvas

我在使用Conways Game of Life的javascript + canvas实现时出现问题。 细胞被创建得很好,并且代表细胞的画布盒子也被渲染得很好。但是在某个地方,所有细胞似乎都处于活跃状态。不是在切换。 对于我的生活,我无法理解什么是错的。 javascript代码为here,我的实现为here。 有人可以告诉我哪里出错了。

** * ** * ** * 的** * ** * ** * ** * *** 修改 * ** * ** * ** * ** * ** * ** * ** * **

我想我已经弄清楚什么是错的。我将2d数组的元素传递给reallyToggle()函数,就像这样 -

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

我认为问题出在这部分代码中。任何人都可以告诉我如何将数组元素传递给函数?

3 个答案:

答案 0 :(得分:1)

这条线很可疑:)

if (!run) run == true;

答案 1 :(得分:1)

所以你的代码很晦涩,过于复杂,说实话。创建自定义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];
});

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

干杯

答案 2 :(得分:0)

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

按下开始时

Uncaught exception: ReferenceError: Undefined variable: gameLoop。 您在initialize中定义的所有函数都不在全局范围内,因此无法在全局范围内访问它们。

请使用Firebug; Chrome开发者工具,Opera Dragonfly或其他东西可以找出这样的错误。这些工具在开发JS时非常有用。