想挑战你的智商?快来试试Java版灯谜猜猜乐!

这篇具有很好参考价值的文章主要介绍了想挑战你的智商?快来试试Java版灯谜猜猜乐!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  中秋佳节,是我国传统的重大节日之一。全国各地为了增强过节的气氛,都有许多传统的中秋活动,比如吃月饼、赏月、猜灯谜等等。其中,猜灯谜就是一项极具娱乐性的活动,它不仅可以增进亲友之间的感情,更重要的是,还可以挑战智商,让你的小脑袋飞速运转。

  为了让大家更畅快愉快的重温这种乐趣,快马加鞭,赶在中秋节前,bug菌偷偷地把它制作出来了,接下来,快带上家人们一块来挑战,让我们拭目以待,看看最终第一花落谁家!到底谁能答出我所设置的所有谜面!

开搞开搞!!

  玩过Java的同学都清楚,想靠纯Java实现一个可炫的可视化图形,对比前端语言来说那简直一个天一个地,但咱天生就不是会被困难折服的人,今个儿我就只用它来做一个可操作可视化的游戏。

准备工作

  在开始制作游戏之前,我们需要准备一些材料:

  • 谜语及其答案
  • 提示
  • GUI界面

  这里我们已经准备好了10个中秋节相关的谜面和谜底,同时也有对应的提示。我们将在GUI界面中显示谜语和提示,并且让玩家输入答案并确认是否正确。在确认答案正确后,进入下一道谜语。

游戏的制作思路

游戏界面设计

  用Java设计的游戏界面简洁明了,同时需要显示谜面、提示、输入框、按钮等组件。其中,输入框和按钮应该在同一个面板上,方便操作。

想挑战你的智商?快来试试Java版灯谜猜猜乐!,《程序人生》,Java,Java小游戏,猜灯谜小游戏,游戏,原力计划

游戏逻辑设计

游戏逻辑应该包括以下几个部分:

  • 进入游戏过渡
  • 获取谜语、提示、答案等信息
  • 显示谜语和提示信息
  • 等待玩家输入答案
  • 判断答案是否正确
  • 统计得分和时间
  • 进入下一题
游戏功能设计

游戏功能应该包括以下几个部分:

  • 显示当前题目的谜面和提示
  • 检查玩家输入的答案是否正确
  • 显示得分和时间信息
  • 进入谜底冲刺,可以随时重新开始游戏
  • 提示挑战成功

游戏的制作步骤

1. 创建一个 Java 项目

首先我们要先创建一个Java项目。

2. 导入需要的 jar 包
  • swing.jar
  • awt.jar
3. 创建游戏窗口

  其次我们需要创建一个 JFrame 类,并设置窗口的标题、大小、默认关闭操作和窗口位置等基本属性。然后,创建各种组件,如标签、文本框、按钮等,并将它们添加到主面板中。最后,显示第一道谜语。

//设置游戏名
setTitle("灯谜猜猜乐");
//设置游戏界面大小
setSize(900, 300);
//设置窗口关闭时的默认操作
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//让窗口居中显示
setLocationRelativeTo(null);

//创建输入框和按钮的面板
JPanel answerPanel = new JPanel(new GridLayout(1, 1));
4. 获取谜语、提示、答案等信息

  我们可以将所有的谜语、提示和答案保存在三个 ArrayList 中,方便后续的使用。此外,我们还需要一个变量来保存当前显示的谜语的索引。

private JLabel riddleLabel;         // 显示谜语的标签
private JLabel hintLabel;           // 显示提示的标签
private JTextField answerField;     // 输入答案的文本框
5. 显示谜语和提示信息

  我们需要利用 JLabel 组件来显示谜语和提示信息。在显示谜语时,我们需要根据索引获取对应的谜语,然后将其显示在标签中。同样,我们也需要根据索引获取对应的提示信息,并将其显示在提示标签中。

currentRiddleIndex = (currentRiddleIndex + 1) % riddles.size();
riddleLabel.setText("谜面:" + riddles.get(currentRiddleIndex));
hintLabel.setText("提示:" + hints.get(currentRiddleIndex));
answerField.setText("");
guessButton.setEnabled(true);
6. 等待玩家输入答案

  我们需要利用 JTextField 组件来获取玩家输入的答案。在输入答案之前,我们需要将文本框清空,避免影响玩家的输入。此外,我们还需要一个“猜”按钮,让玩家确认自己的答案。

