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

J2ME 高級 UI 實戰:猜數字遊戲完整源碼解析

     編輯:J2ME

遊戲邏輯

  • 隨機生成 0-50 之間整數
  • 用戶輸入數字,提示「大了」/「小了」/「佩服佩服」
  • 支援退出功能

架構設計

  • CaiMIDlet:MIDlet 生命週期管理,持有單例引用,統一退出入口
  • CaiForm:繼承 Form,實現 CommandListener,封裝所有 UI 與遊戲邏輯

核心代碼

CaiMIDlet.java

package caichuzi;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class CaiMIDlet extends MIDlet {
    static CaiMIDlet instance;
    CaiForm displayable = new CaiForm(this);

    public CaiMIDlet() { instance = this; }

    public void startApp() {
        Display.getDisplay(this).setCurrent(displayable);
    }
    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}

    public static void quitApp() {
        instance.destroyApp(true);
        instance.notifyDestroyed();
        instance = null;
    }
}

CaiForm.java

package caichuzi;
import javax.microedition.lcdui.*;
import java.util.*;

public class CaiForm extends Form implements CommandListener {
    private CaiMIDlet caiMIDlet;
    private Command cmdCommit, cmdExit;
    private TextField tfNumber;
    private Random rd;
    private int randomNumber;
    private boolean firstRun = true;

    public CaiForm(CaiMIDlet midlet) {
        super("猜數字");
        this.caiMIDlet = midlet;
        tfNumber = new TextField("請輸入0-50之間的數字", "", 25, TextField.NUMERIC);
        cmdCommit = new Command("提交", Command.OK, 1);
        cmdExit = new Command("退出", Command.EXIT, 1);
        append(tfNumber);
        addCommand(cmdCommit);
        addCommand(cmdExit);
        rd = new Random();
        randomNumber = rd.nextInt(50); // 0-49
        setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        if (c == cmdExit) {
            CaiMIDlet.quitApp();
            return;
        }
        if (c == cmdCommit) {
            String input = tfNumber.getString();
            if (input == null || input.length() == 0) return;
            int guess = Integer.parseInt(input);
            Alert alert = new Alert("猜數字", "", null, AlertType.INFO);
            alert.setTimeout(3000);
            if (guess > randomNumber) alert.setString("大了,笨蛋!");
            else if (guess < randomNumber) alert.setString("小了,笨蛋!");
            else alert.setString("佩服佩服!");
            Display.getDisplay(caiMIDlet).setCurrent(alert);
        }
    }
}

技術要點解析

擴展建議

  • 增加嘗試次數限制與計分
  • 持久化最高分(RMS)
  • 音效反饋(參考動態加載聲音方案)
  • 難度選擇:調整範圍 0-100/0-1000
  • 單元測試:分離遊戲邏輯類,獨立測試

這是一個標準的「高級 UI + 簡單邏輯」J2ME 應用範例,適合初學者理解 MIDlet/Display/Command/Alert 協作流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
技術點說明
高級 UI 組件Form + TextField + Command + Alert,無需繪圖
單例 MIDlet靜態 instance 提供全局訪問,便於 Form 調用 quitApp
CommandListener統一處理軟鍵事件,符合 MIDP 事件模型
RandomCLDC 1.1 標準 API,生成偽隨機數
NUMERIC 輸入限制TextField.NUMERIC 自動彈出數字鍵盤,提升體驗
Alert 自動消失setTimeout(3000) 3 秒後自動返回 Form