2014-05-19 1 views
-3

Alors j'écris un programme où deux utilisateurs lancent un dé à tour de rôle. Si l'utilisateur jette un 1 alors son tour se termine, si l'utilisateur lance 2-6, je suis censé garder un total cumulé des points marqués jusqu'à ce que l'utilisateur décide de rouler à nouveau et risque ses points stockés pour le tour ou sauvegarde le.J'ai du mal à décider où placer une boucle while dans mon programme de jeu de dés de cochon

Le problème que j'ai en ce moment concerne l'endroit où je devrais placer une boucle while dans mon code pour que l'utilisateur puisse jouer pendant une durée indéterminée. Idéalement, je voudrais sortir de la boucle while chaque fois que l'utilisateur obtient un 1, mais j'ai aussi des problèmes avec la façon de mettre à jour ce numéro à chaque fois en dehors de la boucle.

Toute aide serait grandement appréciée! Note: Le jeu n'est pas encore terminé, j'essaye d'écrire certains de ces problèmes avant de passer à autre chose, aussi l'endroit où je voudrais mettre ma boucle while est dans la méthode takeTurn.

Merci encore!

Voici mon code:

import java.util.*; 
public class PigDice { 

// when a player reaches this number, they win 
public static final int WINNING_SCORE = 50; 

public static final int DIE = 6; // sides on a die. 

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    Random rand = new Random(); 

    String winner = playGame(keyboard, rand); 
    System.out.println(winner + " wins!"); 
} 
public static String playGame(Scanner scanner, Random rand) { 

    int score1 = 0; // player 1's score 
    int score2 = 0; // player 2's score 

    // play till someone wins 
    while (score1 < WINNING_SCORE && score2 < WINNING_SCORE) { 
     score1 += takeTurn(scanner, rand, 1, score1); 
     System.out.println("Player 1 score: " + score1); 
     System.out.println("***************************"); 
     if (score1 < WINNING_SCORE) { 
      score2 += takeTurn(scanner, rand, 2, score2); 
      System.out.println("Player 2 score: " + score2); 
      System.out.println("***************************"); 
     } 
    } 
    if (score1 >= WINNING_SCORE) { 
     return "Player 1"; 
    } 
    else { 
     return "Player 2"; 
    } 
} 

public static int takeTurn(Scanner scanner, Random rand, int player, int score) { 
    int random = rand.nextInt(DIE)+ 1; 
    System.out.println("Player " + player + " rolls: " + random); 
    int firstRoll = random; 
    int roundTotal = 0; 

    if (random > 1) { 
     System.out.println("Player " + player + " total for this round: " + firstRoll); 
     roundTotal += firstRoll; 
     System.out.print("Roll again? (y or n) : "); 
     String getAnswer = scanner.nextLine(); 
     System.out.println(); 
     if ("y".equalsIgnoreCase(getAnswer)) { 
      System.out.println("Player " + player + " rolls: " + random); 

     }else if ("n".equalsIgnoreCase(getAnswer)) { 
      System.out.println("Player " + player + " score: " + roundTotal); 
     } 
    }else { 
     System.out.println("Player " + player + ": turn ends with no new points."); 
     System.out.println("Player " + player + " score: " + score); 
    }  


    return WINNING_SCORE;  
} 

}

+0

Merci les gars! Je l'ai compris, et tout fonctionne! Merci pour votre temps!! – user3643284

Répondre

1

Conseil: Cela peut ne pas être la plus pure solution, mais (pas beaucoup de gens sont au courant de cela, probablement pour le meilleur) boucles Java peuvent utiliser labels :) Avec eux, vous pouvez facilement aller où vous voulez dans votre boucle.

+0

Ouais ... en utilisant des étiquettes peut être très salissant, il devient difficile de reconnaître le flux du programme. –

0

Vous devriez mettre votre boucle dans la classe principale, pour sortir une fois qu'un joueur en a lancé une, renvoyez simplement une chaîne qui dit quelque chose comme 'perdu', vérifiez cela à la fin de la boucle puis quittez le programme , ou pas.

+0

Désolé je devrais avoir mentionné que je ne suis pas censé changer quelque chose dans le principal, avez-vous une autre suggestion? – user3643284

+0

Dans ce cas, vous pouvez mettre la boucle dans une autre méthode, appelée de votre main, qui appelle la boucle de jeu principale. –

0

J'ai ajouté une boucle while while dans le corps de ma méthode takeTurn qui permettait de tout faire autrement.

Questions connexes