猜字游戏--java

1.设计方案

    为了实现一个猜数字的小游戏,需要生成一个随机数字作为答案,然后玩家猜出一个数字,根据此数字和答案的比较给出提示以确保游戏进行下去直到完毕。使用图形化界面来展示小游戏。

     

2.实现过程

(1)GUI

   定义变量

 private int randomNumber;
    private int attempts;
    private long startTime;

    private JLabel promptLabel1,promptLabel2;
    private JTextField guessTextField;

    private JButton guessButton;
    private JTextArea resultTextArea;

设置变量信息

        setTitle("猜数游戏");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(350, 250);
        setLayout(new FlowLayout());

        promptLabel1 = new JLabel("这个数在1-100之间:");

        
        guessTextField = new JTextField(10);
        
        guessButton = new JButton("就它了");

        resultTextArea = new JTextArea(8, 25);

        resultTextArea.setEditable(false);

添加到窗口

        add(promptLabel1);
        add(guessTextField);
        add(guessButton);
        add(new JScrollPane(resultTextArea)); //滑动滚轮
        setVisible(true);

(2)代码核心(猜字按钮)

为按钮设置一个动态监听器,实现猜字的核心部分

guessButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int guess = Integer.parseInt(guessTextField.getText());
                attempts++;

                if (guess == randomNumber) {
                    long endTime = System.currentTimeMillis();
                    double elapsedTime = (endTime - startTime) / 1000.0;
                    resultTextArea.append("恭喜你,猜对了!\n");
                    resultTextArea.append(String.format("用时 %.2f 秒,你猜了 %d 次。\n", elapsedTime, attempts));
                    saveResultToFile(elapsedTime, attempts);
                    guessButton.setEnabled(false);



                }


                else if (guess < randomNumber) {
                    resultTextArea.append("猜小了,请继续猜。\n");
                }


                else {
                    resultTextArea.append("猜大了,请继续猜。\n");
                }

                guessTextField.setText("");
            }
        });

(3)生成随机数

private int getRandomNumber() {
        return (int) (Math.random() * 100) + 1;
    }

(4)把成绩写入文件中

 private  void saveResultToFile(double elapsedTime, int attempts) {
        String fileName = "game_results.txt"; // 文件名
        String result = String.format("用时: %.2f seconds, 次数: %d%n", elapsedTime, attempts); // 要保存的结果

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true))) {
            writer.write(result);
            System.out.println("结果保存在文件: " + fileName + "中");
        } catch (IOException e) {
            System.out.println("保存失败: " + e.getMessage());
        }
    }

(5)运行结果

 

 3.期望

实现一个排行榜,需要玩家输入名字,然后把成绩由高到低排列,在GUI中可查询排行榜。

完成情况

private void startGame(String playerName) {
       

        // 将玩家成绩添加到排行榜中
        PlayerResult result = new PlayerResult(playerName, elapsedTime, attempts);
        leaderboard.add(result);
        Collections.sort(leaderboard); // 按完成时间排序,由小到大
    }

    private void showLeaderboard() {
        // 显示排行榜
        resultTextArea.setText(""); // 清空文本区域

        for (int i = 0; i < leaderboard.size(); i++) {
            PlayerResult result = leaderboard.get(i);
            String leaderboardEntry = "Rank " + (i + 1) + ": " + result.getPlayerName() + " - Time: " + result.getTime() + " seconds, Attempts: " + result.getAttempts() + "\n";
            resultTextArea.append(leaderboardEntry);
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值