0

所以我正在用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 方法和我的绘画组件中得到了不同的数字。

这是我的动作监听器:

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


}

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

4

2 回答 2

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

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

于 2013-06-26T13:01:45.907 回答
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 );
    }
于 2013-06-26T13:02:49.860 回答