我目前正在使用JavaScript编写Conways生活游戏,但是遇到了一些我不知道如何解决的错误。想知道是否有人可以帮助我解决这些问题?
当前在Google Chrome浏览器中显示4个错误,具体如下:

  • 未捕获的TypeError:无法读取未定义的属性'length'-“for(var i = 0; i
  • GoL.update @ life.js:72-这是-“for(var i = 0; i
  • GoL.updateAll @ life.js:88这是-“this.update(i,j);”
  • (匿名函数)@ life.js:115,这是-“gameoflife.updateAll();”

  • 我认为它们可能属于我不确定的类别。
    这是我的代码:
    //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(){
            console.log("\033[2J");
            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(){
        gameoflife.drawGrid();
        gameoflife.updateAll();
        gameoflife.allcellstatus();
    },1000);
    

    任何帮助,将不胜感激!

    最佳答案

    一些想法

    GoL.prototype.update = function (ro, col) {
        var cell = this.grid[ro][col];
        cell.num_of_neighbours = 0;
        for (var i = 0; i < cell.checkneighbours.length; i++) { // change this to cell
            var direction = cell.checkneighbours[i]; // change this to cell, rename 'checkneighbour' to 'direction'
            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]; // add here some error checking for out of range!
                if (currentneighbour.alive) {
                    cell.num_of_neighbours++;
                }
            }
        }
    };
    

    关于javascript - 用Java编写Conways Life of Life错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35627349/

    10-09 03:59