最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Java制作一個燈謎猜猜樂游戲

 更新時間:2023年09月14日 08:18:10   作者:bug菌  
中秋佳節(jié),是我國傳統(tǒng)的重大節(jié)日之一,全國各地為了增強過節(jié)的氣氛,都有許多傳統(tǒng)的中秋活動,比如猜燈謎,所以本文就來用Java制作一個燈謎猜猜樂游戲,感興趣的可以了解下

前言

中秋佳節(jié),是我國傳統(tǒng)的重大節(jié)日之一。全國各地為了增強過節(jié)的氣氛,都有許多傳統(tǒng)的中秋活動,比如吃月餅、賞月、猜燈謎等等。其中,猜燈謎就是一項極具娛樂性的活動,它不僅可以增進親友之間的感情,更重要的是,還可以挑戰(zhàn)智商,讓你的小腦袋飛速運轉(zhuǎn)。

為了讓大家更暢快愉快的重溫這種樂趣,快馬加鞭,趕在中秋節(jié)前,bug菌偷偷地把它制作出來了,接下來,快帶上家人們一塊來挑戰(zhàn),讓我們拭目以待,看看最終第一花落誰家!到底誰能答出我所設(shè)置的所有謎面!

開搞開搞

玩過Java的同學(xué)都清楚,想靠純Java實現(xiàn)一個可炫的可視化圖形,對比前端語言來說那簡直一個天一個地,但咱天生就不是會被困難折服的人,今個兒我就只用它來做一個可操作可視化的游戲。

準備工作

在開始制作游戲之前,我們需要準備一些材料:

  • 謎語及其答案
  • 提示
  • GUI界面

這里我們已經(jīng)準備好了10個中秋節(jié)相關(guān)的謎面和謎底,同時也有對應(yīng)的提示。我們將在GUI界面中顯示謎語和提示,并且讓玩家輸入答案并確認是否正確。在確認答案正確后,進入下一道謎語。

游戲的制作思路

游戲界面設(shè)計

用Java設(shè)計的游戲界面簡潔明了,同時需要顯示謎面、提示、輸入框、按鈕等組件。其中,輸入框和按鈕應(yīng)該在同一個面板上,方便操作。

游戲邏輯設(shè)計

游戲邏輯應(yīng)該包括以下幾個部分:

  • 進入游戲過渡
  • 獲取謎語、提示、答案等信息
  • 顯示謎語和提示信息
  • 等待玩家輸入答案
  • 判斷答案是否正確
  • 統(tǒng)計得分和時間
  • 進入下一題

游戲功能設(shè)計

游戲功能應(yīng)該包括以下幾個部分:

  • 顯示當前題目的謎面和提示
  • 檢查玩家輸入的答案是否正確
  • 顯示得分和時間信息
  • 進入謎底沖刺,可以隨時重新開始游戲
  • 提示挑戰(zhàn)成功

游戲的制作步驟

1. 創(chuàng)建一個 Java 項目

首先我們要先創(chuàng)建一個Java項目。

2. 導(dǎo)入需要的 jar 包

  • swing.jar
  • awt.jar

3. 創(chuàng)建游戲窗口

其次我們需要創(chuàng)建一個 JFrame 類,并設(shè)置窗口的標題、大小、默認關(guān)閉操作和窗口位置等基本屬性。然后,創(chuàng)建各種組件,如標簽、文本框、按鈕等,并將它們添加到主面板中。最后,顯示第一道謎語。

//設(shè)置游戲名
setTitle("燈謎猜猜樂");
//設(shè)置游戲界面大小
setSize(900, 300);
//設(shè)置窗口關(guān)閉時的默認操作
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//讓窗口居中顯示
setLocationRelativeTo(null);
//創(chuàng)建輸入框和按鈕的面板
JPanel answerPanel = new JPanel(new GridLayout(1, 1));

4. 獲取謎語、提示、答案等信息

