Java编写代码编写GUI界面,模拟抢红包游戏,在界面输入红包大小和抢红包人姓名(用逗号隔开),输出系统当前时间以及每个人抢的红包大小,要求每个人抢的红包最少不能少于0.01元,精确到小数点后两位。
时间: 2024-04-02 18:33:36 浏览: 55
好的,我可以帮您解答这个问题。首先,您需要使用Java的GUI库来创建图形用户界面,比如Swing或JavaFX。以下是一个基本的Swing窗口示例:
```java
import javax.swing.*;
public class RedPacketGame extends JFrame {
public RedPacketGame() {
setTitle("抢红包游戏");
setSize(400, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new RedPacketGame();
}
}
```
接下来,您需要在窗口中添加组件来允许用户输入红包大小和抢红包人姓名。可以使用JLabel、JTextField和JButton等组件来实现这些功能。以下是一个基本的窗口布局示例:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RedPacketGame extends JFrame {
private JTextField amountField;
private JTextField nameField;
public RedPacketGame() {
setTitle("抢红包游戏");
setSize(400, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 创建标签和文本框
JLabel amountLabel = new JLabel("红包大小:");
amountField = new JTextField(10);
JLabel nameLabel = new JLabel("抢红包人姓名:");
nameField = new JTextField(10);
// 创建按钮
JButton playButton = new JButton("开始游戏");
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
playGame();
}
});
// 添加组件到窗口
JPanel panel = new JPanel(new GridLayout(3, 1));
panel.add(amountLabel);
panel.add(amountField);
panel.add(nameLabel);
panel.add(nameField);
panel.add(playButton);
add(panel, BorderLayout.CENTER);
setVisible(true);
}
private void playGame() {
// TODO: 实现游戏逻辑
}
public static void main(String[] args) {
new RedPacketGame();
}
}
```
最后,您需要在playGame()方法中实现游戏逻辑。您可以使用Java的日期和时间API来获取系统当前时间,并使用String.format()方法格式化输出每个人抢的红包大小。以下是一个游戏逻辑的示例:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RedPacketGame extends JFrame {
private JTextField amountField;
private JTextField nameField;
public RedPacketGame() {
setTitle("抢红包游戏");
setSize(400, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 创建标签和文本框
JLabel amountLabel = new JLabel("红包大小:");
amountField = new JTextField(10);
JLabel nameLabel = new JLabel("抢红包人姓名:");
nameField = new JTextField(10);
// 创建按钮
JButton playButton = new JButton("开始游戏");
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
playGame();
}
});
// 添加组件到窗口
JPanel panel = new JPanel(new GridLayout(3, 1));
panel.add(amountLabel);
panel.add(amountField);
panel.add(nameLabel);
panel.add(nameField);
panel.add(playButton);
add(panel, BorderLayout.CENTER);
setVisible(true);
}
private void playGame() {
// 获取红包大小和抢红包人姓名
BigDecimal amount = new BigDecimal(amountField.getText().trim());
String[] names = nameField.getText().split(",");
// 随机发红包
List<BigDecimal> redPackets = new ArrayList<>();
BigDecimal totalAmount = BigDecimal.ZERO;
Random random = new Random();
for (int i = 0; i < names.length; i++) {
BigDecimal redPacket;
if (i == names.length - 1) {
redPacket = amount.subtract(totalAmount);
} else {
redPacket = new BigDecimal(random.nextDouble()).multiply(amount).setScale(2, BigDecimal.ROUND_HALF_UP);
totalAmount = totalAmount.add(redPacket);
}
redPackets.add(redPacket);
}
// 输出抢红包情况
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
StringBuilder sb = new StringBuilder();
sb.append("系统当前时间:").append(LocalDateTime.now().format(formatter)).append("\n");
for (int i = 0; i < names.length; i++) {
BigDecimal redPacket = redPackets.get(i);
sb.append(names[i]).append(" 抢到红包:").append(redPacket).append(" 元\n");
}
JOptionPane.showMessageDialog(this, sb.toString(), "抢红包结果", JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String[] args) {
new RedPacketGame();
}
}
```
这个示例代码可以实现一个简单的抢红包游戏,您可以根据自己的需求进行修改和扩展。
阅读全文