QuickHit 是一個經典的 Java 面向對象練習項目,模擬「快速擊鍵」打字遊戲。程式會隨機生成字符序列,玩家需在限定時間內準確輸入,通過多關卡遞增難度,考驗反應速度與輸入準確度。本文將完整拆解三大核心類——Game、Level、Test 的設計邏輯與代碼實現,幫助初學者理解面向對象建模、隨機生成、多線程計時與控制台交互等核心技術點。
負責根據當前關卡等級 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;
}
}
整合計時、輸入校驗、關卡推進、勝負判定。使用 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);
}
}
標準 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 做圖形界面,或加入排行榜、持久化存儲,進一步豐富專案。