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

Java Swing 英文打字遊戲改良版:全螢幕、難度可調、音效回饋

     編輯:Java 相關知識

在先前 Applet 版本基礎上,改良版遷移至 Swing JFrame 全螢幕模式,新增右鍵選單動態調整「字母數量(1~9)」與「下落速度」,並引入雙執行緒架構(遊戲迴圈 + 事件分派),修正原版碰撞檢測與統計邏輯,適合作為桌面小遊戲參考專案。

核心架構

  • MyPanel (JFrame):主視窗、全螢幕初始化、統計面板、右鍵選單。
  • A (JPanel + Runnable):遊戲主迴圈(repaint() + Thread.sleep(FPS))、字母產生器持有者。
  • letter:字母物件池,管理位置、速度、字元、重生邏輯。
  • C (MouseAdapter):右鍵彈出選單。
  • D (KeyAdapter):鍵盤擊鍵判定、統計更新。

關鍵演算法

字母不重複隨機生成

// 位置不重複
int[] aa = new int[100];
for (int i=0, n=0; i < exist_letter_num; i++) {
    aa[n] = ran.nextInt(9);
    if (i != 0) while (check(aa, n)) aa[n] = ran.nextInt(9);
    X[i] = XY[aa[n]];
    let[aa[n]] = true; n++;
}
// 字元不重複
while (true) {
    for (int i=0; i < exist_letter_num; i++) {
        c[i] = new StringBuffer(1);
        c[i].setCharAt(0, (char)(ran.nextInt(26) + 65)); // A-Z
        cc[i] = c[i].toString();
    }
    if (checkChar(c)) break;
}

擊鍵判定與統計

public boolean isTyped(char key) {
    for (int i=0; i < exist_letter_num; i++) {
        if ((char)(key - 32) == cc[i].charAt(0)) { // 小寫轉大寫比對
            isTypedSum++;
            myletter.reStart(i);
            return true;
        }
    }
    isWrongTypedSum++;
    return false;
}

準確率 = isTypedSum / (isTypedSum + isWrongTypedSum + isOmittedSum) × 100%

右鍵選單功能表

選項行為
開始遊戲重置統計、啟動執行緒、產生字母
結束遊戲停止執行緒
增加字母數量exist_letter_num++ (上限 9) → 重新產生
加快下落速度所有 speed[i]++
減少字母數量exist_letter_num-- (下限 1) → 重新產生
減緩下落速度speed[i]-- (下限 1)

改良重點總結

  1. 移除 Applet 相依,改用 JFrame + Toolkit.getScreenSize() 全螢幕。
  2. 統計變數封裝於 MyPanel,避免 static 污染。
  3. 字母重生邏輯分離 reStartX()/reStartStr(),確保位置與字元雙重不重複。
  4. 繪圖採用雙緩衝(createImage + offscreen Graphics),消除閃爍。
  5. 新增難度動態調整,提升可玩性。

編譯執行

javac MyPanel.java
java MyPanel

啟動後於視窗內右鍵選擇「開始遊戲」。

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