answerField.setText("");
guessButton.setEnabled(true);
7. 判断答案是否正确

  我们需要利用 JOptionPane 组件来显示玩家的答案是否正确。如果答案正确,我们需要更新玩家的得分,并计算玩家猜题的用时。最后,我们需要自动跳转到下一题。如果答案错误,我们需要禁用“猜”按钮,让玩家重新输入答案。

if (isCorrect) {
      // 得分+1
      score++;
      JOptionPane.showMessageDialog(this, "回答正确!");
      // 更新得分显示
      scoreLabel.setText("玩家得分:" + score);
      long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
      timeLabel.setText("用时:" + elapsedTime + "秒");
      //自动跳转下一题。
      nextRiddle();
  }
}
8. 统计得分和时间

  我们需要利用 JLabel 组件来显示玩家的得分和用时。在每次玩家回答正确后,我们需要更新得分,并计算出玩家猜题的用时。

long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
timeLabel.setText("用时:" + elapsedTime + "秒");
9. 进入「下一题」

  我们需要一个「下一题」按钮,让玩家进入下一题。在进入下一题之前,我们需要清空输入框,禁用“猜”按钮,以避免玩家重复提交答案。

nextRiddle();
10. 实现「重新游戏」

  我们需要一个「 重新开始 」按钮,让玩家可以重新开始游戏。在重新开始游戏之前,我们需要重置所有变量,包括当前题目的索引、玩家的得分和用时等等。

private void resetGame() {}
11. 实现「开始游戏」

  我们需要一个「开始游戏」按钮,让玩家在热身过后有个仪式感进入游戏进行大挑战!

startButton = new JButton("开始游戏");

最终效果

如下演示下如何把玩这个游戏吧!

进入游戏

启动游戏后,会提示玩家是否已热身准备好开启挑战之旅!

想挑战你的智商?快来试试Java版灯谜猜猜乐!,《程序人生》,Java,Java小游戏,猜灯谜小游戏,游戏,原力计划

开始游戏

点击「开始游戏」按钮,会投放谜题并自动开始计时。猜谜要快哟,时间有限。

想挑战你的智商?快来试试Java版灯谜猜猜乐!,《程序人生》,Java,Java小游戏,猜灯谜小游戏,游戏,原力计划

猜谜

在答题区输入你的谜底,示例如下:

想挑战你的智商?快来试试Java版灯谜猜猜乐!,《程序人生》,Java,Java小游戏,猜灯谜小游戏,游戏,原力计划

然后点击【猜】按钮后,答对会提示你“回答正确”,否则回答“回答错误!”

想挑战你的智商?快来试试Java版灯谜猜猜乐!,《程序人生》,Java,Java小游戏,猜灯谜小游戏,游戏,原力计划

下一题

  如果回答不出来,没关系,我也答不出来,咱们可以直接Pass!

想挑战你的智商?快来试试Java版灯谜猜猜乐!,《程序人生》,Java,Java小游戏,猜灯谜小游戏,游戏,原力计划

挑战成功

如果十题全部答对!会提示你“挑战成功!”
想挑战你的智商?快来试试Java版灯谜猜猜乐!,《程序人生》,Java,Java小游戏,猜灯谜小游戏,游戏,原力计划

想挑战的赶紧试试吧!看看你能答对几道?

完整代码

如下是实现「灯谜猜猜乐」小游戏的完整源码, 供同学们参考:

package com.example.javase.cy;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;

/**
 * 「灯谜猜猜乐」小游戏
 *
 * @Author bug菌
 * @Date 2023-09-12 22:02
 */
