Java以不同的方法获取不同的随机数

时间:2013-06-26 12:45:23

标签: java graphics random actionlistener

所以我正在研究java中的这个yahtzee游戏,我想用这些骰子来显示数字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方法和我的paint组件中获得了不同的数字。

这是我的动作听众:

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");
            }

        }
    });

我的paintComponent:

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 );
    }


}

我基本上希望在所有方法的骰子上都有相同的数字,直到我再次按下滚动来更新它们。

2 个答案:

答案 0 :(得分:0)

g.drawString( roll() , getWidth() / 2 - 25 , getHeight() / 2 - 25 );

此方法中的调用是一个额外的调用,您重新计算数字,因为再次调用Math.random(),所以如果要重新绘制jPanel,也只需调用该方法

答案 1 :(得分:0)

问题在于,每次调用roll()时,都会生成新的随机数,因此它会以不同的方式返回。您需要在第一次调用roll()时将结果存储在某个位置,并且只在您希望更改骰子时再次调用它。

尝试以下更改。

在你的班级声明中:

private String rollResult = "";

在actionPerformed(...)中:

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 );
    }