我們可以將所有的謎語、提示和答案保存在三個 ArrayList 中,方便后續(xù)的使用。此外,我們還需要一個變量來保存當前顯示的謎語的索引。

private JLabel riddleLabel;         // 顯示謎語的標簽
private JLabel hintLabel;           // 顯示提示的標簽
private JTextField answerField;     // 輸入答案的文本框

5. 顯示謎語和提示信息

我們需要利用 JLabel 組件來顯示謎語和提示信息。在顯示謎語時,我們需要根據(jù)索引獲取對應(yīng)的謎語,然后將其顯示在標簽中。同樣,我們也需要根據(jù)索引獲取對應(yīng)的提示信息,并將其顯示在提示標簽中。

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 組件來顯示玩家的答案是否正確。如果答案正確,我們需要更新玩家的得分,并計算玩家猜題的用時。最后,我們需要自動跳轉(zhuǎn)到下一題。如果答案錯誤,我們需要禁用“猜”按鈕,讓玩家重新輸入答案。

if (isCorrect) {
      // 得分+1
      score++;
      JOptionPane.showMessageDialog(this, "回答正確!");
      // 更新得分顯示
      scoreLabel.setText("玩家得分:" + score);
      long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
      timeLabel.setText("用時:" + elapsedTime + "秒");
      //自動跳轉(zhuǎn)下一題。
      nextRiddle();
  }
}

8. 統(tǒng)計得分和時間

我們需要利用 JLabel 組件來顯示玩家的得分和用時。在每次玩家回答正確后,我們需要更新得分,并計算出玩家猜題的用時。

long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
timeLabel.setText("用時:" + elapsedTime + "秒");

9. 進入「下一題」

我們需要一個「下一題」按鈕,讓玩家進入下一題。在進入下一題之前,我們需要清空輸入框,禁用“猜”按鈕,以避免玩家重復(fù)提交答案。

nextRiddle();

10. 實現(xiàn)「重新游戲」

我們需要一個「 重新開始 」按鈕,讓玩家可以重新開始游戲。在重新開始游戲之前,我們需要重置所有變量,包括當前題目的索引、玩家的得分和用時等等。

private void resetGame() {}

11. 實現(xiàn)「開始游戲」

我們需要一個「開始游戲」按鈕,讓玩家在熱身過后有個儀式感進入游戲進行大挑戰(zhàn)!

startButton = new JButton("開始游戲");

最終效果

如下演示下如何把玩這個游戲吧!

進入游戲

啟動游戲后,會提示玩家是否已熱身準備好開啟挑戰(zhàn)之旅!

開始游戲

點擊「開始游戲」按鈕,會投放謎題并自動開始計時。猜謎要快喲,時間有限。

猜謎

在答題區(qū)輸入你的謎底,示例如下:

然后點擊【猜】按鈕后,答對會提示你“回答正確”,否則回答“回答錯誤!”

下一題

如果回答不出來,沒關(guān)系,我也答不出來,咱們可以直接Pass!

挑戰(zhàn)成功

如果十題全部答對!會提示你“挑戰(zhàn)成功!”

想挑戰(zhàn)的趕緊試試吧!看看你能答對幾道?

完整代碼

