本文透過一個簡單的 MIDlet 遊戲範例,介紹 MIDP 形編程基礎,幫助開發者理解核心概念,為開發複雜移動遊戲打下基礎。
MIDP(Mobile Information Device Profile)定義了一套運行於 MIDP 容器中 MIDlet 應用的 API,建立在 CLDC(Connected Limited Device Configuration)之上。MIDP UI API 非基於 AWT,專為螢幕小、鍵盤少的手機、傳呼機等移動設備設計。開發者僅能使用 MIDP 或 CLDC 提供的 API。
MIDP 核心抽象是 螢幕,採用 面向螢幕 設計:Screen 類封裝設備特定圖形與用戶交互,所有 UI 組件位於螢幕上,一次僅顯示一個螢幕,由螢幕處理所有 UI 事件,僅將高級事件傳給應用。此設計應對移動設備螢幕、鍵盤極度碎片化的現實。圖 1 展示基於螢幕的 MIDP UI 範例。

Form、List、TextBox、TextField、Alert、Ticker 等,可適配設備特性(圖像、文本、輸入域、單選鈕),提高跨設備移植性,使用設備原生外觀。Canvas 類,允許開發者繪製任意圖形(線、弧、矩形、文字、位圖等),直接控制顯示內容,但需自行確保不同設備(尺寸、鍵盤、色彩)上的可移植性。大多數遊戲 MIDlet 採用 Canvas 作為主圖形界面。所有 MIDP UI 類均屬 javax.microedition.lcdui 包。
List、TextBox,用戶不可添加額外組件。例:九宮格遊戲用 ChoosePieceScreen(繼承 List)讓玩家選棋子。List,但允許添加圖像、只讀文本、可編輯文本/數據域、標尺、選項組等條目,條目可動態增刪。Canvas(畫布)配合 Graphics、Image 類,提供極大繪圖靈活性,可繪製各類圖形元素。遊戲主界面多基於 Canvas 實現。
MIDlet 通常包含多個螢幕,一次僅顯示一個。良好結構設計對螢幕切換至關重要。代碼片段 1 展示螢幕切換邏輯:
class MyMIDlet extends MIDlet {
private FirstScreen firstScreen;
private SecondScreen secondScreen;
public void startApp() {
Displayable current = Display.getDisplay(this).getCurrent();
if (current == null) {
firstScreen = new FirstScreen(this, ...);
Display.getDisplay(this).setCurrent(firstScreen);
} else {
Display.getDisplay(this).setCurrent(current);
}
}
// FirstScreen 回調切換到下一個螢幕
public void firstScreenDone() {
secondScreen = new SecondScreen(this, ...);
Display.getDisplay(this).setCurrent(secondScreen);
}
// SecondScreen 回調終止應用
public void secondScreenQuit() {
destroyApp(false);
notifyDestroyed();
}
}
代碼片段 2 展示帶 MIDlet 回調的 FirstScreen:
class FirstScreen extends Form implements CommandListener {
private MyMIDlet midlet;
public FirstScreen(MyMIDlet midlet) { this.midlet = midlet; ... }
public void commandAction(Command c) {
if (c == cmdQuit) { midlet.firstScreenDone(); }
}
}
Canvas、Graphics)給予開發者更大控制權,但需自行處理不同設備特性(如用 getWidth()、getHeight() 適配畫布尺寸)。後續範例將涵蓋:高級 API 應用、低級 API 繪圖、多尺寸設備移植、鍵盤代碼與遊戲動作映射。