javascript - 二维数组读取问题javascript
问题描述
我正在尝试用 javascript 编写康威的人生游戏。
规则是:
- 如果一个坏点被恰好三个活跃像素包围,它就会活跃起来。
- 如果一个活像素被少于两个或三个以上的活像素包围,它就会死掉。
我已经将这些规则编程到二维数组中,但是,有时当一个死像素被少于三个活像素包围时,它会变得活跃,有时应该死的像素会保持活跃。
规则内的镜像对象应该输出相同但镜像的结果,并且与我的代码不一致。这让我相信检查探测的代码存在错误,而不是检查给定像素周围的活动像素(计数器)数量的代码。但是,我在这里找不到错误。也许我只是太累了,错过了一些非常明显的东西。我确信有更好的方法可以做到这一点,但是这段代码应该可以工作,不是吗?
请原谅奇怪的格式,我只是想让自己尽可能清楚,以确保它正确地检查了自己周围的所有八个像素。
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
}
}
}
}
解决方案
推荐阅读
- asp.net-core - EntityFrameworkCore .net Core 更新现有数据库结构而不删除现有数据
- java - 使用 Java 8 Stream 对 N 个数组的元素求和
- python - For 循环仅在 10 次迭代 Python 后停止
- c - c:将给定序列的字节解释为 int16_t 值并将它们相加
- python - PySpark MLLib:将数值转换为分类
- html - 为什么这种输入类型 =“复选框”的 html 模式会破坏 ngx-bootstrap 模式对话框
- python - 使用 Scrapy 返回 Google 桌面版本
- python - python中的Pig拉丁字符串转换
- html - 如何将文本显示图像定位在奇怪的位置
- sql - Oracle 数据类型转换