2012-11-10 5 views
1

Ok, donc j'ai programmé un simple jeu de ciseaux de papier de roche en utilisant l'entrée de l'utilisateur pour jouer. L'utilisateur tape son choix, une fonction aléatoire choisit les ordinateurs vont et ensuite un résultat est produit. Après cela, le programme est terminé car il est terminé. Je veux utiliser une boucle while de sorte que lorsque le jeu est terminé, il recommence et le programme s'arrête si l'utilisateur tape quitter ou quitter, ce qui peut être fait simplement en disant quelque chose comme playerGo != exit , jouez le jeu bla bla. Cependant, je ne peux pas obtenir ce travail, quelqu'un peut me aider s'il vous plaît, je suis un Java Noob :)Ajout d'une boucle while pour faire une entrée d'utilisateur rock paper ciseaux jeu répétez jusqu'à ce que l'utilisateur termine le jeu

import java.util.Scanner; 

public class RockPaperScissors{ 
    public static void main(String[] args){ 

    Scanner input = new Scanner(System.in); 

    int compGoInt; 
    String compGo; 
    String playerGo; 

    System.out.println("You can type 'Exit' to quit the game at any time."); 
    System.out.print("Please enter your choice. Rock, Paper or Scissors: "); 
    playerGo = input.nextLine(); 

    compGoInt = (int) (Math.random() * 3); 

    switch (compGoInt){ 
    case 0: 
     compGo = "Rock"; 
     break; 
    case 1: 
     compGo = "Paper"; 
     break; 
    case 2: 
     compGo = "Scissors"; 
     break; 
    default: 
     compGo = "Error"; 
     System.out.println("Error."); 
     break; 
    } 

    if (playerGo.equals(compGo)){ 
     System.out.println("Computer chooses "+compGo); 
     System.out.println("It's a draw!"); 
    } 

    else if ((playerGo.equalsIgnoreCase("Rock") && compGo.equalsIgnoreCase("Scissors")) || 
      (playerGo.equalsIgnoreCase("Paper") && compGo.equalsIgnoreCase("Rock")) || 
      (playerGo.equalsIgnoreCase("Scissors") && compGo.equalsIgnoreCase("Paper"))){ 
     System.out.println("Computer chooses "+compGo); 
     System.out.println("Player Wins!"); 
    } 

    else if ((compGo.equalsIgnoreCase("Rock") && playerGo.equalsIgnoreCase("Scissors")) || 
      (compGo.equalsIgnoreCase("Paper") && playerGo.equalsIgnoreCase("Rock")) || 
      (compGo.equalsIgnoreCase("Scissors") && playerGo.equalsIgnoreCase("Paper"))){ 
     System.out.println("Computer chooses "+compGo); 
     System.out.println("Computer Wins!"); 
    } 

    else{ 
     System.out.println("Something has gone wrong!"); 
     System.out.println("Player chose "+playerGo); 
     System.out.println("Computer chose "+compGo); 
    } 


} 

}

+0

'... juste dire quelque chose comme tout playerGo = exit' Notez qu'il devrait être' playerGo.equals! ("exit") '(ou quelque chose). Pouvez-vous nous montrer le code que vous avez essayé et expliquer pourquoi il a échoué? Vous obtiendrez probablement de meilleures réponses - puisqu'ils vous diront également où vous êtes allé mal. – amit

+0

Qu'avez-vous essayé? Où as-tu mis la boucle? Quels types d'erreurs ou de comportement incorrect avez-vous vu? –

Répondre

0

En termes simples:

while(true) { 
    if(playerGo.equalsIgnoreCase("Exit")) break; 
    else //GameLogic 
} 

Bien que, si je peux disons, vous devriez demander à l'utilisateur de choisir un numéro, car toute entrée de lettre est sujette à des erreurs.

Aux fins de clarification:

import java.util.Scanner; 

public class RockPaperScissors{ 
    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     int compGoInt; 
     String compGo; 
     String playerGo; 

