Вот что я пытаюсь сделать. В программе должен быть цикл, который повторяется 10 раз. Каждый раз, когда цикл повторяется, он должен бросать оба кубика. Выигрывает кубик с наибольшим значением. В случае ничьей победителя при данном конкретном броске кубиков нет.

Во время итерации цикла программа должна:

  1. Спросите пользователя, готовы ли они к запуску.
  2. Отображение результата броска. Число бросков пользователя, броска компьютера и результат (кто выиграл, проиграл или ничья).
  3. Подсчитайте, сколько раз выигрывал компьютер.
  4. Подсчитайте, сколько раз выигрывал пользователь

Код объекта Die:

import java.util.Random;

/**
   The Die class simulates a six-sided die.
*/

public class Die
{
   private int sides;   // Number of sides
   private int value;   // The die's value

  /**
     The constructor performs an initial
     roll of the die.
     @param numSides The number of sides for this die.
  */

  public Die(int numSides)
  {
     sides = numSides;
     roll();
  }

  /**
     The roll method simulates the rolling of
     the die.
  */

  public void roll()
  {
     // Create a Random object.
     Random rand = new Random();

     // Get a random value for the die.
     value = rand.nextInt(sides) + 1;
  }

  /**
     getSides method
     @return The number of sides for this die.
  */

  public int getSides()
  {
     return sides;
  }

  /**
     getValue method
     @return The value of the die.
  */

  public int getValue()
  {
     return value;
  }
}

Это код, который использует объектный код для кубиков и их движения.

public class MitchellLab06
 {
    public static void main(String[] args)
    {
        final int DIE1_SIDES = 6; //Number of sides for die #1
        final int DIE2_SIDES = 6; //Number of sides for die #1
        final int MAX_ROLLS = 10; //Number of ties to roll

        // Create two instances of the Die class.
        Die die1 = new Die(DIE1_SIDES);
        Die die2 = new Die(DIE2_SIDES);

        //Display the initial value of the dice.
        System.out.println("This program simulates the rolling of a " + 
        DIE1_SIDES + " sided die and another " +
        DIE2_SIDES + " sided die.");

        System.out.println("The initial value of the dice:");
        System.out.println(die1.getValue() + " " + die2.getValue());

        //Roll the dice 10 times.
        System.out.println("Rolling the dice " + MAX_ROLLS + " times");

        for(int i = 0; i < MAX_ROLLS; i++)
        {
            //Roll the dice.
            die1.roll();
            die2.roll();

            //Display the value of the dice.
            System.out.println(die1.getValue() + " " + die2.getValue());
        }
    }
}

Мне нужна помощь в отслеживании того, какой кубик выиграет из 10 бросков, и в определении, выиграет ли пользователь, выиграет компьютер или ничья.

2
Cornelius Mitchell 14 Сен 2018 в 21:01

2 ответа

Лучший ответ

Простое, но элегантное решение, в котором используется простой цикл while и пара переменных для хранения баллов пользователя, баллов компа и общего количества побед для каждого из них.

int userWin = 0, compWin = 0;
int MAX_ATTEMPTS = 10;

while(MAX_ATTEMPTS > 0) {

    int userScore = 0, compScore = 0;
    //Roll the dice for user
    die1.roll();
    die2.roll();
    userScore = die1.getValue() + die2.getValue();

    //Roll the dice for comp
    die1.roll();
    die2.roll();
    compScore = die1.getValue() + die2.getValue();       

    // determine winner
    if (userScore > compScore) {
        System.out.println("User wins! \nUser score = " + userScore + ", Comp score = " + compScore);            
        userWin++;
    }
    else if (userScore < compScore) {
        System.out.println("Comp wins! \nUser score = " + userScore + ", Comp score = " + compScore);
        compWin++;
    } else {
        System.out.println("Draw!\nUser score = " + userScore + ", Comp score = " + compScore);
    }

    MAX_ATTEMPTS --;

}
System.out.println("User won = " + userWin + " times! ");  
System.out.println("Comp won = " + compWin + " times! ");
0
Nicholas K 14 Сен 2018 в 18:34

Одним из примеров решения является инициализация двух массивов: один для компьютера, другой для пользователя. Каждый раз, когда вы бросаете кубик, вы увеличиваете массив на позицию, бросая номер хода с кубиками.

int [] computer = new int[10];
int [] user = new int [10]; 

for (int i=0;i<10; ++i) {
   int diceUser = throwDice();
   int diceComputer = throwDice();
   if (diceUser> diceComputer) {
      user[i] = diceUser;
   }
   else if (diceUSer<diceComputer) {
      computer[i]= diceComputer;
   }
   else {
      computer[i] = diceComputer;
      user[i] = diceUser;
   }     
}

Каждый раз, когда компьютер или пользователь проигрывают, в массиве будет 0. При отрисовке оба массива будут содержать одно и то же значение с одним и тем же индексом.

Индекс массива следует за поворотом.

2
Alexandar Petrov 14 Сен 2018 в 18:09