У вас есть этот цикл в next
:
for(var y = 0; y < this.height; y++){
for(var x = 0; x < this.width; x++){
newMap[x][y] = this.get(x, y);
//Rule 1: any live cell with fewer than two live neighbors dies
if(this.get(x, y) == true && this.neighbors(x, y) < 2){
newMap[x][y] = false;
}
//...
так что в вашей первой итерации x
и y
равны нулю. Теперь посмотрим, что делает neighbors
:
this.neighbors = function(x, y){
n = 0;
//...
if(this.get(x-1, y-1)){n++;}
//...
return n;
}
Если x
и y
равны 0
, он пытается проверить ячейку (-1,-1)
:
this.map[x][y] = val;
Но ваш map
имеет только положительные целочисленные ключи.
Если вы хотите «обернуть», увеличьте значения в get
, чтобы избежать отрицательных значений:
x = (x + this.width) % this.width;
y = (y + this.height) % this.height;