2017-12-21 20 views
0

그래서이 미로 게임을 만들어야합니다. "미로"에서 남쪽으로 이동하는 것 외에는 모든 것이 잘 작동합니다. 그래서 나는 플레이어가 가고 싶은 곳을 스캔하고 그것을 기반으로 배열에서 플레이어 "P"의 위치를 ​​편집합니다. 이것은 북쪽, 동쪽 또는 서쪽으로가는 것이지만 남쪽으로가는 것은 문제가 없습니다.배열을 사용하여 한 방향으로 만 자바 미로 게임 오류가 발생했습니다.

코드의 배경 : 11 * 11 배열이 있고 요소 중 하나에 P와 같습니다. 사용자 입력에 따라이 P는 북쪽 또는 남쪽 또는 동쪽 또는 서쪽으로 가며 벽이없는 경우 제공됩니다 (---로 표시됨).

for (int i = 0; i < currentPos.length; i++) { 
    for (int j = 0; j < currentPos[0].length; j++) { 
     if (currentPos[i][j].equals("P")) { 
      if (direction.equals("north")) { 
       if (currentPos[i - 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i - 2][j] = "P"; 

        break; 

       } 
      } 
      if (direction.equals("south")) { 
       if (currentPos[i + 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i + 2][j] = "P"; 

        break; 

       } 
      } 
     } 

    } 
} 

임포트 부분은 [I-2] [J] 또는 [I + 2] [J] 파트 I 짐작 될 것이다. 나는 여기에 두 방향 만 놓았지만 다른 두 방향은 [i] [j-2]와 [i] [j + 2]로 잘 작동합니다.

[i-1] [j] .equals ("---")) {) 벽을 검사하기 전에 남쪽은 항상 경계를 벗어난 오류를 나타냅니다. 이제 벽을 조사 할 때 벽에 부딪 힐 때까지 남쪽으로갑니다.

답변

1

break은 가장 안쪽 루프에서 벗어나기 때문에 현재 행 처리가 중지되고 프로그램은 다음 행으로 이동합니다.

동쪽이나 서쪽에는 문제가 없습니다. 플레이어가 같은 줄에서 끝나고 행을 중단하면 플레이어를 다시 찾을 수 없습니다. 북쪽으로가는 것도 문제가 아닙니다. 플레이어가 이전에 처리 된 행으로 끝나기 때문에 다시 찾을 수 없습니다.

그러나 남쪽으로 가면 다음 행에서 플레이어를 다시 찾은 다음 다른 단계로 이동합니다. 그런 다음 다시 만난 다음 다시 분명히 이동하십시오. 계속해서.

이렇게하려면 플레이어를 찾은 후에 완전히 중지하십시오. 계속해서 플레이어를 찾지 마십시오. 코드에 대해 더 이상 알지 못하면 루프 레이블을 사용하여 두 루프에서 벗어날 수 있습니다.

outerloop: 
for (int i = 0; i < currentPos.length; i++) { 
    for (int j = 0; j < currentPos[0].length; j++) { 
     if (currentPos[i][j].equals("P")) { 
      if (direction.equals("north")) { 
       if (currentPos[i - 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i - 2][j] = "P"; 

        break outerloop; 

       } 
      } 
      if (direction.equals("south")) { 
       if (currentPos[i + 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i + 2][j] = "P"; 

        break outerloop; 

       } 
      } 
     } 

    } 
} 
+0

감사합니다. 매력처럼 일했다. 설명 주셔서 감사합니다. 정말 유용했습니다! – Joris