首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 面向對象實戰:QuickHit 打字遊戲項目完整代碼解析

     編輯:Java 綜合教學

專案簡介

QuickHit 是一個經典的 Java 面向對象練習項目,模擬「快速擊鍵」打字遊戲。程式會隨機生成字符序列,玩家需在限定時間內準確輸入,通過多關卡遞增難度,考驗反應速度與輸入準確度。本文將完整拆解三大核心類——Game、Level、Test 的設計邏輯與代碼實現,幫助初學者理解面向對象建模、隨機生成、多線程計時與控制台交互等核心技術點。

核心類設計

1. Game 類:隨機字符生成器

負責根據當前關卡等級 level 生成指定長度的隨機字符串。字符集固定為 1-6,長度為 level + 1。使用 Random 配合 switch 實現隨機拼接,邏輯清晰易懂。

public class Game {
    private String sbString;
    Random random = new Random();

    public String player(int level) {
        sbString = "";
        for (int i = 0; i < level + 1; i++) {
            int rand = random.nextInt(level + 1);
            switch (rand) {
                case 0: sbString += "1"; break;
                case 1: sbString += "2"; break;
                case 2: sbString += "3"; break;
                case 3: sbString += "4"; break;
                case 4: sbString += "5"; break;
                case 5: sbString += "6"; break;
                default: break;
            }
        }
        return sbString;
    }
}

2. Level 類:遊戲邏輯控制中樞

整合計時、輸入校驗、關卡推進、勝負判定。使用 Date 獲取毫秒級時間戳計算耗時,設定 30 秒超時機制。連續答對 4 題升級,達到第 6 關即通關。代碼雖使用 do-while(true) 無限循環,但通過 break 在超時、輸入錯誤、通關三種情況下退出,結構完整。

public class Level {
    Game game = new Game();
    Scanner san = new Scanner(System.in);
    Date dt1 = new Date();
    Date dt2;
    int num = 0;
    int level = 1;

    public void level() {
        do {
            dt2 = new Date();
            if (level == 6) {
                System.out.println("已通過!!!");
                break;
            }
            if (num == 4) {
                num = 0;
                level++;
            }
            // 計算時間差,處理跨分鐘邊界
            if (dt1.getSeconds() > dt2.getSeconds()) {
                if (dt1.getSeconds() - dt2.getSeconds() > 30) {
                    System.out.println("超時!!!");
                    break;
                }
            } else if (dt1.getSeconds() < dt2.getSeconds()) {
                if (dt2.getSeconds() - dt1.getSeconds() > 30) {
                    System.out.println("超時!!!");
                    break;
                }
            }
            // 正常遊戲流程
            String sbString = game.player(level);
            System.out.println(sbString);
            String newString = san.next();
            if (newString.equals(sbString)) {
                System.out.println("輸入正確");
                num++;
            } else {
                System.out.println("輸出錯誤");
                break;
            }
        } while (true);
    }
}

3. Test 類:程式入口

標準 main 方法,實例化 Level 並啟動遊戲循環。

public class Test {
    public static void main(String[] args) {
        Level level = new Level();
        level.level();
    }
}

技術亮點與改進建議

  • 面向對象分層清晰:數據生成、邏輯控制、啟動入口職責分離。
  • 時間計算需優化:Date.getSeconds() 已棄用且跨分鐘計算有缺陷,建議改用 System.currentTimeMillis() 或 Instant。
  • 擴展性預留:字符集、關卡參數、計分規則均可抽象為配置類,便於後期維護。

總結

QuickHit 雖小,卻包含了 Java 基礎語法、面向對象設計、控制台交互、時間處理等核心知識點,是初學者從「寫代碼」走向「設計程式」的優秀實踐案例。建議在掌握邏輯後,嘗試引入 Swing/JavaFX 做圖形界面,或加入排行榜、持久化存儲,進一步豐富專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved