0

だから私はJavaでこのヤッツィーゲームに取り組んでいて、これらのサイコロを使って1から6までの数字を表示したいと思っています。私の問題は、さまざまな方法でさまざまな「サイコロの数字」を取得することです。

私のランダムサイコロの方法:

public String roll(){
    int dice1 = (int )(Math.random() * 6 + 1),
            dice2 = (int )(Math.random() * 6 + 1),
            dice3 = (int )(Math.random() * 6 + 1),
            dice4 = (int )(Math.random() * 6 + 1),
            dice5 = (int )(Math.random() * 6 + 1);

    return dice1 +"   "+ dice2 +"   "+ dice3 +"   "+ dice4  +"   "+ dice5;
}

だから私はこの他のアクションリスナーメソッドを持っています。サイコロを振るためのボタンがあります。このメソッド内で、ボタンを押すとこれらの乱数が生成され、paintComponent メソッドで使用できるようにしたいと考えています。しかし、これを実行しようとすると、actionListener メソッドとペイント コンポーネントで異なる数値が得られます。

これが私のアクションリスナーです:

roll.addActionListener(
            new ActionListener(){
        public void actionPerformed(ActionEvent event){


            if(turn == true){

                roll();

                rolls++;
                start = false;
                updateUI();
                System.out.println( roll() );

            }
            if(rolls == 3){
                turn = false;
                System.out.println("Out of rolls");
            }

        }
    });

そして私のペイントコンポーネント:

public void paintComponent(java.awt.Graphics g){
    super.paintComponent(g);
    this.setBackground(Color.BLUE);



    g.setColor(Color.WHITE);
    g.fillRoundRect(getWidth() / 2 - 25, getHeight() / 2 - 35, 12, 12, 0, 0);   //Dice 1
    g.fillRoundRect(getWidth() / 2 - 10, getHeight() / 2 - 35, 12, 12, 0, 0);   //Dice 2
    g.fillRoundRect(getWidth() / 2 + 5, getHeight() / 2 - 35, 12, 12, 0, 0);    //Dice 3
    g.fillRoundRect(getWidth() / 2 + 20, getHeight() / 2 - 35, 12, 12, 0, 0);    //Dice 4
    g.fillRoundRect(getWidth() / 2 + 35, getHeight() / 2 - 35, 12, 12, 0, 0);    //Dice 5



    if(start == false){
        g.setColor(Color.BLACK);
        g.drawString( roll() , getWidth() / 2 - 25 , getHeight() / 2 - 25 );
    }


}

私は基本的に、ロールをもう一度押して更新するまで、すべての方法のサイコロに同じ数字を入れたいと思っています。

4

2 に答える 2

0

問題は、roll() を呼び出すたびに新しい乱数を生成しているため、返される値が異なることです。roll() を最初に呼び出したときに結果をどこかに保存し、サイコロを変更したい場合にのみ再度呼び出す必要があります。

次の変更を試してください。

あなたのクラス宣言で:

private String rollResult = "";

実行中(...):

public void actionPerformed(ActionEvent event){


        if(turn == true){

            rollResult = roll();

            rolls++;
            start = false;
            updateUI();
            System.out.println( rollResult );

        }

paintComponent(...) では:

if(start == false){
        g.setColor(Color.BLACK);
        g.drawString( rollResult , getWidth() / 2 - 25 , getHeight() / 2 - 25 );
    }
于 2013-06-26T13:02:49.860 に答える
0
g.drawString( roll() , getWidth() / 2 - 25 , getHeight() / 2 - 25 );

このメソッドの呼び出しは余分な呼び出しです。Math.random() が再度呼び出されるため、数値を再計算するため、jPanel を再描画する場合にもメソッドを呼び出すだけです。

于 2013-06-26T13:01:45.907 に答える