2015-09-23 4 views
0
import java.util.Scanner; 

public class Project2Main { 

public static void main(String[] args) { 

    Scanner kb = new Scanner(System.in); 
    int numberOfSets = 0; 
    System.out.println("How many sets of dice would you like to roll?"); 
    numberOfSets = kb.nextInt(); 
    kb.nextLine(); 

    for (int i = 0; i < numberOfSets; i++) { 
     int dice1 = 0; 
     int dice2 = 0; 
     int dice3 = 0; 
     int dice4 = 0; 
     int diceTotal = 0; 

     if (dice1 < dice2 && dice1 < dice3 && dice1 < dice4) { 
      diceTotal = dice2 + dice3 + dice4; 
      System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice1 + "."); 
      break; 
     } else if (dice2 < dice1 && dice2 < dice3 && dice2 < dice4) { 
      diceTotal = dice1 + dice3 + dice4; 
      System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice2 + "."); 
      break; 
     } else if (dice3 < dice1 && dice3 < dice2 && dice3 < dice4) { 
      diceTotal = dice1 + dice2 + dice4; 
      System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice3 + "."); 
      break; 
     } else if (dice4 < dice1 && dice4 < dice2 && dice4 < dice3) { 
      diceTotal = dice1 + dice2 + dice3; 
      System.out.println("Your roll total is " + diceTotal + " and your lowest roll was " + dice4 + "."); 
      break; 
     } 
    } 
    kb.close(); 
} 

Ceci est ma classe principale. Le but de tout cela est de prendre quatre rouleaux différents d'un dé à six faces, vérifier et voir quel rouleau est le plus bas, et d'ajouter les trois rouleaux les plus élevés ensemble tout en disant à l'utilisateur quel était leur rouleau le plus bas.Avoir des problèmes avec mes donjons et dragons dé

La principale chose que j'ai de la difficulté à faire est de faire un cours de dés. Je sais que j'ai besoin d'un int pour contenir la valeur du dé, d'un constructeur pour créer réellement l'entier aléatoire, et d'un getter pour renvoyer réellement les entiers aléatoires à la classe principale. Comment puis-je faire cela?

Une autre question: Comment faire pour que l'utilisateur choisisse un ensemble et relance la plus petite valeur de cet ensemble? Ce que je veux dire par là, c'est que lorsque l'utilisateur roule, les trois plus grands jets de dés sont additionnés et le plus petit est mis de côté. L'utilisateur doit être obligé de relancer la plus petite valeur des trois jets de dés les plus élevés, même s'ils ne le souhaitent pas.

L'utilisateur doit être en mesure d'entrer un nombre dictant quel jeu finira par être relancé. Je m'excuse si cela n'a pas beaucoup de sens, donc si quelqu'un voudrait suggérer des modifications pour rendre cela plus clair, ce serait génial.

+0

avez-vous essayé déjà quelque chose? Je pense que vous devriez utiliser un tableau avec les différentes valeurs possibles et un getValue qui retourne un aléatoire –

+0

J'ai déjà une idée de ce que j'essaie de faire avec ma classe de dés. Je veux qu'il ait un constructeur et un getter pour lancer les dés dans la classe de dés et ensuite le rendre capable de renvoyer ces valeurs à la classe principale. Je voudrais également éviter les tableaux si possible. – Polansi

+0

Que diriez-vous d'une classe 'Dice' avec une méthode' Roll() 'et un constructeur qui prend la valeur max possible de rouler (6 pour 6 faces)? –

Répondre

0

Classe DiceRoller personnalisée ayant la capacité de rouler n'importe quel nombre d'ensembles 4d6-drop-lower.

import java.util.*; 

public class DiceRoller 
{ 
    private Random rand; 

    public DiceRoller() 
    { 
     this.rand = new Random(); 
    } 

    public int rollSingleDie() 
    { 
     return rand.nextInt(6)+1; 
    } 

    public List<Integer> roll4d6DropLowest() 
    { 
     List<Integer> retList = new ArrayList<Integer>(); 

     // Add 4 numbers to the list to simulate 4 rolls. 
     for (int i=0; i<4; i++) 
     { 
      retList.add(rollSingleDie()); 
     } 

     // Remove the lowest roll of the 4. 
     retList.remove(Collections.min(retList)); 

     return retList; 
    } 

    public List<List<Integer>> rollSets(int numSets) 
    { 
     List<List<Integer>> results = new List<List<Integer>>(); 
     for (int i=0; i<numSets; i++) 
     { 
      results.add(roll4d6DropLowest()); 
     } 
     return results; 
    } 
} 

Et dans votre principale méthode:

public static void main(String args[]) 
{ 
    /*** Rolling the initial sets ***/ 
    int numSets = 10; // Ten is a placeholder. 
         // This is where you get input from user. 

    DiceRoller roller = new DiceRoller(); 
    List<List<Integer>> diceSets = roller.rollSets(numSets); 

    for (List<Integer> diceRolls : diceSets) 
    { 
     Integer total = sum(diceRolls); 
     Integer lowest = Collections.min(diceRolls); 
     System.out.println("Total is : " + total + " and lowest is : " + lowest); 
    } 

    /*** Forcing user to reroll lowest of one set ***/ 
    int setToRerollIndex = 1; // Placeholder value. 
    // Replace with input from user on which set to reroll. 
    // Remember to adjust user input - they will probably use a number between 1 
    // and the number of sets, but the List needs an index between 0 and the number of 
    // sets - 1. 
    List<Integer> setToReroll = diceSets.get(setToRerollIndex); 
    int indexOfLowest = setToReroll.indexOf(Collections.min(setToReroll)); 
    setToReroll.set(indexOfLowest, roller.rollSingleDie()); 

    // Selected set has now rerolled the lowest value. 
} 

public static int sum(List<Integer> list) 
{ 
    int sum= 0; 
    for (int number : list) 
     sum = sum + number; 
    return sum; 
} 
+0

Monsieur, vous êtes un gentleman et un érudit. – Polansi

+0

Content de pouvoir aider. N'oubliez pas d'upvote et/ou accepter n'importe quelle réponse a résolu votre problème. –

+0

Vous avez mal compris ma question dans le post précédent, mais je suppose que je vais faire comme vous le demandez. Ce que je demande est A) Comment puis-je forcer l'utilisateur à relancer le plus bas de leurs trois nombres les plus élevés dans l'ensemble de leur choix. Exemple: L'utilisateur obtient 6, 5, 5, 3. Les trois sont complètement ignorés et un 5 est imprimé comme le plus bas des trois plus hauts. Supposons maintenant qu'il y ait 4 autres séries de jets de dés, cet ensemble étant le numéro 1. Je veux que l'utilisateur puisse taper 1 et que ce nombre bas (5) soit relancé à un nombre différent. Cela a-t-il du sens? – Polansi