如下是實現(xiàn)「燈謎猜猜樂」小游戲的完整源碼, 供同學(xué)們參考:

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(
            "月上中秋分外明,愿你人在長安,心在天涯。",
            "團圓之夜思鄉(xiāng)心,曲院花枝笑春風(fēng)。",
            "清水流過秋千去,隔江猶唱后庭花。",
            "小樓昨夜又東風(fēng),故國不堪回首月明中。",
            "十五的月亮,照著我家門,門前有個小姐姐,正在彈琵琶。",
            "桂花滿城香,中秋佳氣濃。",
            "喜上眉梢,憂下心頭。",
            "良辰美景,應(yīng)須好好珍惜。",
            "家和萬事興,中秋快樂。",
            "中秋之夜,團圓永恒。"
    );
    private static final List<String> hints = Arrays.asList(
            "一句中秋佳節(jié)的祝福話。",
            "一句形容中秋夜景的詩句。",
            "一句形容中秋夜景的詩句。",
            "一句表達思鄉(xiāng)之情的句子。",
            "一首古詩詞的開頭部分。",
            "一句形容中秋桂花的詩句。",
            "一句概括中秋節(jié)的話。",
            "一句表達愛與憂的句子。",
            "一句表達對美好時光的珍惜之情。",
            "一句表達團聚重要性的話。"
    );
    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;          // 顯示游戲開始的標簽
    // 創(chuàng)建游戲窗口
    public GuessTheRiddleGame() {
        //設(shè)置游戲名
        setTitle("燈謎猜猜樂");
        //設(shè)置游戲界面大小
        setSize(900, 300);
        //設(shè)置窗口關(guān)閉時的默認操作
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //讓窗口居中顯示
        setLocationRelativeTo(null);
        //創(chuàng)建輸入框和按鈕的面板
        JPanel answerPanel = new JPanel(new GridLayout(1, 1));
        riddleLabel = new JLabel();
        hintLabel = new JLabel();
        startButton = new JButton("開始游戲");
        // 添加按鈕監(jiān)聽器
        startButton.addActionListener(this);
        answerField = new JTextField();
        guessButton = new JButton("猜");
        //添加按鈕的監(jiān)聽器
        guessButton.addActionListener(this);
        //將輸入框添加到面板中
        answerPanel.add(answerField);
        //創(chuàng)建下一題按鈕的面板
        JPanel nextPanel = new JPanel();
        nextButton = new JButton("下一題");
        //觸發(fā)下一題
        nextButton.addActionListener(this);
        // 將如下按鈕添加到同面板中
        nextPanel.add(startButton);
        nextPanel.add(guessButton);
        nextPanel.add(nextButton);
        // 創(chuàng)建startLabel并將其添加到主面板中
        startLabel = new JLabel();
        // 創(chuàng)建計時器標簽
        timeLabel = new JLabel("用時:0秒");
        //玩家得分
        scoreLabel = new JLabel("玩家得分:" + score);
        JPanel mainPanel = new JPanel(new GridLayout(7, 1));
        // 創(chuàng)建重置按鈕面板
        resetButton = new JButton("重新游戲");
        //觸發(fā)監(jiān)聽
        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();
    }
    // 監(jiān)聽按鈕事件
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == startButton) {
            // 創(chuàng)建計時器,每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);
        // 啟動下一題挑戰(zhàn)
        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);
        // 判斷回答是否答對返回對應(yīng)提示
        boolean isCorrect = answer.equals(correctAnswer);
        if (isCorrect) {
            // 得分+1
            score++;
            if (score == 10) {
                JOptionPane.showMessageDialog(this, "恭喜你!挑戰(zhàn)成功!");
                // 更新得分顯示
                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 + "秒");
                //自動跳轉(zhuǎn)下一題。
                nextRiddle();
            }
        } else {
            JOptionPane.showMessageDialog(this, "回答錯誤!");
            guessButton.setEnabled(false);
        }
    }
    //游戲啟動入口
    public static void main(String[] args) {
        GuessTheRiddleGame game = new GuessTheRiddleGame();
        game.setVisible(true);
    }
}

結(jié)束語

這個小游戲為大家演示了如何通過純Java制作小游戲。在游戲制作過程中,我重點展示了如何利用 Swing 和 AWT 組件來創(chuàng)建界面、如何獲取和顯示謎語、提示和答案等信息、如何檢查玩家輸入的答案是否正確、如何統(tǒng)計得分和用時等等。

