首页 > 解决方案 > 二维数组读取问题javascript

问题描述

我正在尝试用 javascript 编写康威的人生游戏。

规则是:

  1. 如果一个坏点被恰好三个活跃像素包围,它就会活跃起来。
  2. 如果一个活像素被少于两个或三个以上的活像素包围,它就会死掉。

我已经将这些规则编程到二维数组中,但是,有时当一个死像素被少于三个活像素包围时,它会变得活跃,有时应该死的像素会保持活跃。

规则内的镜像对象应该输出相同但镜像的结果,并且与我的代码不一致。这让我相信检查探测的代码存在错误,而不是检查给定像素周围的活动像素(计数器)数量的代码。但是,我在这里找不到错误。也许我只是太累了,错过了一些非常明显的东西。我确信有更好的方法可以做到这一点,但是这段代码应该可以工作,不是吗?

请原谅奇怪的格式,我只是想让自己尽可能清楚,以确保它正确地检查了自己周围的所有八个像素。

for (var x = 0; x < xPixels; x++) {
    for(var y = 0; y < yPixels; y++){
        counter = 0;
        if(y+1<yPixels){                                                //not below screen
            if(x-1>=0){         if(pixels[x-1][y+1])    {counter++;}}       //bottom left
                                if(pixels[x+0][y+1])    {counter++;}        //bottom middle
            if(x+1<xPixels){    if(pixels[x+1][y+1])    {counter++;}}       //bottom right
        }                                                               //in-line
            if(x-1>=0){         if(pixels[x-1][y+0])    {counter++;}}       //left
            if(x+1<xPixels){    if(pixels[x+1][y+0])    {counter++;}}       //right
        if (y-1>=0){                                                    //not above screen
            if(x-1>=0){         if(pixels[x-1][y-1])    {counter++;}}       //top left
                                if(pixels[x+0][y-1])    {counter++;}        //top middle
            if(x+1<xPixels){    if(pixels[x+1][y-1])    {counter++;}}       //top right
        }

        if (pixels[x][y]){                  //alive
            if(counter<2 || counter>3) {
                newPixels[x][y]=false;      //dies
            } else {
                newPixels[x][y]=true;       //stays alive
            }
        } else {                            //dead
            if(counter==3){ 
                newPixels[x][y]=true;       //born
            } else {                        
                newPixels[x][y]=false;      //stays dead
            }
        }
    }
}

标签: javascriptarraysmultidimensional-arrayconways-game-of-life

解决方案


推荐阅读