2016-02-24 6 views
0

Я строю игру жизни Конвея в JavaScript. Предыдущая проблема исправлена. ................................................. ....................... Теперь он говорит: «Невозможно прочитать свойство« длина »неопределенного в 'for (var i = 0; i <. checkneighbours.length; i ++) '. Но я определил checkneighbours сверху как массив. вы знаете, в чем проблема?Javascript Неопределенная ошибка функции

//object constructor 
function cell(){ 
    this.alive = Math.random() > 0.7; 
    this.neighbours = 0; //number of live neighbours 
    this.checkneighbours = [[-1,-1],[-1,0],[0,-1],[-1,1],[1,-1],[1,0],[0,1],[1,1]]; 
} 


function GoL(size){ 
    this.size = size; 
    this.grid = this.makeGrid(size); 
};  

GoL.prototype.makeGrid = function(size){ 
    var grid = []; 
    for(var i=0; i<size; i++){ 
     var row=[]; 
     for(var j =0; j<size; j++){ 
      row.push(new cell()); 
     } 
     grid.push(row); 
    } 
    return grid; 
}; 

GoL.prototype.drawGrid = function(){ 
    for(var i=0;i<this.size;i++){ 
     var row =this.grid[i]; 
     var rowCell=""; 
     for(var j=0;j<this.size;j++){ 
      var cell = row[j]; 
      if(cell.alive){ 
       rowCell += "X|"; 
      }else{ 
       rowCell += " |"; 
      }    
     } 
     console.log(rowCell); 
    }  
}; 

GoL.prototype.underpopulation = function(ro,col){ 
    var cell = this.grid[ro][col]; 
    if(cell.neighbours <2){ 
     return true; 
    }else{ 
     return false; 
    } 
}; 
GoL.prototype.overpopulation = function(ro,col){ 
    var cell = this.grid[ro][col]; 
    if(cell.neighbours >3){ 
     return true; 
    }else{ 
     return false; 
    } 
}; 

GoL.prototype.backtolife = function(ro,col){ 
    var cell = this.grid[ro][col]; 
    if(cell.neighbours ===3 && !cell.alive){ 
     return true; 
    }else{ 
     return false; 
    } 
}; 

GoL.prototype.update = function(ro,col){  
    var cell = this.grid[ro][col]; 
    cell.num_of_neighbours = 0; 
    for(var i =0; i<this.checkneighbours.length; i++){ 
     var checkneighbour = this.checkneighbours[i]; 
     var neighbour1 = direction[0]; 
     var neighbour2 = direction[1]; 
     if(neighbour1>=0 && neighbour1 < this.size && neighbour2 >=0 && neighbour2 < this.size){ 
      var currentneighbour = this.grid[ro + neighbour1][col+neighbour2]; 
      if(currentneighbour.alive){ 
       cell.num_of_neighbours++; 
      } 
     } 
    } 
}; 

GoL.prototype.updateAll = function(){ 
    for(var i=0; i<this.size;i++){ 
     for(var j=0; j<this.size;j++){ 
      this.update(i,j); 
     } 
    } 
} 

GoL.prototype.cellstatus = function(ro,col){ 
    var cell = this.grid[ro][col]; 
    if(this.underpopulation(ro,col) || this.overpopulation(ro,col)){ 
     cell.alive = false; 
    }else if(this.backtolife(ro,col)){ 
     cell.alive = true; 
    } 
}; 

GoL.prototype.allcellstatus = function(ro,col){ 
    for(var i=0; i<this.size;i++){ 
     for(var j=0; j<this.size;j++){ 
      this.cellstatus(i,j); 
     } 
    } 
}; 


var gameoflife = new GoL(40); 

var interval = setInterval(function(){ 
    GoL.drawGrid(); 
    GoL.updateAll(); 
    GoL.allcellstatus(); 
},200); 

ответ

2

Я думаю, что вы имеете в виду сделать это

var gameoflife = new GoL(40); 
var interval = setInterval(function(){ 
    gameoflife.drawGrid(); 
    gameoflife.updateAll(); 
    gameoflife.allcellstatus(); 
},200); 
+0

спасибо. теперь он говорит: «Невозможно прочитать свойство« длина »неопределенного в 'for (var i = 0; i eth3king

0

Вы должны использовать следующий синтаксис для вызова функции:

var gameoflife = new GoL(40); 

var interval = setInterval(function(){ 
    gameoflife.drawGrid(); 
    gameoflife.updateAll(); 
    gameoflife.allcellstatus(); 
},200); 
+0

спасибо. теперь он говорит: «Невозможно прочитать свойство« длина »неопределенного в 'for (var i = 0; i eth3king

0

Вы называете метод drawGrid на классе , а не экземпляр gameoflife

Вы должны назвать эти мето ds на вашем экземпляре, а не в классе, который он сам:

var interval = setInterval(function(){ 
    gameoflife.drawGrid(); 
    gameoflife.updateAll(); 
    gameoflife.allcellstatus(); 
},200); 
+0

спасибо. теперь он говорит: «Невозможно прочитать свойство« длина »неопределенного в 'for (var i = 0; i eth3king

Смежные вопросы