扫雷艇检查邻近的地雷
2017-11-10
849
我现在正在研究“扫雷”,我已经设置了字段。
我有几个问题。首先,地雷的数量应该是从 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个回答
首先,您以错误的方式创建了二维数组:
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;
}
}
然后根据有效的数组索引更改您的逻辑
Pratheesh M
2017-11-10
回答问题的第二部分,您需要首先验证您在 if 语句中检查的位置是否有效。 因此,在访问 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;
}
Rohit Goyal
2017-11-10