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

J2ME 2D 遊戲開發實戰:計時器、獎勵系統與評價機制完整實現

     編輯:Java 程式設計入門

遊戲核心邏輯架構

基於 MIDP 2.0 / CLDC 1.1 規範,使用 GameCanvas 雙緩衝渲染,主循環固定幀率 (如 20 FPS),每幀處理輸入、更新邏輯、繪製場景。

計時器實現 (精確到秒)

// 初始化
long gameTimeOffset = System.currentTimeMillis();
int gameTime = 0;

// 每幀更新
public void updateTimer() {
    if (!gameOver) {
        gameTime = (int)((System.currentTimeMillis() - gameTimeOffset) / 1000);
    }
}

// 繪製 (使用自定義位圖字體類 Font)
fontBig.drawString(String.valueOf(gameTime), screenWidth/2 - 15, 10);

關鍵點:使用 System.currentTimeMillis() 而非 Thread.sleep 累加,避免幀率波動導致時間漂移;位圖字體 (數字圖片切片) 繁製比 Graphics.drawString 更高效、風格可控。

獎勵系統:每 20 秒贈送炸彈

// 配置:每個獎勵階段贈送數量 (可擴展為動態配置)
int[] bombAward = {1, 1, 2, 1, 3, 2, 0, 0, ...}; // 索引對應 20s 階段
int bombAwardTop = bombAward.length - 1;
int[] bombAwarded = new int[bombAward.length]; // 0=未領取, 1=已領取

public void checkAward() {
    int awardIndex = gameTime / 20;
    if (awardIndex > bombAwardTop) awardIndex = bombAwardTop;
    
    if (bombAwarded[awardIndex] == 0 && bombAward[awardIndex] > 0) {
        bombNum += bombAward[awardIndex];
        bombAwarded[awardIndex] = 1; // 標記已領取
        // 可觸發視覺/聽覺提示:閃爍圖標、音效
    }
}

設計亮點:陣列索引直接映射時間階段,O(1) 判斷;狀態陣列防止重複領取;配置數據與邏輯分離,便於策劃調整。

評價系統:基於通關時間的趣味反饋


public class StringTools {
    public static String timeOpinion(long gameTime) {
        if (gameTime < 10) return "Do you play with your foot?";
        else if (gameTime < 16) return "Come on, you can do it!";
        else if (gameTime < 20) return "What a pity! Try again.";
        else if (gameTime < 25) return "Very well, you are a real pro.";
        else if (gameTime < 30) return "I know you have talent!";
        else if (gameTime < 40) return "I can't believe, you are a master!";
        else return "Oh my god, are you human?";
    }
}

// 繪製 (直接使用 Graphics.drawString,因評價文本變化大,不適合位圖字體)
g.drawString(StringTools.timeOpinion(gameTime), 5, 22, Graphics.LEFT | Graphics.TOP);

工程化最佳實踐總結

  1. 工具類封裝:ImageTools.getImage() 統一圖片載入 (處理 Jar 內路徑、異常);Font 位圖字體類復用;StringTools 文本邏輯隔離。
  2. 狀態機設計:遊戲狀態 (READY, RUNNING, PAUSED, GAME_OVER) 顯式建模,避免布爾標誌散落。
  3. 資源管理:遊戲結束釋放圖片、音頻、字體對象置 null,調用 System.gc() (謹慎)。
  4. 跨設備適配:螢幕尺寸自適應 (獲取 getWidth()/getHeight());按鍵映射適配 (不同手機鍵碼差異);性能分級 (高端機啟用粒子特效、低端機簡化渲染)。
  5. 持久化:高分記錄存儲至 RMS (Record Management System),支持多檔案槽位。

從 J2ME 到現代移動遊戲開發的啟示

  • 極致資源受限環境 (幾百 KB JAR、1-2 MB 堆) 鍛煉出的優化思維 (對象池、避免自動裝箱、內聯關鍵路徑) 在 Android/iOS 開發中同樣寶貴。
  • GameCanvas 雙緩衝、幀率固定、輸入輪詢模式是現代遊戲循環 (Unity Update/FixedUpdate、LibGDX render) 的雛形。
  • RMS 簡鍵值存儲預演了 SharedPreferences/DataStore/AsyncStorage。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved