许多游戏都可以在滚动两枚骰子的基础上进行。定义一个Die类表示一枚有n个面的骰子。n的默认值是6.该类能滚动骰子,并测得其像上面的值。使用随机数来模拟骰子的滚动。并可依用户要求以图形界面来演示骰子的面。
代码实现:
核心:随机数的生成,使用了java.util.Math类的random,这个方法返回一个0-1之间的浮点数(包含0,不包含1),我们将其与10相乘得到一个0-10(不含10)之间的整数,然后让该整数与骰子的面数取余数后加1,得到的就是一个1-6(骰子面数)的数字
package com.crazycoder2010.datastructure.ch01;
public class Die {
private int faces;// 总共的面数
private int number;// 朝上的数字
public Die(int faces) {
super();
this.faces = faces;
}
public void die() {
this.number = (int) (Math.random() * 10)%faces+1;
}
public int getNumber() {
return number;
}
public int getFaces() {
return faces;
}
}
测试类:图形界面
package com.crazycoder2010.datastructure.ch01;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class DieTest extends JFrame {
private static final long serialVersionUID = 3757821367773739338L;
public DieTest(){
setTitle("掷骰子游戏");
setSize(800, 200);
setResizable(false);
this.getContentPane().setLayout(new FlowLayout());
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
final JLabel label = new JLabel();
this.getContentPane().add(label);
JButton throwButton = new JButton("掷骰子");
this.getContentPane().add(throwButton);
JLabel dieLabel = new JLabel("骰子A:");
final JLabel dieValue1 = new JLabel("");
JLabel dieLabe2 = new JLabel("骰子B:");
final JLabel dieValue2 = new JLabel("");
this.getContentPane().add(dieLabel);
this.getContentPane().add(dieValue1);
this.getContentPane().add(dieLabe2);
this.getContentPane().add(dieValue2);
throwButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Die die1 = new Die(6);
die1.die();
Die die2 = new Die(6);
die2.die();
dieValue1.setText(die1.getFaces()+"面,点数:"+die1.getNumber());
dieValue2.setText(die2.getFaces()+"面,点数:"+die2.getNumber());
}
});
}
public static void main(String[] args) {
new DieTest().setVisible(true);
}
}
运行结果截图: