扫雷艇检查地雷的邻居

时间:2017-11-10 04:57:06

标签: javascript arrays minesweeper

我正在研究扫雷'现在,我已经设置了这个领域。

我有几个问题。首先,地雷的数量应该从1到fieldSize-1,我不确定我是否正确,我将其声明为' minesNum'。 第二,假设地雷的数量是正确的,那么我想检查地雷的邻居,所以我有9个if语句,但我在第二个if语句上得到了错误消息,这是' Uncaught TypeError:无法设置属性' 0'未定义的'。

我正在努力奋斗大约五个小时,我仍然无法弄明白。任何人都可以帮助我吗? 谢谢!

var arr=new Array(30,40);
var min=1;
var max= rows * columns;
minesNum=Math.floor(Math.random()*(max-min)+min);

for(var i=0; i<rows;i++){
    for(var j=0;j<columns;j++){
        arr[i][j]=0;
    }
}

for (var i=0; i<=minesNum; i++){
    var x = Math.floor(Math.random()*rows);
    var y = Math.floor(Math.random()*columns);
    if(arr[x][y]==-1){
        i--;
        continue;
    }           
    arr[x][y]=-1;
}

for(var i=0;i<rows;i++){
    for(var j=0;j<columns;j++){
        if(arr[i][j]==-1){    //mine
            continue;
        }


        if(this.arr[i-1][j]==-1){  
            arr[i][j]=arr[i][j]+1;
        }

        if(arr[i][j-1]==-1){   
            arr[i][j]=arr[i][j]+1;
        }
        if(arr[i+1][j]==-1){
            arr[i][j]=arr[i][j]+1;
        }
        if(arr[i][j+1]==-1){   
            arr[i][j]=arr[i][j]+1;
        }
        if(arr[i+1][j+1]==-1){   
            arr[i][j]=arr[i][j]+1;
        }
        if(arr[i-1][j-1]==-1){   
            arr[i][j]=arr[i][j]+1;
        }
        if(arr[i-1][j+1]==-1){   
            arr[i][j]=arr[i][j]+1;
        }
        if(arr[i+1][j-1]==-1){   
            arr[i][j]=arr[i][j]+1;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

首先,你是以错误的方式创建二维数组:

var arr=new Array(30,40);
var min=1;
var max= rows * columns;
minesNum=Math.floor(Math.random()*(max-min)+min);

for(var i=0; i<rows;i++){
    for(var j=0;j<columns;j++){
        arr[i][j]=0;
    }
}

这应该在:

var arr=new Array();
var min=1;
var max= rows * columns;
minesNum=Math.floor(Math.random()*(max-min)+min);

for(var i=0; i<rows;i++){
    arr[i]=new Array()
    for(var j=0;j<columns;j++){
        arr[i][j]=0;
    }
}

然后根据有效的数组索引

更改逻辑

答案 1 :(得分:0)

在回答问题的第二部分时,如果陈述有效,您需要先验证您所签到的职位是否有效。 因此,在访问arr [i-1] [j]之前,您需要首先验证(i-1)是否不小于零。如果它小于零,则表示您正在尝试访问无效位置,这将导致错误。您需要在每个if语句中执行此操作,并首先验证您尝试访问和检查的位置是否有效。

因此,if语句的代码将变为这样 -

    if((i-1) >=0 && this.arr[i-1][j].holds==-1){  
        arr[i][j]=arr[i][j]+1;
    }

    if(j-1 >=0 && arr[i][j-1]==-1){   
        arr[i][j]=arr[i][j]+1;
    }
    if(i+1 < rows && arr[i+1][j]==-1){
        arr[i][j]=arr[i][j]+1;
    }
    if(j+1 <= columns && arr[i][j+1]==-1){   
        arr[i][j]=arr[i][j]+1;
    }
    if(i+1 < rows && j+1 < columns && arr[i+1][j+1]==-1){   
        arr[i][j]=arr[i][j]+1;
    }
    if(i-1 >= 0 && j-1 >= 0 && arr[i-1][j-1]==-1){   
        arr[i][j]=arr[i][j]+1;
    }
    if(i-1 >=0 && j+1 < rows && arr[i-1][j+1]==-1){   
        arr[i][j]=arr[i][j]+1;
    }
    if(i+1 < rows && j-1 >=0 && arr[i+1][j-1]==-1){   
        arr[i][j]=arr[i][j]+1;
    }