2017-10-27 3 views
1

10x10ボードの周りに作品を移動するためのゲームを作成する必要があります。あなたは "^"スペースに移動し、あなたは勝ちます。これはこれまでのコードですが、問題があります。私は、プレイヤーが9を入力したときにゲームを終了するためのコードに休憩を入れました。しかし、ブレークがそこにあるとき、私は到達不能なコードエラーを取得します。私がそれを取り出すと、ゲームはすべての入力後にゲームが終了し、あなたが想定しているようにゲームをやめることができなくなることを除いて正常に動作します。私は間違った場所に置いていますか?または、プレーヤーが移動のために9を入力した場合、ゲームを終了するためのよりよい方法がありますか?これを実行すると到達不能なコードエラーが発生しますが、理由はわかりません

import java.util.Scanner; 
import java.util.Random; 

public class MineWalker { 
    public static final int BOARD_SIZE = 10; 

    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     int pX = 0; 
     int pY = 0; 
     Random r = new Random(); 
     int gX = r.nextInt(BOARD_SIZE); 
     int gY = r.nextInt(BOARD_SIZE); 

     Spaces[][] board = new Spaces[BOARD_SIZE][BOARD_SIZE]; 

     for (int y = 0; y < board.length; y++) //clears board 
     { 
      for (int x = 0; x < board[y].length; x++) { 
       board[x][y] = Spaces.Empty; 
      } 
     } 
     board[pX][pY] = Spaces.Player; 
     board[gX][gY] = Spaces.Goal; 

     System.out.println("Welcome to Mine Walker. Get the ice cream cone and avoid the mines"); 

     boolean gameOver = false; 
     while (gameOver == false) //game loop 
     { 
      for (int y = 0; y < board.length; y++) //Draws board 
      { 
       for (int x = 0; x < board[y].length; x++) { 
        switch (board[x][y]) { 
         case Empty: 
          System.out.print("_"); 
          break; 
         case Player: 
          System.out.print("X"); 
          break; 
         case Goal: 
          System.out.print("^"); 
          break; 
        } 
       } 
       System.out.println(); 
      } 
      System.out.println("Enter either a -1, 0, or 1 in the X or 9 to quit");//moves game piece 
      int dx = keyboard.nextInt(); 
      if (dx == 9) ; 
      { 
       System.out.println("Game Over"); 
       break; 
      } 
      System.out.println("Enter either a -1,0, or 1 in the Y"); // Unreachable statement here 
      int dy = keyboard.nextInt(); 

      if (dx < -1 || dx > 1) { 
       System.out.println("Invalid x"); 
       dx = 0; 
      } 
      if (dy < -1 || dy > 1) { 
       System.out.println("Invalid y"); 
       dy = 0; 
      } 
      board[pX][pY] = Spaces.Empty; 

      pX += dx; 
      pY += dy; 

      if (board[pX][pY] == Spaces.Goal) { 
       System.out.println("You win!"); 
       gameOver = true; 
      } 
      board[pX][pY] = Spaces.Player; 
     } 
    } 

    ; 

    enum Spaces {Empty, Player, Goal} 
} 
+3

あなたの ';'を数えます。少なくとも1対多が存在する。 – tkausl

+0

IDEの自動フォーマッタでコードを実行しましたが、慎重に見れば問題は明らかです。 [if文の最後のセミコロン](/ q/14112515)を参照してください。 – bcsb1001

+2

[if文の末尾にセミコロンを入れる]の可能な複製(https://stackoverflow.com/questions/14112515/semicolon-at-end-of-if-statement) – dave

答えて

3
if(dx == 9); 

上記は有効な文で、コードはこれでコンパイルしなければならないのに。しかし、次の文のブロックは、どんな条件にも関係なく実行されます: -

は、条件に関係なく実行されます。したがって、ループはいつもbreakを見つけます。ループが途切れた場合は、次のステートメント

System.out.println("Enter either a -1,0, or 1 in the Y"); 

に到達できません。

関連する問題