用Java设计一个拿火柴小游戏,要求:程序随机产生20~50根 火柴,由人与计算机轮流拿,每次拿的数量为1~3根,以不拿到最后一根为胜。(要求使用图形界面)
时间: 2024-02-24 20:57:00 浏览: 21
好的,下面是Java设计的拿火柴小游戏,使用了Java Swing库实现了图形界面。代码中有详细的注释,希望能够帮助你理解游戏的实现过程。
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MatchstickGame extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel panel;
private JLabel label;
private JTextField textField;
private JButton button;
private int matchsticks;
public MatchstickGame() {
super("拿火柴小游戏");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
label = new JLabel("火柴数量: " + matchsticks);
label.setHorizontalAlignment(JLabel.CENTER);
panel.add(label);
textField = new JTextField();
textField.setHorizontalAlignment(JTextField.CENTER);
textField.addActionListener(this);
panel.add(textField);
button = new JButton("拿火柴");
button.addActionListener(this);
getContentPane().add(panel, BorderLayout.CENTER);
getContentPane().add(button, BorderLayout.SOUTH);
matchsticks = (int) (Math.random() * 31) + 20; // 随机生成20到50根火柴
label.setText("火柴数量: " + matchsticks);
setVisible(true);
}
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source == button || source == textField) {
int num = Integer.parseInt(textField.getText());
if (num < 1 || num > 3) {
JOptionPane.showMessageDialog(this, "每次只能拿1到3根火柴!");
textField.setText("");
return;
}
matchsticks -= num;
label.setText("火柴数量: " + matchsticks);
if (matchsticks <= 0) {
JOptionPane.showMessageDialog(this, "恭喜你获胜!");
dispose();
} else {
int computerNum = (int) (Math.random() * 3) + 1;
matchsticks -= computerNum;
label.setText("火柴数量: " + matchsticks);
if (matchsticks <= 0) {
JOptionPane.showMessageDialog(this, "很遗憾你输了!");
dispose();
}
}
textField.setText("");
}
}
public static void main(String[] args) {
new MatchstickGame();
}
}
```
这个小游戏随机生成20到50根火柴,在游戏中,玩家与计算机轮流拿火柴,每次拿的数量为1到3根,当剩余的火柴数量为0时,游戏结束。玩家需要尽可能地保证自己不是最后一个拿火柴的人,以获得胜利。