以上就是基于Java制作一個燈謎猜猜樂游戲的詳細內(nèi)容,更多關(guān)于Java燈謎游戲的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java虛擬機運行時數(shù)據(jù)區(qū)域匯總

    Java虛擬機運行時數(shù)據(jù)區(qū)域匯總

    這篇文章主要給大家介紹了關(guān)于Java虛擬機運行時數(shù)據(jù)區(qū)域的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 詳解Java的Hibernate框架中的搜索工具的運用

    詳解Java的Hibernate框架中的搜索工具的運用

    這篇文章主要介紹了詳解Java的Hibernate框架中的搜索工具的運用,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • Java構(gòu)建對象常用3種方法解析

    Java構(gòu)建對象常用3種方法解析

    這篇文章主要介紹了Java構(gòu)建對象常用3種方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java中設(shè)計模式之適配器模式

    java中設(shè)計模式之適配器模式

    這篇文章主要介紹了java中設(shè)計模式之適配器模式的相關(guān)資料,適配器模式將一個類的接口轉(zhuǎn)換成客戶期望的另一個接口。適配器讓原本不兼容的類可以合作得親密無間,需要的朋友可以參考下
    2017-09-09
  • Java中使用OKHTTP3的詳細教程與實戰(zhàn)應(yīng)用案例

    Java中使用OKHTTP3的詳細教程與實戰(zhàn)應(yīng)用案例

    okhttp是當下主流的網(wǎng)絡(luò)請求的開源框架,效率很高,使用起來也非常方便,這篇文章主要介紹了Java中使用OKHTTP3的詳細教程與實戰(zhàn)應(yīng)用案例的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-01-01
  • 30分鐘入門Java8之方法引用學(xué)習(xí)

    30分鐘入門Java8之方法引用學(xué)習(xí)

    在Java8中,我們可以直接通過方法引用來簡寫lambda表達式中已經(jīng)存在的方法,這篇文章主要介紹了30分鐘入門Java8之方法引用學(xué)習(xí),有興趣可以了解一下。
    2017-04-04
  • Java實現(xiàn)一鍵生成PDF文件并插入文字/選項/簽名及公章

    Java實現(xiàn)一鍵生成PDF文件并插入文字/選項/簽名及公章

    這篇文章將從底層原理到實戰(zhàn)技巧,為大家詳細介紹一下如何用Java實現(xiàn)一鍵生成PDF文件、插入文字、選項、簽名及公章,需要的小伙伴可以了解下
    2025-08-08
  • RocketMQ中消費者概念和消費流程詳解

    RocketMQ中消費者概念和消費流程詳解

    這篇文章主要介紹了RocketMQ中消費者概念和消費流程詳解,RocketMQ是一款高性能、高可靠性的分布式消息中間件,消費者是RocketMQ中的重要組成部分,消費者負責(zé)從消息隊列中獲取消息并進行處理,需要的朋友可以參考下
    2023-10-10
  • SpringBoot的@GetMapping路徑匹配規(guī)則、國際化詳細教程

    SpringBoot的@GetMapping路徑匹配規(guī)則、國際化詳細教程

    這篇文章主要介紹了SpringBoot的@GetMapping路徑匹配規(guī)則、國際化,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Java多重循環(huán)與程序調(diào)試示例詳解

    Java多重循環(huán)與程序調(diào)試示例詳解

    Java中多重循環(huán)是一種常用的編程技術(shù),它可以在內(nèi)循環(huán)完成一次后回到外循環(huán),再次執(zhí)行內(nèi)循環(huán),這篇文章主要介紹了Java多重循環(huán)與程序調(diào)試的相關(guān)資料,需要的朋友可以參考下
    2025-08-08

最新評論

太仓市| 宝鸡市| 万源市| 平乡县| 曲周县| 仙居县| 烟台市| 若尔盖县| 界首市| 察雅县| 门源| 桂东县| 洛浦县| 临汾市| 柏乡县| 江川县| 石景山区| 阿拉善右旗| 崇礼县| 高陵县| 临西县| 英吉沙县| 同心县| 农安县| 东乡族自治县| 天柱县| 兴城市| 保德县| 丰都县| 鸡东县| 陕西省| 怀柔区| 安义县| 扎兰屯市| 浠水县| 内黄县| 连南| 黔西县| 隆林| 舒兰市| 黄浦区|