     while(true) { 
      System.out.println("You can type 'Exit' to quit the game at any time."); 
      System.out.print("Please enter your choice. Rock, Paper or Scissors: "); 
      playerGo = input.nextLine(); 

      if(playerGo.equalsIgnoreCase("Exit")) break; //Checks for exit condition. 
      else { //GameLogic 

       compGoInt = (int) (Math.random() * 3); 

       switch (compGoInt){ 
       case 0: 
        compGo = "Rock"; 
        break; 
       case 1: 
        compGo = "Paper"; 
        break; 
       case 2: 
        compGo = "Scissors"; 
        break; 
       default: 
        compGo = "Error"; 
        System.out.println("Error."); 
        break; 
       } 

       if (playerGo.equals(compGo)){ 
        System.out.println("Computer chooses "+compGo); 
        System.out.println("It's a draw!"); 
       } 

       else if ((playerGo.equalsIgnoreCase("Rock") && compGo.equalsIgnoreCase("Scissors")) || 
         (playerGo.equalsIgnoreCase("Paper") && compGo.equalsIgnoreCase("Rock")) || 
         (playerGo.equalsIgnoreCase("Scissors") && compGo.equalsIgnoreCase("Paper"))){ 
        System.out.println("Computer chooses "+compGo); 
        System.out.println("Player Wins!"); 
       } 

       else if ((compGo.equalsIgnoreCase("Rock") && playerGo.equalsIgnoreCase("Scissors")) || 
         (compGo.equalsIgnoreCase("Paper") && playerGo.equalsIgnoreCase("Rock")) || 
         (compGo.equalsIgnoreCase("Scissors") && playerGo.equalsIgnoreCase("Paper"))){ 
        System.out.println("Computer chooses "+compGo); 
        System.out.println("Computer Wins!"); 
       } 

       else{ 
        System.out.println("Something has gone wrong!"); 
        System.out.println("Player chose "+playerGo); 
        System.out.println("Computer chose "+compGo); 
       } 
      } 
     } 
    } 
} 
+0

Où va cette boucle while? Si je le mets avant le tout, j'ai le problème que la variable playerGo n'est pas déclarée, mais si je la mets après cela me donne juste mon message d'erreur de l'instruction else. Merci :) – Daniel

+0

@Daniel J'ai copié tout votre code et mis la boucle à l'endroit approprié. Vous pouvez également déplacer la boucle sur deux lignes, si vous ne voulez pas que les instructions soient imprimées à tout moment, mais que input.nextLine() DOIT être à l'intérieur de la boucle. – ATaylor

+0

Oh je vois, je n'avais pas ajouté dans une pause quand j'ai essayé d'ajouter une boucle while moi-même, et j'ai l'opérateur booléen! = Au lieu d'égal. Cela a fonctionné parfaitement comme je le voulais, merci beaucoup :) – Daniel

0

Vous pouvez ajouter une IsGameRunning variable booléenne = true. encapsule l'ensemble de la connexion dans une boucle while qui vérifie l'état de IsGameRunning. Ajoute un cas à l'instruction switch qui vérifie l'entrée utilisateur "-1", et lorsque l'utilisateur entre "-1" comme entrée, la variable IsGameRunning devient false.

simple et devrait fonctionner

+0

Je vais essayer, merci :) – Daniel

0
boolean running = true; 
do{ 
    System.out.println("You can type 'Exit' to quit the game at any time."); 
    System.out.print("Please enter your choice. Rock, Paper or Scissors: "); 
    playerGo = input.nextLine(); 
    running = !(playerGo.equalsIgnoreCase('Exit') || playerGo.equalsIgnoreCase('Quit')); 
    if(running){ 
     //logic 
     compGoInt = (int) (Math.random() * 3); 
     ... 
    } 
}while(running) 

faire en -> entrée doit être demandé au moins une fois.

et

if (playerGo.equals(compGo)){ 
    System.out.println("Computer chooses "+compGo); 
    System.out.println("It's a draw!"); 
} 

playerGo.equals(compGo) ->playerGo.equalsIgnoreCase(compGo) comme le reste de votre code

+0

Oh oui, merci :) – Daniel

Questions connexes