Java блэк джек игра не работает.Нечто связанное с условиями - PullRequest
0 голосов
/ 25 сентября 2018

Привет, так что я пытаюсь сделать игру Блэк Джек, но она не работает.Я считаю, что логика верна, так что, возможно, это синтаксическая ошибка?Есть два игрока Алиса и Боб.Игроки играют до 17 лет. Есть 5 возможных результатов, которые выигрывает Алиса.Боб выигрывает.Алиса перебивает Боба.Боб перебивает Алису, побеждает.Никто не побеждает.

public class TweentyOne {

   public static void main(String[] args) {
       Player p1 = new Player("Bob");
       Player p2 = new Player("Alice");
       findWinner(p1, p2);
   }

   public static void findWinner(Player p1, Player p2){

       if(p1.showHand() > p2.showHand() && p1.showHand() <= 21){
           System.out.println(p1.getName() + " wins");
           System.out.println(p1.showHand());
           System.out.println(p2.showHand());
       }

       else if(p1.showHand() <= 21 && p2.showHand() > 21){
             System.out.println(p2.getName() + " busts. " + p1.getName() + " wins");
             System.out.println(p1.showHand());
           System.out.println(p2.showHand());
       }

       else if(p2.showHand() > p1.showHand() && p2.showHand() <= 21){
           System.out.println(p2.getName() + " wins");
           System.out.println(p1.showHand());
           System.out.println(p2.showHand());
       }

       else if(p2.showHand() <= 21 && p1.showHand() > 21){
           System.out.println(p1.getName() + " busts. " + p2.getName() + " wins");
           System.out.println(p1.showHand());
           System.out.println(p2.showHand());
       }

       else{
           System.out.println("No one wins");
           System.out.println(p1.showHand());
           System.out.println(p2.showHand());
       }
    }
}

class Player{

    private String name;
    private int hand;

    public Player(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public int showHand(){

        int someHand = 0;

        while(someHand < 17)
        {   
            hand = (int) (Math.random() * 13 + 1);
            someHand += hand;
        }

        return someHand;
    }
}

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

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Как уже говорилось, колл Player.showHand() генерирует новую руку.Либо вызывайте метод только один раз за раунд и сохраняйте его в переменной, либо лучше реализуйте showHand() таким образом, чтобы он только отображал ранее раздачную руку и не сдает новую.

Ваш вопрос, однако, упоминает Блэкджек, но механизм генерации новых рук не отражает это.Таким образом, чтобы сделать это более похожим на настоящий BlackJack - как насчет создания Deck объекта, который содержит Card объектов и имеет Card drawCard() метод, который вызывает Player.Player может иметь List карт, которые он вытянул.Случайно генерируемые номера, как при звонке showHand(), не отражают природу блэкджека.

0 голосов
/ 25 сентября 2018
if (p1.showHand() > p2.showHand() && p1.showHand() <= 21)

здесь p1.showHand() дает вам некоторую руку, когда вы выполните ее снова после &&, она вычислит какую-то новую, другую руку.

Сохраните обе руки в переменных в начале,затем замените вызовы методов в ваших ifs теми переменными, которые должны сделать трюк

...