2017-08-15 3 views
0

私は配列が5つの乱数で満たされ、プレイヤーが特定のダイスを再びロールすることを選ぶことができる単純なヤッツェゲームを作成しようとしています。しかし、配列の特定の数字を新しい乱数で置き換えて返す方法を記述する方法を理解することはできません。どのようにこれにアプローチするための提案?yertzeeゲームのリールダイス

あなたは機能を作ることができ、このよう
import java.util.Arrays; 
import java.util.Random; 
import java.util.Scanner; 

public class YatzyGame { 

    private final Integer NBROFDICE = 5; 
    private final Integer DICEMAXVALUE = 6; 
    Random rnd = new Random(); 
    Scanner keyboard = new Scanner(System.in); 

    public void startGame() { 
     int[] dice = new int[NBROFDICE]; 
     rollDice(dice); 
     printDice(dice); 

     System.out.println("Do you want to reroll any dices? " + "Y/N"); 
     String answer = keyboard.nextLine(); 
     if (answer.equalsIgnoreCase("y")) { 
      rerollDice(dice); 

     } else if (answer.equalsIgnoreCase("n")) { 
      calculateSum(dice); 

     } else { 
      System.out.println("Wrong command!"); 
     } 

    } 

    public int[] rollDice(int[] dice) { 
     for (int i = 0; i < dice.length; i++) { 
      dice[i] = rnd.nextInt(DICEMAXVALUE) + 1; 
     } 
     return dice; 
    } 

    public int[] rerollDice(int[] dice) { 
     System.out.println("What dices do you want to reroll? Dices index are 0-4"); 
     int diceToReroll = keyboard.nextInt(); 

     // Replace the numbers at the index the user specifies with new random numbers and return the array. 

    } 

    public void printDice(int[] dices) { 

     System.out.println("Your dices show: " + Arrays.toString(dices)); 
    } 

    public void calculateSum(int[] dices) { 
     int sum = 0; 
     for (int i : dices) { 
      sum += i; 
     } 
     if (sum == 30) { 
      System.out.println("YAHTZEE! Your total score is 50! Congratulations!"); 
     } else 
      System.out.println("Your total score is: " + sum); 
    } 

    public static void main(String[] args) { 
     new YatzyGame().startGame(); 
    } 

} 
+0

文字列内の文字をループします。数字である各文字について、その整数値(0〜4)を見つけて、そのダイをリロールします。 – Thomas

+0

あなたは 'rollDice'メソッドをもう少し柔軟にすることができ、1つのダイスだけをロールさせることができます。次に、rollAllDices(int [] dices)から呼び出すことで全体のロールを作り、 'rerollDice(int index、int [] dices)'から1つのサイコロだけをロールすることができます。 –

答えて

0
public int[] rollDice(int[] dice) { 

      System.out.println("What dice do you want to reroll? Dices index are 0-4"); 
      int diceToRoll = keyboard.nextInt(); 
      dice[diceToRoll] = rnd.nextInt(DICEMAXVALUE) + 1; 
    } 

public int[] reroll(int amountOfRerolls, int[] dices){ 

    for(int i =0;i<dicesToReroll;i++){ 
     this.rollDice(dices); 
    } 


return dices; 
} 

これは、あなたがそれを必要な場所あなたのrollDice()メソッドを再利用することができますので、プログラムの開発、もう少しモーダルになります。また、必要に応じて再登録が許可されているインデックスを渡して、少し拡張することもできます。

編集:スタイル

+0

フィードバックをいただきありがとうございます。質問、私はこのプロジェクトのために別のDieクラスを作成するのに役立つでしょうか? – Andpej

+0

これはもちろん可能です! OOPの概念を学ぶことは良いことかもしれません。今のところdieはちょうどint型の値なので、ここでは必要ないとは言えません。これを行う理由の1つは、例えば、値をロールしたものよりも多くの情報をダイスに格納する場合です(例えば、 'boolean alreadyRolled;'など) edit:スペル –