2017-11-10 9 views
0

지금 '지뢰 찾기'에서 일하고 있습니다. 필드를 설정했습니다.지뢰 찾기가 광산의 이웃을 확인하십시오.

나는 몇 가지 질문이 있습니다. 첫째, 광산의 수는 1에서 fieldSize-1이어야합니다.이 값이 올바른지 확신 할 수 없으므로 'minesNum'으로 선언합니다. 둘째, 광산 수가 올바르다 고 가정하면 광산의 이웃을 확인하여 9 개의 if 문이 있지만 두 번째 if 문에 'Uncaught TypeError : 속성을 설정할 수 없습니다'라는 오류 메시지가 표시됩니다. '정의되지 않음'.

나는 약 5 시간 동안 고민 중이며, 아직도 그것을 이해할 수 없다. 아무도 그것으로 나를 도울 수 있습니까? 감사합니다.

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; 
     } 
    } 
} 

답변

0

먼저 잘못된 방법으로 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; 
    } 
} 

후 변경 유효한 배열 인덱스를 기반으로 논리

+0

내 필드의 최대 크기는 내가 바로, 너무 배열의 크기를 선언해야한다고 생각, * 30 40? – user6428015

+0

그렇게 할 필요가 없습니다. 새로운 배열 (30,40)은 요소 30과 40을 가진 배열을 만듭니다. –

0

질문의 두 번째 부분에 응답하면 먼저 체크인 할 위치가 있는지 확인해야합니다 if 문이 유효한지 여부. 따라서 arr [i-1] [j]에 액세스하기 전에 먼저 (i-1)이 0보다 작지 않은지 확인해야합니다. 값이 0보다 작 으면 잘못된 위치에 액세스하려고 시도하는 것이므로 오류가 발생합니다. 모든 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; 
    } 
+0

감사합니다! 고마워요! – user6428015