2017-12-21 12 views
0

私の問題は、この迷路ゲームを作成する必要があります。すべては、 "迷路"の南を移動する以外は正常に動作します。そこで、プレイヤーがどこに行きたいのかをスキャンし、それに基づいてプレイヤー "P"の場所を配列で編集します。これは北、東、西に行くのにうまくいきますが、南には行きません。java mazeゲームのエラーが一方向にのみ、配列を使用して

私は11 * 11の配列を持ち、これはPに等しい要素の1つにあります。ユーザー入力に基づいて、この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]一部らしいあろう。私はここに2つの方向しか置いていませんが、他の2つは[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

関連する問題