2016-07-04 11 views
0

私は小さな戦艦ゲームを作っています。私がゲームを実行し、ユーザーの勝利をシミュレートすると、ユーザーが勝ったにもかかわらず、さらに1組の座標が求められます。もう1組の座標を入力した後、ゲームはあなたが勝ったと言います。戦艦:1つの入力ループが多すぎます

誰かが問題を特定できないようですね。

おかげで、ここで

は私のコードは

ある
import java.util.Random; 
import java.util.Scanner; 

public class Battleships { 
public static void main(String[] args) { 
    System.out.println("You'll have 10 tries to destroy the ship"); 

    String[][] displayGrid = { 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" } 
      }; 

    String[][] internalGrid = { 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" }, 
      { "O", "O", "O", "O", "O" } 
      }; 

    Random dice1 = new Random(); 
    int r = 0; 
    r = dice1.nextInt(4); 

    Random dice2 = new Random(); 
    int c = 0; 
    c = dice2.nextInt(5); 

    // Generates location of 2x1 ship 

    internalGrid[r][c] = "X"; 
    internalGrid[r + 1][c] = "X"; 
    // inserts random location into internal grid 

    for (int row = 0; row < displayGrid.length; row++) { 

     for (int col = 0; col < displayGrid[row].length; col++) { 
      System.out.print(displayGrid[row][col] + "\t"); 
     } 
     System.out.println(); 
    } 
    System.out.println(); 
    int ucol = 0; 
    int urow = 0; 
    int hits = 0; 

    for (int row = 0; row < internalGrid.length; row++) { 

     for (int col = 0; col < internalGrid[row].length; col++) { 
      System.out.print(internalGrid[row][col] + "\t"); 
     } 
     System.out.println(); 
    } 
    //print internal grid for debugging 

    for (int i = 0; i < 10; i++) { 
     do { 
      Scanner row1 = new Scanner(System.in); 
      System.out.println("Enter a row between 1 and 5"); 
      urow = row1.nextInt() - 1; 
     } 

     while (urow > 4 || urow < 0); 

     do { 
      Scanner col1 = new Scanner(System.in); 
      System.out.println("Enter a column between 1 and 5"); 
      ucol = col1.nextInt() - 1; 
     } 

     while (ucol > 4 || ucol < 0); 


     if (internalGrid[r][c] == "H" && internalGrid[r + 1][c] == "H") { 
      System.out.println("You win!!"); 
      i= 10;} //i think the issue is here?? 
     else if (internalGrid[urow][ucol] == "X") { 
      System.out.println("Hit!!"); 
      internalGrid[urow][ucol] = "H"; 
     } 
     else if (internalGrid[urow][ucol] == "H") { 
      System.out.println("You already hit that location");} 
     else { 
      System.out.println("Miss :("); 

     } 
    } 

    System.out.println("Game Finished!!"); 

} 

} 
+0

if (internalGrid[r][c] == "H" && internalGrid[r + 1][c] == "H") { System.out.println("You win!!"); i= 10;} //i think the issue is here?? else if (internalGrid[urow][ucol] == "X") { System.out.println("Hit!!"); internalGrid[urow][ucol] = "H"; } else if (internalGrid[urow][ucol] == "H") { System.out.println("You already hit that location");} else { System.out.println("Miss :("); } 

をそして、これと交換してください。 @CoderinoJavarino –

+0

@JorgeCampos申し訳ありませんが、私はあなたが何を意味するか説明できますか? –

+0

あなたのwhileコードは何もしないと言っていた別のユーザーコメントがありましたが、最初の場所では明確ではないので、それはその上の 'do'コードに属しています。 –

答えて

0

私はそれが正しいここで、このラインとは何かを持っている疑いがある:

if (internalGrid[r][c] == "H" && internalGrid[r + 1][c] == "H") { 

私はあなたがurowucolを使用するためのものだと思いますrcの代わりに

このすべてを取り出し:私はそれが上記のDOコマンドからであると指摘されるまで、私は同じことをコメントしました

boolean isAlreadyHit = (internalGrid[urow][ucol] == 'H'); 
boolean isNewHit = (internalGrid[urow][ucol] == 'X'); 

if (isAlreadyHit) { 
    System.out.println("You already hit that location");} 
} 
else if (isNewHit) { 
    System.out.println("Hit!"); 
    internalGrid[urow][ucol] = 'H'; 
} 
else { 
    System.out.println("Miss!"); 
} 

boolean isWinner = true; 
for (int row = 0; row < internalGrid.length; row++) { 
    for (int col = 0; col < internalGrid[row].length; col++) { 
     if (internalGrid[row][col] == 'X') { 
      isWinner = false; 
     } 
    } 
} 

if (isWinner) { 
    System.out.println("You win!"); 
    break; // breaks out of the outer for loop 
} 
+0

ああありがとうございました。どのように正確に働いたのか、そしてなぜ私のおかげですのか –

+0

あなたが答えを気に入ったら、少なくともupvoteする必要があります。もしあなたのために働くなら、それに緑色のチェックボックスを付けるべきです(答えを受け入れる)。 – selbie

+0

申し訳ありませんあなたが投稿した後に投票しましたが、それは公に表示されないと言われています。評判が15を超える必要があるからです –

関連する問題