public class GuessTheRiddleGame extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;

    // 存储所有的谜语、提示、答案
    private static final List<String> riddles = Arrays.asList(
            "月上中秋分外明,愿你人在长安,心在天涯。",
            "团圆之夜思乡心,曲院花枝笑春风。",
            "清水流过秋千去,隔江犹唱后庭花。",
            "小楼昨夜又东风,故国不堪回首月明中。",
            "十五的月亮,照着我家门,门前有个小姐姐,正在弹琵琶。",
            "桂花满城香,中秋佳气浓。",
            "喜上眉梢,忧下心头。",
            "良辰美景,应须好好珍惜。",
            "家和万事兴,中秋快乐。",
            "中秋之夜,团圆永恒。"
    );
    private static final List<String> hints = Arrays.asList(
            "一句中秋佳节的祝福话。",
            "一句形容中秋夜景的诗句。",
            "一句形容中秋夜景的诗句。",
            "一句表达思乡之情的句子。",
            "一首古诗词的开头部分。",
            "一句形容中秋桂花的诗句。",
            "一句概括中秋节的话。",
            "一句表达爱与忧的句子。",
            "一句表达对美好时光的珍惜之情。",
            "一句表达团聚重要性的话。"
    );
    private static final List<String> answers = Arrays.asList(
            "中秋快乐",
            "月上柳梢头,人约黄昏后",
            "庭院深深,独自凝望",
            "明月几时有,把酒问青天",
            "静夜思",
            "桂花",
            "喜忧参半",
            "好时光",
            "家和万事兴",
            "团圆永恒"
    );

    private JLabel riddleLabel;         // 显示谜语的标签
    private JLabel hintLabel;           // 显示提示的标签
    private JTextField answerField;     // 输入答案的文本框
    private JButton guessButton;        // 确认答案的按钮
    private JButton nextButton;         // 进入下一题的按钮
    private JButton resetButton;        // 重置按钮
    private JButton startButton;        // 开始游戏按钮
    private int currentRiddleIndex;     // 当前显示的谜语的索引
    private int score = 0;              // 玩家得分
    private JLabel scoreLabel;          // 显示玩家得分的标签
    private Timer timer;                // 计时器
    private JLabel timeLabel;           // 显示用时的标签
    private long startTime;             // 计时器开始时间
    private JLabel startLabel;          // 显示游戏开始的标签

    // 创建游戏窗口
    public GuessTheRiddleGame() {
        //设置游戏名
        setTitle("灯谜猜猜乐");
        //设置游戏界面大小
        setSize(900, 300);
        //设置窗口关闭时的默认操作
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //让窗口居中显示
        setLocationRelativeTo(null);

        //创建输入框和按钮的面板
        JPanel answerPanel = new JPanel(new GridLayout(1, 1));
        riddleLabel = new JLabel();
        hintLabel = new JLabel();

        startButton = new JButton("开始游戏");
        // 添加按钮监听器
        startButton.addActionListener(this);

        answerField = new JTextField();
        guessButton = new JButton("猜");
        //添加按钮的监听器
        guessButton.addActionListener(this);
        //将输入框添加到面板中
        answerPanel.add(answerField);

        //创建下一题按钮的面板
        JPanel nextPanel = new JPanel();
        nextButton = new JButton("下一题");
        //触发下一题
        nextButton.addActionListener(this);
        // 将如下按钮添加到同面板中
        nextPanel.add(startButton);
        nextPanel.add(guessButton);
        nextPanel.add(nextButton);

        // 创建startLabel并将其添加到主面板中
        startLabel = new JLabel();

        // 创建计时器标签
        timeLabel = new JLabel("用时:0秒");

        //玩家得分
        scoreLabel = new JLabel("玩家得分:" + score);
        JPanel mainPanel = new JPanel(new GridLayout(7, 1));

        // 创建重置按钮面板
        resetButton = new JButton("重新游戏");
        //触发监听
        resetButton.addActionListener(this);
        nextPanel.add(resetButton);

        mainPanel.add(riddleLabel);
        mainPanel.add(hintLabel);
        mainPanel.add(answerPanel);
        mainPanel.add(nextPanel);
        mainPanel.add(startLabel);
        mainPanel.add(timeLabel);
        mainPanel.add(scoreLabel);

        //将面板添加到GUI容器中
        getContentPane().add(mainPanel);
        //初始化谜底序号
        currentRiddleIndex = -1;
        //出题
        nextRiddle();
    }

    // 监听按钮事件
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == startButton) {

            // 创建计时器,每1秒更新一次计时器标签
            timer = new Timer(1000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    // 计算用时
                    long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
                    // 更新计时器标签
                    timeLabel.setText("用时:" + elapsedTime + "秒");
                }
            });
            // 启动计时器
            timer.start();

            //提示开始计时
            startLabel.setText("游戏已开始,计时中...");
            startLabel.setForeground(Color.RED);
            startLabel.setHorizontalAlignment(JLabel.CENTER);
            //重置游戏
            resetGame();
            startButton.setEnabled(false);
        } else if (e.getSource() == guessButton) {
            checkAnswer();
        } else if (e.getSource() == nextButton) {
            nextRiddle();
        } else if (e.getSource() == timer) {
            long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
            timeLabel.setText("用时:" + elapsedTime + "秒");
        } else if (e.getSource() == resetButton) {
            resetGame();
        }
    }

    //重置游戏
    private void resetGame() {

        currentRiddleIndex = -1; // 激活“猜”按钮
        guessButton.setEnabled(true);
        score = 0;
        scoreLabel.setText("玩家得分:" + score);
        startTime = System.currentTimeMillis();
        timeLabel.setText("用时:0秒");
        // 禁用startButton
        startButton.setEnabled(false);
        // 启动下一题挑战
        nextButton.setEnabled(true);
        nextRiddle(); // 添加出题逻辑
    }


    // 显示下一道谜语
    private void nextRiddle() {
        if (timer == null || !timer.isRunning()) {
            JOptionPane.showMessageDialog(this, "请先点击开始游戏按钮开始游戏!");
            return;
        }

        currentRiddleIndex = (currentRiddleIndex + 1) % riddles.size();
        riddleLabel.setText("谜面:" + riddles.get(currentRiddleIndex));
        hintLabel.setText("提示:" + hints.get(currentRiddleIndex));
        answerField.setText("");
        guessButton.setEnabled(true);

        startTime = System.currentTimeMillis();
        if (timer != null) {
            timer.stop();
        }
        timer = new Timer(1000, this);
        //开始计时
        timer.start();
    }

    // 检查答案是否正确
    private void checkAnswer() {
        // 获取用户输入的答案
        String answer = answerField.getText().trim();
        // 获取正确的答案
        String correctAnswer = answers.get(currentRiddleIndex);
        // 判断回答是否答对返回对应提示
        boolean isCorrect = answer.equals(correctAnswer);

        if (isCorrect) {
            // 得分+1
            score++;
            if (score == 10) {
                JOptionPane.showMessageDialog(this, "恭喜你!挑战成功!");
                // 更新得分显示
                scoreLabel.setText("玩家得分:" + score);
                long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
                timeLabel.setText("用时:" + elapsedTime + "秒");
                //禁用
                guessButton.setEnabled(false);
                nextButton.setEnabled(false);

            } else {
                JOptionPane.showMessageDialog(this, "回答正确!");
                // 更新得分显示
                scoreLabel.setText("玩家得分:" + score);
                long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
                timeLabel.setText("用时:" + elapsedTime + "秒");
                //自动跳转下一题。
                nextRiddle();
            }
        } else {
            JOptionPane.showMessageDialog(this, "回答错误!");
            guessButton.setEnabled(false);
        }
    }

    //游戏启动入口
    public static void main(String[] args) {
        GuessTheRiddleGame game = new GuessTheRiddleGame();
        game.setVisible(true);
    }

}

