2015-11-12 1 views
1

Je fais un jeu de dés qui marque des points en roulant un 7 ou un 11 (paire de dés). Le jeu garde la trace des paris et du score. Le score actuel doit être ajouté à 3 fois le montant de la mise si la condition est remplie. Cependant, le score ne change que la première fois que la condition est remplie, puis reste la même après toutes les autres tentatives de jet. J'ai essayé de rendre mes getters et setters statiques mais ça n'a pas marché. Que puis-je faire pour que mon compteur fonctionne correctement?Comment faire pour qu'un compteur persiste en Java?

Programme:

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()); 
        } 
       } 
      }); 
+0

Où est entrée déclarée? –

Répondre

0

Dans votre question, vous dites:

Le score devrait être ajouté à 3 fois le montant du pari

Vous n'êtes pas ajouterez au score. Vous définissez uniquement le score à 3 fois le montant du pari à chaque fois. Donc, la valeur ne changera pas (à moins, bien sûr, que vous changiez le montant de la mise).

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

Au lieu de cela, vous devez ajouter au score:

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

merci. Tu avais raison à propos de ma logique. J'ai changé le code à ceci et cela a fonctionné: 'throwDice.setScore ((throwDice.getBet() * 3) + throwDice.getScore()); currentScore.setText ("Score: $" + throwDice.getScore()) ' – Almac

1

La déclaration de vos dés:

Dice throwDice = new Dice(); 

est en actionPerformed() ce qui signifie qu'il est créé à chaque fois que vous appelez cette fonction. Déplacez la déclaration dans Game, c.-à-d. en faire un attribut d'un jeu et vous devriez aller bien.

Vous pouvez sécuriser Dice::score, Dice::getScore() et Dice:setScore(int) de manière non statique.

MISE À JOUR: Étant donné qu'il est toujours un problème, peut-être essayer de remplacer:

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

avec:

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

Je l'ai déplacé sous "public class Game extends JFrame {', mais je reçois les mêmes résultats. Le compteur ne changera qu'une seule fois et restera le même. – Almac

+0

cela fonctionne presque. Il effectue le mauvais calcul. J'essaie de multiplier la mise actuelle par 3. Votre code multiplie tout mon score par 3. – Almac

+0

Oh, d'accord. Essayez: 'throwDice.setScore (throwDice.getScore() * Integer.parseInt (currentBet.getText()) * 3);' – dave

0

Vous devez déplacer

Dice throwdice = new Dice` 

le code afin qu'il n'est pas appelé à chaque fois qu'il entre dans l'action