Как заставить счетчик сохраняться в Java?

Я делаю игру в кости, которая набирает очки на основе броска 7 или 11(пара игральных костей). Игра отслеживает ставки и счет. Текущий счет должен быть добавлен к 3-кратной сумме ставки, если условие выполнено. Однако оценка только изменяет в первом случае условие, которое выполняется, а затем остается неизменным при любых других попытках броска. Я пытался настроить мои геттеры и сеттеры как статичные, но это не сработало. Что я могу сделать, чтобы мой счетчик работал нормально?

Программа:

    public Game() {

            final Dice throwDice = new Dice();

            //Roll Dice
            rollDice.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {

                    throwDice.PairOfDice();
                    diceResult.setText("You rolled: " + throwDice.getDie1() +
                                                " + " + throwDice.getDie2() +
                                                " = " + throwDice.getTotal());
                    currentScore.setText("Score: $" + throwDice.getScore());
                    if(throwDice.getTotal() == 7 || throwDice.getTotal() == 11) {
                        throwDice.setScore(Integer.parseInt(input.getText()) * 3);
                        currentScore.setText("Score: $" + throwDice.getScore());
                    } 
                }
            });

3 ответа

Решение

В своем вопросе вы говорите:

Текущий счет должен быть добавлен в 3 раза больше суммы ставки

Вы не добавляете к текущему счету. Вы устанавливаете счет только в 3 раза больше ставки. Таким образом, значение не изменится (если, конечно, вы не измените сумму ставки).

 throwDice.setScore(Integer.parseInt(input.getText()) * 3)

Вместо этого вам нужно добавить его к текущему счету:

 throwDice.setScore(throwDice.getScore() + Integer.parseInt(input.getText()) * 3)

Декларация вашей кости

Dice throwDice = new Dice();

в actionPerformed() Это означает, что он создается каждый раз, когда вы вызываете эту функцию.

Переместить декларацию в Gameт.е. сделайте это атрибутом игры, и все будет в порядке.

Вы можете смело делать Dice::score, Dice::getScore() а также Dice:setScore(int) нестатическая.

ОБНОВЛЕНИЕ: Учитывая, что проблема все еще существует, возможно, попробуйте заменить:

 throwDice.setScore(Integer.parseInt(input.getText()) * 3);

с:

 throwDice.setScore(throwDice.getScore() + (3 + throwDice.getBet()));

Вы должны двигаться

Dice throwdice = new Dice`

код, чтобы он не вызывался каждый раз при входе в действие

Другие вопросы по тегам