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

遊戲開發實戰:計時器系統、時間獎勵機制與通關評價系統設計

     編輯:J2ME

系統概覽

本文實作三大遊戲輔助系統:

  1. 高精度計時器:遊戲開始→實時顯示→結束凍結,支持暫停恢復
  2. 時間獎勵機制:每 20 秒發放道具 (如炸彈),防重複領取
  3. 通關評價系統:根據用時輸出分級文本反饋,增強重玩動力

1. 遊戲計時器核心實現

初始化 (遊戲開始/重置)


private long gameTime = 0;        // 遊戲已用秒數
private long gameTimeOffset = 0;  // 起始時間戳 (ms)

public void onGameStart() {
    gameTime = 0;
    gameTimeOffset = System.currentTimeMillis();
}

每幀更新 (遊戲主循環調用)


public void updateTimer() {
    if (!gameOver) {
        gameTime = (System.currentTimeMillis() - gameTimeOffset) / 1000; // 轉秒
    }
}

暫停/恢復支持 (來電、菜單彈出)


private long pauseStartTime = 0;

public void onPause() {
    if (!gameOver) {
        pauseStartTime = System.currentTimeMillis();
    }
}

public void onResume() {
    if (!gameOver && pauseStartTime > 0) {
        // 補償暫停耗時
        gameTimeOffset += (System.currentTimeMillis() - pauseStartTime);
        pauseStartTime = 0;
    }
}

2. 計時器顯示:位圖字體渲染

使用預製數字圖集 (b_number.png,每字符 10x15 像素) 繪製,避免系統字體大小不一、不支持對齊等問題。


// 初始化 (載入一次)
private BitmapFont fontBig;
fontBig = new BitmapFont(g, Image.createImage("/pic/b_number.png"), 
                         10, 15, "0123456789".toCharArray());

// 繪製 (每幀)
fontBig.drawString(String.valueOf(gameTime), screenWidth/2 - 15, 10);

BitmapFont 關鍵方法:

  • drawString(String, int x, int y):逐字符查表繪製 drawRegion
  • 支持右對齊、居中、前導零等擴展

3. 時間獎勵系統:每 20 秒發放炸彈

設計邏輯

  • 獎勵間隔:REWARD_INTERVAL = 20 秒
  • 最大獎勵次數:MAX_REWARDS = 5 (對應 100 秒內)
  • 防重複:boolean[] rewardClaimed 標記各區間是否已領

核心代碼


private static final int REWARD_INTERVAL = 20;
private static final int MAX_REWARDS = 5;
private boolean[] rewardClaimed = new boolean[MAX_REWARDS];
private int bombCount = 0;
private int[] rewardAmount = {1, 1, 1, 1, 1}; // 每次給 1 個

public void checkTimeRewards() {
    int intervalIndex = (int) (gameTime / REWARD_INTERVAL); // 當前區間索引
    if (intervalIndex >= MAX_REWARDS) intervalIndex = MAX_REWARDS - 1;
    
    if (!rewardClaimed[intervalIndex]) {
        bombCount += rewardAmount[intervalIndex];
        rewardClaimed[intervalIndex] = true;
        // 可觸發音效/特效提示玩家
        playSound("reward");
    }
}

調用時機:在 updateTimer() 後調用,確保每秒檢查一次。

4. 通關評價系統:基於用時的分級文本

工具類實現


public final class GameEvaluator {
    private GameEvaluator() {} // 工具類禁止實例化
    
    public static String getTimeEvaluation(long gameTimeSeconds) {
        if (gameTimeSeconds < 10) {
            return "Do you play with your foot?";
        } else if (gameTimeSeconds < 16) {
            return "Come on, you can do it!";
        } else if (gameTimeSeconds < 20) {
            return "What a pity! Try again.";
        } else if (gameTimeSeconds < 25) {
            return "Very well, you are a real pro.";
        } else if (gameTimeSeconds < 30) {
            return "I know you have talent for this game.";
        } else if (gameTimeSeconds < 40) {
            return "I can't believe it, you are a game master.";
        } else {
            return "Oh my god, are you human?";
        }
    }
}

遊戲結束時顯示


public void onGameOver() {
    gameOver = true;
    String evaluation = GameEvaluator.getTimeEvaluation(gameTime);
    // 使用系統字體繪製多行文本 (或位圖字體)
    g.drawString(evaluation, 5, 22, Graphics.LEFT | Graphics.TOP);
    // 同時顯示最終用時
    fontBig.drawString(String.valueOf(gameTime), screenWidth/2 - 15, 10);
}

5. 系統整合:主循環調用鏈


public void gameLoop() {
    while (running) {
        long frameStart = System.currentTimeMillis();
        
        handleInput();
        updateGameLogic(); // 移動、碰撞、AI...
        
        // 計時系統
        if (!gameOver) {
            updateTimer();
            checkTimeRewards();
        }
        
        renderFrame(g);
        flushGraphics();
        
        // 幀率控制
        long elapsed = System.currentTimeMillis() - frameStart;
        long sleep = FRAME_DELAY - elapsed;
        if (sleep > 0) Thread.sleep(sleep);
    }
}

擴展與優化方向

維度擴展點
計時器毫秒級顯示、倒計時模式、網絡同步時間 (服務端權威)
獎勵動態間隔 (難度自適應)、多樣獎勵 (生命、護盾、分數倍率)、每日首次登錄獎勵
評價多維度評分 (時間、分數、連擊、無傷) → 綜合等級 S/A/B/C/D、排行榜上傳、分享圖生成
本地化評價文本外部化至資源包,支持多語言、文化適配

總結

「計時器 + 時間獎勵 + 通關評價」三位一體,構成了輕量級遊戲的核心節奏調節回路:

  • 計時器提供客觀壓力源,驅動玩家追求效率
  • 獎勵將時間壓力轉化為資源獲取機會,緩解挫敗感
  • 評價將單次遊戲結果轉化為社交貨幣,激發分享與重玩

代碼量極小 (核心 < 50 行),卻能顯著提升遊戲的「一局感」與留存動力,是休閒/動作類小遊戲的高性價比系統設計范例。

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