java打字游戏代码swing
时间: 2025-05-31 11:51:51 浏览: 14
### 使用 Java 和 Swing 开发的打字游戏示例代码
以下是基于 Java 和 Swing 库开发的一个简单打字游戏的完整代码示例。该游戏的核心功能包括随机字符生成、用户输入检测以及分数统计。
#### 游戏逻辑说明
1. 随机生成一个字母并显示在界面上。
2. 用户通过键盘输入该字母,如果匹配成功,则增加得分。
3. 如果输入错误或者超时未输入,则重新生成一个新的字母。
4. 得分会在屏幕上实时更新。
```java
package cn.edu.jnu.game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class TypingGame extends JFrame implements KeyListener {
private static final int GAME_TIME = 60; // 游戏时间(秒)
private JLabel labelChar; // 显示当前目标字符
private JLabel labelScore; // 显示玩家得分
private Timer timer; // 定时器用于倒计时和刷新屏幕
private Random random; // 随机数生成器
private String currentChar; // 当前目标字符
private int score; // 玩家得分
private int remainingTime; // 剩余时间
public TypingGame() {
setTitle("Typing Game");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(3, 1));
labelChar = new JLabel("", SwingConstants.CENTER);
labelChar.setFont(new Font("Arial", Font.BOLD, 72));
add(labelChar);
labelScore = new JLabel("Score: 0", SwingConstants.CENTER);
labelScore.setFont(new Font("Arial", Font.PLAIN, 24));
add(labelScore);
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
add(panel);
random = new Random();
resetGame();
this.addKeyListener(this); // 添加键盘监听器
setVisible(true);
}
private void resetGame() {
score = 0;
remainingTime = GAME_TIME;
updateLabels();
generateRandomCharacter();
startTimer();
}
private void startTimer() {
timer = new Timer(1000, e -> {
remainingTime--;
if (remainingTime <= 0) {
((javax.swing.Timer)e.getSource()).stop();
JOptionPane.showMessageDialog(this, "Game Over! Final Score: " + score);
resetGame();
}
});
timer.start();
}
private void generateRandomCharacter() {
char c = (char)(random.nextInt(26) + 'A');
currentChar = Character.toString(c);
labelChar.setText(currentChar);
}
private void checkInput(String input) {
if (input.equals(currentChar)) {
score++;
updateLabels();
generateRandomCharacter();
}
}
private void updateLabels() {
labelScore.setText("Score: " + score);
}
@Override
public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {
String input = Character.toString(e.getKeyChar());
checkInput(input.toUpperCase()); // 转换为大写以便统一比较
}
@Override
public void keyTyped(KeyEvent e) {}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new TypingGame());
}
}
```
---
#### 功能解析
1. **界面布局**
- 使用 `GridLayout` 将窗口分为三部分:顶部为目标字符区域,中间为得分显示区,底部为空白面板[^1]。
2. **随机字符生成**
- 利用 `Random` 类生成 A-Z 的随机字符,并将其设置到标签中显示给用户[^1]。
3. **键盘事件监听**
- 实现 `KeyListener` 接口捕获用户的按键操作,并将输入与目标字符进行对比[^2]。
4. **定时器控制**
- 使用 `javax.swing.Timer` 控制游戏的时间流逝,在规定时间内完成尽可能多的操作。
5. **游戏结束处理**
- 当剩余时间为零时停止计时器,并弹出对话框告知最终得分,随后重置游戏状态[^1]。
---
#### 注意事项
- 上述代码中的 `keyPressed`, `keyReleased`, 和 `keyTyped` 方法分别对应不同的键入阶段,这里仅需关注释放后的实际输入值即可[^2]。
- 若希望扩展此程序可以加入更多复杂度比如不同难度级别或是多种类型的题目等[^3]。
阅读全文
相关推荐















