遊戲邏輯
- 隨機生成 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);
}
}
}
技術要點解析
| 技術點 | 說明 |
| 高級 UI 組件 | Form + TextField + Command + Alert,無需繪圖 |
| 單例 MIDlet | 靜態 instance 提供全局訪問,便於 Form 調用 quitApp |
| CommandListener | 統一處理軟鍵事件,符合 MIDP 事件模型 |
| Random | CLDC 1.1 標準 API,生成偽隨機數 |
| NUMERIC 輸入限制 | TextField.NUMERIC 自動彈出數字鍵盤,提升體驗 |
| Alert 自動消失 | setTimeout(3000) 3 秒後自動返回 Form |
擴展建議
- 增加嘗試次數限制與計分
- 持久化最高分(RMS)
- 音效反饋(參考動態加載聲音方案)
- 難度選擇:調整範圍 0-100/0-1000
- 單元測試:分離遊戲邏輯類,獨立測試
這是一個標準的「高級 UI + 簡單邏輯」J2ME 應用範例,適合初學者理解 MIDlet/Display/Command/Alert 協作流程。
- 上一篇文章: J2ME 開發中變相使用泛型與自動拆裝箱:JDK 1.5 編譯 + Ant 預驗證實戰
- 下一篇文章: J2ME RMS 混合數據類型讀寫實戰:DataOutputStream/DataInputStream 完整範例
Copyright ©
程式碼之家 All Rights Reserved