下面是“Java实现打字游戏小程序”的完整攻略:
1. 确定需求
首先我们需要确定我们所要创建的打字游戏小程序的需求。在这个小程序中,我们需要有以下几个功能:
- 显示随机的英文单词
- 记录输入单词和正确单词的比较结果
- 统计用户的输入速度和正确率
- 结束游戏后可以重新开始游戏
2. 设计界面
接下来我们需要设计程序的界面,可以选择使用Swing或JavaFX等UI框架来实现。一个简单的UI设计可以包含以下几个界面元素:
- 单词显示区:用于显示需要输入的单词。
- 输入框:用于接收用户的输入。
- 成绩区:用于显示输入速度和正确率等成绩信息。
- 重新开始按钮:用于结束当前游戏并重新开始。
3. 编写程序
3.1 生成随机单词
我们可以使用Java中自带的Random类来生成随机单词。下面是一个示例代码:
import java.util.Random;
public class WordGenerator {
private String[] wordList = {"apple", "banana", "cherry", "pear", "orange", "grape", "watermelon"};
private Random random = new Random();
public String generateWord() {
return wordList[random.nextInt(wordList.length)];
}
}
在这个示例中,我们定义了一个字符串数组wordList,然后使用Random类的nextInt()方法随机生成一个数组下标,然后返回相应的单词。
3.2 输入检验
为了记录输入单词和正确单词的比较结果,我们需要先判断用户输入的单词是否与随机单词相同。下面是一个示例代码:
public static boolean checkWord(String input, String target) {
return input.equals(target);
}
在这个示例中,我们定义了一个checkWord()方法,用于比较输入单词和目标单词是否相同。如果相同,返回true;不相同,返回false。
3.3 成绩计算
在程序的成绩区中,我们需要计算用户的输入速度和正确率。下面是一个示例代码:
public class Game {
private long startTime;
private int correctCount;
private int inputCount;
public void start() {
startTime = System.currentTimeMillis();
}
public void end() {
long timeElapsed = System.currentTimeMillis() - startTime;
double accuracy = (double) correctCount / inputCount;
double speed = (double) inputCount / timeElapsed * 1000 * 60;
System.out.println(String.format("打字速度:%.2f字/分钟,正确率:%.2f%%", speed, accuracy * 100));
}
public void updateScore(String input, String target) {
inputCount++;
if (checkWord(input, target)) {
correctCount++;
}
}
}
在这个示例中,我们定义了一个Game类,用于记录游戏成绩。start()方法用于开始记录时间,end()方法用于计算游戏时长、正确率和打字速度。updateScore()方法用于更新游戏成绩信息。
3.4 完整代码
下面是一个完整的Java实现打字游戏小程序的示例代码:
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TypingGame extends JFrame implements ActionListener {
private static final int WIDTH = 600;
private static final int HEIGHT = 400;
private JTextField inputField;
private JLabel wordLabel;
private JLabel scoreLabel;
private JButton startButton;
private JButton restartButton;
private Game game = new Game();
private WordGenerator generator = new WordGenerator();
public TypingGame() {
setSize(WIDTH, HEIGHT);
setTitle("打字游戏");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel topPanel = new JPanel();
wordLabel = new JLabel("单词显示区");
wordLabel.setFont(new Font("微软雅黑", Font.PLAIN, 32));
topPanel.add(wordLabel);
add(topPanel, BorderLayout.CENTER);
JPanel bottomPanel = new JPanel();
scoreLabel = new JLabel("0字/分钟,0%正确率");
bottomPanel.add(scoreLabel);
inputField = new JTextField(20);
inputField.addActionListener(this);
bottomPanel.add(inputField);
startButton = new JButton("开始游戏");
startButton.addActionListener(this);
bottomPanel.add(startButton);
restartButton = new JButton("重新开始");
restartButton.addActionListener(this);
bottomPanel.add(restartButton);
add(bottomPanel, BorderLayout.SOUTH);
}
private void updateScoreLabel() {
double accuracy = game.getAccuracy() * 100;
double speed = game.getSpeed();
scoreLabel.setText(String.format("%.0f字/分钟,%.0f%%正确率", speed, accuracy));
}
private void startGame() {
game.start();
restartButton.setEnabled(true);
String target = generator.generateWord();
wordLabel.setText(target);
inputField.setText("");
inputField.setEnabled(true);
startButton.setEnabled(false);
}
private void endGame() {
game.end();
inputField.setEnabled(false);
startButton.setEnabled(true);
restartButton.setEnabled(true);
}
private void restartGame() {
game.reset();
updateScoreLabel();
startGame();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == startButton) {
startGame();
} else if (e.getSource() == restartButton) {
restartGame();
} else if (e.getSource() == inputField) {
String input = inputField.getText();
String target = wordLabel.getText();
game.updateScore(input, target);
String newTarget = generator.generateWord();
wordLabel.setText(newTarget);
inputField.setText("");
updateScoreLabel();
}
}
public static void main(String[] args) {
TypingGame gameFrame = new TypingGame();
gameFrame.setVisible(true);
}
}
class WordGenerator {
private String[] wordList = {"apple", "banana", "cherry", "pear", "orange", "grape", "watermelon"};
private Random random = new Random();
public String generateWord() {
return wordList[random.nextInt(wordList.length)];
}
}
class Game {
private long startTime;
private int correctCount;
private int inputCount;
public void start() {
startTime = System.currentTimeMillis();
}
public void end() {
long timeElapsed = System.currentTimeMillis() - startTime;
double accuracy = (double) correctCount / inputCount;
double speed = (double) inputCount / timeElapsed * 1000 * 60;
System.out.println(String.format("打字速度:%.2f字/分钟,正确率:%.2f%%", speed, accuracy * 100));
}
public void reset() {
startTime = 0;
correctCount = 0;
inputCount = 0;
}
public void updateScore(String input, String target) {
inputCount++;
if (checkWord(input, target)) {
correctCount++;
}
}
public double getSpeed() {
if (startTime == 0) {
return 0;
}
long timeElapsed = System.currentTimeMillis() - startTime;
return (double) inputCount / timeElapsed * 1000 * 60;
}
public double getAccuracy() {
if (inputCount == 0) {
return 0;
}
return (double) correctCount / inputCount;
}
public static boolean checkWord(String input, String target) {
return input.equals(target);
}
}
4. 示例说明
下面是两个Java实现打字游戏小程序的案例:
示例一:
用户在输入框中输入单词,程序会将输入单词与随机生成的单词比较,如果相同则更新游戏成绩信息,并生成新的随机单词。同时会在程序运行窗口中显示当前输入速度和正确率等游戏成绩。
示例二:
程序界面中包含一个“开始游戏”按钮、一个“重新开始”按钮、一个单词显示label、一个输入框和一个成绩label。当用户点击“开始游戏”按钮后,程序会随机生成一个单词并显示在单词label中,同时启用输入框,将“重新开始”按钮禁用,开始计时游戏时长。当用户输入单词后,在程序窗口中显示输入速度和正确率等成绩信息。当游戏结束时,禁用输入框,将“开始游戏”按钮启用,将“重新开始”按钮启用,显示游戏成绩信息。如果用户点击“重新开始”按钮,则重新开始游戏。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现打字游戏小程序 - Python技术站