2017-05-20 5 views
-1

Ich mache ein einfaches "Whack a Maulwurf" Spiel in Java. Zur Vereinfachung habe ich eine 10 * 10 Box erstellt und 10 Mole in zufällige Kästchen gelegt. Ich möchte das Spiel beenden, wenn der Benutzer seine 50 Eingaben ausgegeben hat oder alle 10 Mole gefunden hat, aber es scheint ein Problem beim Beenden der while Schleife zu geben, auch wenn der Benutzer bestimmte Eingaben versucht.ich habe Probleme in während Schleife

Ist das Problem mit dem variablen Bereich der Instanz? Warum funktioniert es nicht?

public class WhackAMole { 

    int score = 0, molesLeft = 10, attempts; 
    char[][] moleGrid = new char[10][10]; 
    int numAttempts, gridDimension; 

    public WhackAMole(int numAttempts, int gridDimension) { 
     // TODO Auto-generated constructor stub 
     this.numAttempts = numAttempts; 
     this.gridDimension = gridDimension; 
    } 

    boolean place(int x, int y) { 
     return (x == 2 && y == 5) 
      || (x == 1 && y == 3) 
      || (x == 8 && y == 4) 
      || (x == 5 && y == 10) 
      || (x == 6 && y == 9) 
      || (x == 10 && y == 7) 
      || (x == 3 && y == 7) 
      || (x == 2 && y == 9) 
      || (x == 4 && y == 8) 
      || (x == 9 && y == 5); 
    } 

    void whack(int x, int y) { 
     if (place(x, y)) { 
      if (moleGrid[x - 1][y - 1] == 'W') { 
       System.out.println("Already attempted! \'try other co-ordinates\' \n"); 
      } else { 
       moleGrid[x - 1][y - 1] = 'W'; 
       this.score ++; 
       this.molesLeft --; 
      } 
     } 
    } 

    void printGridToUser() { 
     System.out.println("your score is " + score + " and " + molesLeft + " moles are left. \n"); 
     System.out.println("input x = -1 and y = -1 to quit the game! \n"); 
     for(int i = 0; i < 10; i++){ 
      for(int j = 0; j < 10; j++){ 
       System.out.print(" " + moleGrid[i][j] + " "); 
      } 

      System.out.println("\n"); 
     } 
    } 

    void printGrid() { 
     for(int i = 0; i < 10; i++){ 
      for(int j = 0; j < 10; j++){ 
       this.moleGrid[i][j] = '*'; 
      } 
     } 
    } 

    public static void main(String[] args) { 
     WhackAMole game; 

     System.out.println("Lets play the Whack A Mole!\n"); 

     game = new WhackAMole(50, 100); 
     game.printGrid(); 
     game.printGridToUser(); 
     Scanner scanner = new Scanner(System.in); 

     while ((game.numAttempts > 0) || (game.molesLeft > 0)) { 
      System.out.println("Enter box co-ordinate\n"); 
      System.out.println("x co-ordinate: \n"); 
      int x = scanner.nextInt(); 

      System.out.println("y co-ordinate: \n"); 
      int y = scanner.nextInt(); 

      if (x == -1 && y == -1) { 
       break; 
      } else if ((x < 1 || y < 1) || (x > 10 || y > 10)) { 
       System.out.println("please enter values of x and y greater than 0 and less than 11! \n"); 
      } else { 
       game.whack(x, y); 
       game.numAttempts--; 
       game.gridDimension--; 
       System.out.println("you can have upto " + game.numAttempts + " out of " + game.gridDimension + " boxes \n"); 
       game.printGridToUser(); 
      } 
     } 

     for (int i = 0; i < 10; i++) { 
      for (int j = 0; j < 10; j++) { 
       if (game.place(i+1, j+1) && game.moleGrid[i][j] != 'W'){ 
        game.moleGrid[i][j] = 'M'; 
       } 
      } 
     } 

     game.printGridToUser(); 
     scanner.close(); 
     System.out.println("game over!!!\n"); 
     } 
    } 
+1

Haben Sie versucht, 'while ((game.numAttempts> 0) && (game.molesLeft> 0)) '? –

+1

Und Tipp: Sie möchten, dass wir unsere Zeit verbringen, um Ihnen zu helfen; also verbringst du bitte die 2 Minuten, die benötigt werden, um deine Eingaben korrekt einzutragen. – GhostCat

Antwort

0

Ihre while Schleife endet nicht, weil Sie || in Ihrer while Schleife verwenden. Die || macht Ihre Schleife laufen, bis die Versuche erlaubt, d. H. 50 und das richtige Raten, d. Auch wenn ein Spieler seine erlaubten Versuche beendet hat und nicht alle richtigen Maulwurf-Positionen erraten hat, wird die Schleife nicht enden
Die einfache Lösung wäre, || zu ersetzen mit & &

while ((game.numAttempts > 0) && (game.molesLeft > 0)) 

Und vermeiden Zahlen 10 unter Verwendung von festen, also in Ihrer for-Schleifen statt

for (int i = 0; i < game.gridDimension; i++) { 
      for (int j = 0; j < game.gridDimension; j++) { 

verwende ich hoffe, es hilft

0

Ihre Schleife verwendet eine oder für die Testfunktion. Dies bedeutet, dass beide Bedingungsnebel falsch sind, damit sie anhalten. In Ihrem Fall. Wie es geschrieben ist, müssen Sie die Zahlen erschöpfen und keine Molen mehr haben.

Änderung verwenden & & vs ||.