我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

前言

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

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

开搞开搞!!

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

准备工作

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

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

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

游戏的制作思路

游戏界面设计

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

image.png

游戏逻辑设计

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

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

游戏功能设计

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

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

游戏的制作步骤

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("开始游戏");

最终效果

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

进入游戏

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

在这里插入图片描述

开始游戏

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

在这里插入图片描述

猜谜

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

image.png

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

在这里插入图片描述

下一题

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

image.png

挑战成功

如果十题全部答对!会提示你“挑战成功!”
在这里插入图片描述

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

完整代码

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

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;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://blog.csdn.net/weixin_43970743/article/details/132859735

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录