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

J2ME 2D 遊戲開發入門(六):計時器、獎勵系統與評價機制

     編輯:Java 相關知識

為遊戲加入生存計時、定時獎勵與結算評價,豐富玩法回饋循環。

1. 生存計時器

記錄遊戲開始時間戳,主循環每幀計算經過秒數:

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

// 主循環每幀更新
if (!gameOver) {
    gameTime = (int)((System.currentTimeMillis() - gameTimeOffset) / 1000);
}

2. 位圖字體渲染時間

復用 Font 工具類 (見第 2 篇) 繪製數字:

// 初始化數字字體圖集 (0-9)
Image img = ImageTools.getImage("/pic/b_number.png");
Font fontBig = new Font(g, img, 10, 15, new char[]{'0','1','2','3','4','5','6','7','8','9'});

// 繪製居中顯示
fontBig.drawString(String.valueOf(gameTime), screenWidth/2 - 15, 10);

3. 定時獎勵系統:每 20 秒送炸彈

int[] bombAward = {1, 1, 1, 1, 1}; // 每個 20s 區間獎勵 1 個
int bombAwardTop = bombAward.length - 1;

int awardIndex = gameTime / 20; // 當前區間索引
if (awardIndex > bombAwardTop) awardIndex = bombAwardTop;

if (bombAward[awardIndex] != 0) { // 該區間未領取
    bombNum += bombAward[awardIndex];
    bombAward[awardIndex] = 0; // 標記已領取
}

設計要點:區間索引 + 狀態標記 避免重複發放,簡單高效。

4. 結算評價:基於生存時間的梯級文案

工具類 StringTools:

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 gamer.";
        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?";
    }
}

繪製:g.drawString(StringTools.timeOpinion(gameTime), 5, 22, Graphics.LEFT|Graphics.TOP);

5. 遊戲結束流程整合

if (gameOver) {
    explosion.paint(g); explosion.update(); // 播放爆炸動畫
    if (!explosion.alive) {
        plane.alive = false;
        g.setColor(0xFFFFFF);
        g.drawString(StringTools.timeOpinion(gameTime), 5, 22, Graphics.TOP|Graphics.LEFT);
        g.drawString("Fly 0.1 ver by Favo Yang", 2, 100, Graphics.TOP|Graphics.LEFT);
        // ... 聯繫信息
    }
}

小結

  • 計時器:時間戳差值法,避免幀率影響準確性。
  • 獎勵:區間索引 + 陣列標記,O(1) 邏輯,無需複雜事件系統。
  • 評價:硬編碼梯級文案,後續可外部化配置支援多語言。
  • 位圖字體:固定寬高字符圖集 + hash 映射,渲染極快,適合資源受限設備。

下一篇將實現爆炸特效與導彈道具,引入效果層與邏輯層通信。

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