Как заставить счетчик сохраняться в 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`
код, чтобы он не вызывался каждый раз при входе в действие