结束语 · 举杯邀月饮🥤

  这个小游戏为大家演示了如何通过纯Java制作小游戏。在游戏制作过程中,我重点展示了如何利用 Swing 和 AWT 组件来创建界面、如何获取和显示谜语、提示和答案等信息、如何检查玩家输入的答案是否正确、如何统计得分和用时等等。希望通过这篇文章,同学们可以更好地掌握 Java 编程技能,并能开发出更多有趣的小玩意儿。

  如果你觉得这个小游戏有点儿意思,点个赞,鼓励一下bug菌,哈哈。

  最后,提前祝愿所有的读者朋友们,中秋国庆双节快乐!身体康健!最重要的是一起升职又加薪啦。

–End文章来源地址https://www.toymoban.com/news/detail-725727.html

到了这里,关于想挑战你的智商?快来试试Java版灯谜猜猜乐!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA的全新UI可以在配置里启用了,快来试试吧!

    刚看到IDEA官方昨天发了这样一条推: IDEA的新UI可以在2022.3版本上直接使用了!开启方法如下: 打开IDEA的 Setting 界面,在 Appearance Behavior 下有个被标注为Beta标签的New UI菜单,具体如下图: 勾选 Enable new UI 选项,然后点击 ok IDEA会提示重启: 这里记录下重启前的样子: 重启之

    2024年02月02日
    浏览(33)
  • 【程序人生】纳瓦尔:确保稀缺性的最简单的方法就是这个东西来自你的个性 | 纳瓦尔宝典

    目录 纳瓦尔简介 每个人应该找到自己独一无二的专长 确保稀缺性 产品化的关键点

    2024年02月08日
    浏览(50)
  • 还在被机组组合问题困扰?快来试试这个用处极大的考虑安全约束机组组合模型!

    前言 所谓安全约束机组组合,即在满足电力系统安全性约束的条件下,以系统购电成本最低等为优化目标,制定多时段的机组开停机计划。 机组组合(Unit commitment, Uc)优化问题旨在电力系统运行时,安全给定以及调整发电机组的启/停与实时出力,使发电机组的总运行成本最小

    2024年03月27日
    浏览(52)
  • 还在手动封装文件上传?快来试试这款一行代码实现多平台文件存储的工具!

    大家好,我是 Java陈序员 。 文件上传下载,是我们在开发中经常会遇到的需求! 无论是本地存储、还是云存储,我们可以自己封装 API 来实现功能。 今天,给大家介绍一款一行代码实现多平台文件存储的工具,开箱即用! 关注微信公众号:【Java陈序员】,获取 开源项目分

    2024年01月18日
    浏览(55)
  • 【不单调的代码】还在嫌弃Ubuntu终端?快来试试做些Ubuntu终端的花式玩法。

    🎊专栏【不单调的代码】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Love Story】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 本文是在 Ubuntu环境 下进行编写的,在其他环境下的代码有可能有所不同 目录 注意:   🐂终端中出现会\\\"说话\\\"的牛

    2024年02月08日
    浏览(50)
  • AIGC图像分辨率太低?快来试试像素感知扩散超分模型,你想要的细节都在这里

           最新 FaceChain支持多人合照写真、上百种单人写真风格,项目信息汇总:ModelScope 魔搭社区 。        github开源直达(觉得有趣的点个star哈。):GitHub - modelscope/facechain: FaceChain is a deep-learning toolchain for generating your Digital-Twin. 摘要 阿里巴巴最新自研的像素感知扩散

    2024年02月08日
    浏览(37)
  • 快来参与:2023全国大数据与计算智能挑战赛正在报名中

    全国大数据与计算智能挑战赛是由 国防科技大学系统工程学院大数据与决策实验室 组织的年度赛事活动,旨在深入挖掘大数据应用实践中亟需破解的能力生成难题、选拔汇聚数据领域优势团队、促进大数据领域的技术创新和面向需求的成果生成、推动形成“集智众筹、联合

    2024年02月05日
    浏览(44)
  • 【性能测试工具lmbench】快来测测你的系统可以打几分

    关注优麒麟,更多干货等着你! 一个好的操作系统不仅仅依赖于系统基本功能趋于稳定,更取决于系统性能的好坏。系统性能测试是一个不断对系统施加压力的过程,在此过程中,不断发现系统性能指标和最大负载能力。性能测试工具很多,例如 Jmeter、loadrunner、stream、lmb

    2023年04月12日
    浏览(40)
  • 你的Spring应用启动很慢?不妨试试这个工具!

    睡不着闲逛,在GitHub上看到一个挺实用的开源项目: Spring Startup Analyzer 。 从项目名称中就大概能猜到,这是一个分析Spring应用启动过程的工具。Spring Startup Analyzer通过采集Spring应用启动过程的数据,进而生成一个交互式的分析报告,帮助用户发现Spring应用启动慢的位置。 同

    2024年02月16日
    浏览(52)
  • 【小程序】快来开发你的第一个微信小游戏(详细流程)

    🥳 作者:伯子南 😎 坚信: 好记性不如乱笔头,独乐乐不如众乐乐 💪 个人主页:https://blog.csdn.net/qq_34577234?spm=1010.2135.3001.5421 👬🏻 觉得博主文章不错的话,请三连支持一下!如有需要我的支持,请私信! 本文通过开发一个简单的小游戏,来带领大家实操一下开发小游戏

    2024年02月03日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包