Как использовать оператор if, чтобы узнать, выиграл ли игрок или компьютер? - PullRequest
1 голос
/ 23 марта 2019

Я только начал изучать Java, поэтому я, возможно, даже не на правильном пути, но у меня есть задание, которое просит меня создать игру 21. Способ работы игры заключается в том, что игрок и компьютер по очереди вводят либо 1, 2 или 3. Игрок, который вводит число, которое соответствует или превышает 21, проигрывает.Мне кажется, что проблема в том, что я не могу заставить программу выйти из цикла при вводе последнего номера, и он будет отображать, что игрок проигрывает каждый раз, выигрывает или проигрывает.

Я пыталсяиспользование другого оператора if после цикла do-while для отображения «You Win!»или "Вы потеряли".Однако я не могу понять, какие параметры мне следует использовать в операторе if, чтобы решить, кто победил.Я также пытался настроить игру, указав в качестве четных чисел игрока, а в качестве нечетных чисел - компьютера, но я не смог добавить числа к промежуточной сумме, чтобы завершить цикл.

  int numLoops = 0;
  int firstCheck;
  int points;
  Scanner input = new Scanner(System.in);

  do
  {
     System.out.print("\nEnter a 1, 2, or 3 >> ");
     points = input.nextInt();

     int random = (int )(Math.random() *  3 + 1);
     numLoops = points + numLoops + random;

     if(numLoops < 21)
     {
        System.out.println("The computer entered a " + random);         
        System.out.println("The new total is " + numLoops);
     }
     else
     {
        //This is what always prints.
        System.out.println("You lost! The computer is the victor.");
     }
  }while(numLoops < 21);
  //this is what I am having most of my trouble with.
  System.out.println("You Win!");

Я ожидаючто цикл закроется после того, как общее число достигнет 21, и выведет оператор, который зависит от того, кто выиграл.Тем не менее, программа всегда выводит, что проигрыватель проиграл.

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

После того, как пользователь введет число, вы должны немедленно проверить, не набрали ли они 21 (а также вывести итоговое значение в этот момент). Если 21 не был сбит, то компьютер должен угадать, а затем вы проверите еще раз, чтобы увидеть, если 21 был сбит. Таким образом, у вас будет два оператора if (по одному после каждого предположения; пользователь / компьютер). В блоке else после того, как пользователь угадал, находится компьютер. Ваш оператор if проверит на> = 21, указывая на потери для пользователя или компьютера в зависимости от ситуации. Вам не нужно объявлять победителя вне цикла, поскольку это можно сделать внутри цикла ...

Например:

    int total = 0;
    do
    {
        System.out.print("\nEnter a 1, 2, or 3 >> ");
        points = input.nextInt();
        total = total + points;
        System.out.println("The new total is " + total);

        if (total >=21)
        {
            System.out.println("You lost! The computer is the victor.");
        }
        else
        {
            int random = (int )(Math.random() *  3 + 1);
            total = total + random;
            System.out.println("The computer entered a " + random);         
            System.out.println("The new total is " + total);

            if(total >= 21)
            {
                System.out.println("You Win!");
            }
        }
    }while(total < 21);
0 голосов
/ 23 марта 2019

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

/*
 * Which players turn is it?
 * (true for human player, false for computer)
 */ 
boolean isHumanPlayersTurn = true;
int totalPoints = 0;

Scanner input = new Scanner(System.in);

// the game ending condition
while (totalPoints < 21) {

    // take an action, depending on the players turn
    if (isHumanPlayersTurn) {
        System.out.print("\nEnter a 1, 2, or 3 >> ");
        totalPoints += input.nextInt();
    } else {
        int random = (int) (Math.random() * 3 + 1);
        System.out.println("The computer takes " + random);
        totalPoints += random;
    }

    System.out.println("Total amount is " + totalPoints);

    /*
     * Important part: After each players move, change the players turn, but do NOT
     * do this if the game already ended, since then the other player would have won.
     */
    if (totalPoints < 21) {
        isHumanPlayersTurn = !isHumanPlayersTurn;
    }
}

// now, the player to move is the one who loses
if (isHumanPlayersTurn) {
    System.out.println("You lost! The computer is the victor.");
} else {
    System.out.println("You Win!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...