2017-01-14 3 views
-1

Я программирую java-игру. Это почти сделано, но это дает мне ошибку (и я не понимаю, почему это происходит, код выглядит нормально). Ошибка.Ошибка Java-игры

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: projetofinal.ProjetoFinalv2.movimento 
    at projetofinal.ProjetoFinalv2.main(ProjetoFinalv2.java:26) 
C:\Users\Francisco\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 2 seconds) 

Вот код:

package projetofinal; 
import java.util.Scanner; 
import java.util.Random; 

public class ProjetoFinalv2 { 

    static char[][] tabuleiro; 
    static int x, y, jogadorX, jogadorY, pontos; 
    static char direction; 
    static boolean inGame = true; 

    public static void main(String[] args) { 

     x = 5; 
     y = 5; 
     tabuleiro = new char[x][y]; 
     jogadorX = 0; 
     jogadorY = 4; 
     pontos = 7; 
     quadro(); 
     while(inGame == true) 
     { 
     customcreator(); 
     Scanner scan = new Scanner(System.in); 
     String resposta = scan.nextLine(); 
     movimento(resposta.charAt(0)); 
     } 
    } 

     public static void placePot() 
    { 
     boolean notDone = true; 
     while(notDone) 
     { 
     int tabX = random(0, 4); 
     int tabY = random(0, 4); 
     if(tabuleiro[tabX][tabY] == '.') 
     { 
      tabuleiro[tabX][tabY] = 'P'; 
      notDone = false; 
     } 
     } 
    } 

    public static boolean bomba(int x, int y) 
    { 
     if(tabuleiro[x][y] == 'B') 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public static boolean win() 
    { 
     if(tabuleiro[jogadorX][jogadorY] == 'F') 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public static boolean gameover() 
    { 
     if(pontos > 0) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

    public static int potepoints(int x, int y) 
    { 
     if(tabuleiro[x][y] == 'P') 
     { 
      return random(3,5); 
     } 
     else 
     { 
      return -1; 
     } 
    } 

     public static void quadro() 
    { 
     for(int linha = 0; linha < x; linha++) 
     { 
      for(int vertical = 0; vertical < y; vertical++) 
     { 
      tabuleiro[linha][vertical] = '.'; 
     } 
     } 

     //Por as bombas na posição correta 

     for(int i = quantos(); i>0; i--) 
     { 
      boolean tab = true; 
      while(tab) 
      { 
      int tabX = random(1, 3); 
      int tabY = random(1, 2); 
      if(tabuleiro[tabX][tabY] != 'B') 
      { 
       tabuleiro[tabX][tabY] = 'B'; 
       tab = false; 
      } 
      } 
     } 
     //Mete o pote que da pontos 
     placePot(); 
    } 
    public static void tabuleirocreator() 
    { 
     playercreator(); 
     for(int linha = 0; linha < y; linha++) 
     { 
      for(int vertical = 0; vertical < x; vertical++) 
     { 
      System.out.print(tabuleiro[vertical][linha]); 
     } 
      System.out.print("\n"); 
     } 
    } 

    public static void playercreator() 
    { 

     tabuleiro[jogadorX][jogadorY] = 'J'; 

    } 

    public static void customcreator() 
    { 
    tabuleiro[0][4] = 'I'; 
    tabuleiro[4][0] = 'F'; 
    tabuleirocreator(); 
    } 

    public static int random(int min, int max) 
    { 
    Random generator = new Random(); 
    int Num = generator.nextInt((max - min) + 1) + min; 
    return Num; 
    } 

    public static int quantos() 
    { 
     return random(2, 3); 
    } 
} 


    //Ciclo do jogo 
    public static void movimento(char newDirection) 
    { 
     if(newDirection == 'w' || newDirection == 'W') 
     { 
      if(jogadorY > 0) 
      { 
       tabuleiro[jogadorX][jogadorY] = '.'; 
      jogadorY -= 1; 
      pontos--; 
      } 
     } 
     else 
     { 
      if(newDirection == 'a' || newDirection == 'A') 
      { 
       if(jogadorX > 0) 
       { 
       tabuleiro[jogadorX][jogadorY] = '.'; 
       jogadorX -= 1; 
       pontos--; 
       } 
      } 
      else 
      { 
       if(newDirection == 's' || newDirection == 'S') 
       { 
        if(jogadorY < 4) 
        { 
         tabuleiro[jogadorX][jogadorY] = '.'; 
        jogadorY += 1; 
        pontos--; 
        } 
       } 
       else 
       { 
        if(newDirection == 'd' || newDirection == 'D') 
        { 
         if(jogadorX < 4) 
         { 
         tabuleiro[jogadorX][jogadorY] = '.'; 
         jogadorX += 1; 
         pontos--; 
         } 
        } 
        else 
        { 
         System.out.println("Wrong direction!"); 
        } 
       } 
      } 
     } 

     if(bomba(jogadorX, jogadorY)) 
     { 
      pontos = 0; 
     } 
     int tab = potepoints(jogadorX, jogadorY); 
     if(tab != -1) 
     { 
      pontos += tab; 

     } 
     if(win()) 
     { 
      System.out.println("You won"); 
      inGame = false; 
     } 
     if(gameover()) 
     { 
      System.out.println("Game Over"); 
      inGame = false; 
     } 


    } 







    ////////////////////////////////////////////////////////////// 

Я являюсь довольно нуб в Java (я начал изучать недавно), поэтому я прошу прощения, если этот вопрос плохо.

+0

Вы пытаетесь использовать класс, скомпилированный с ошибками. Анализ сообщений во время компиляции –

+1

Вы делаете ** новый ** сканер с каждой итерацией цикла while - Why? Не делайте этого, потому что это не нужно и даже потенциально опасно. И да, никогда не пытайтесь запускать код, который не будет компилироваться. Прочитайте сообщения об ошибках компилятора и исправьте их в первую очередь. Сообщения обычно вполне понятны. –

+1

@ LewBloch: да, это ** делает ** внести изменения. Обычно сообщение об ошибке компилятора ** много ** легче понять, чем JVM. Да, мы можем дать ему решение этой проблемы, но если мы сможем заставить его привыкнуть критически относиться к сообщению компилятора, то мы будем помогать не только этой текущей проблеме, но и его будущим проблемам. Он должен хотя бы опубликовать сообщение об ошибке компилятора с его вопросом, и тогда у нас будет больше шансов помочь ему понять это лучше. –

ответ

-1

Сообщение сообщает вам, что компилятор не может найти определение для projetofinal.ProjetoFinalv2.movimento, символ в строке 26: movimento(resposta.charAt(0));. Но movimento не определен внутри класса. Определение класса заканчивается закрывающей скобкой (}) незадолго до определения оси сирот для movimento. Это не только делает определение метода недоступным для вызывающего, но и совершенно невозможно определить методы или переменные вне класса.

+1

Если вы используете downvote, пожалуйста, оставьте полезный комментарий. –

+0

Каков правильный путь? как я это исправить? – FRP72

+1

Переместите правую скобку '}', которая появляется между методами 'quantos' и' movimento', вплоть до конца файла. Таким образом, 'movimento()' будет отображаться внутри класса, –