J2ME 缺乏 J2SE 的 java.util.Set,自行實作單鏈表版集合,用於記錄待消除方塊座標,保證唯一性。
public class kSet {
private kSetNode head;
public kSet() { head = null; }
public void clear() { head = null; }
public boolean add(int x, int y) { return add(new kSetNode(x, y)); }
public boolean add(kSetNode node) {
if (!contains(node)) { node.next = head; head = node; return true; }
return false;
}
public boolean isEmpty() { return head == null; }
public kSetNode getFirst() { kSetNode p = head; head = p.next; return p; }
public boolean contains(kSetNode node) {
for (kSetNode p = head; p != null; p = p.next)
if (p.equals(node)) return true;
return false;
}
static class kSetNode {
int x, y; kSetNode next;
kSetNode(int x, int y) { this.x = x; this.y = y; }
boolean equals(kSetNode o) { return o.x == x && o.y == y; }
int getX() { return x; } int getY() { return y; }
}
}
良好的工具類庫能大幅加速開發、降低 Bug 率。
問題:遊戲背景按特定解析度 (如 Moto T720 120x142) 設計,在大螢幕手機上會貼左上角,觀感極差。
解法:啟動時計算偏移量,所有繪圖座標加上偏移。
public class GameCanvas extends Canvas implements Runnable {
private final int addX, addY; // 校正偏移
private final int SCREEN_X, SCREEN_Y; // 遊戲區左上角
private final int WAIT_X, WAIT_Y; // 待消除區
private final int SCORE_X, SCORE_Y; // 分數區
private final int STAR_X, STAR_Y; // 星星等級顯示
public GameCanvas() {
int w = getWidth(), h = getHeight();
// 計算置中偏移 (遊戲設計尺寸 120x142)
addX = (w - 120) / 2;
addY = (h - 142) / 2;
SCREEN_X = addX + 48; SCREEN_Y = addY + 10;
WAIT_X = addX + 19; WAIT_Y = addY + 103;
SCORE_X = addX + 36; SCORE_Y = addY + 34;
STAR_X = addX + 4; STAR_Y = addY + 70;
}
// 繪圖時全部使用上述常數座標
}
注意:getHeight() 回傳的是扣除軟鍵列高度後的可繪製區高度,非螢幕物理高度。

圖 2/3:座標校正前後對比,體驗差異巨大。
J2ME Heap 極小 (百 KB 級),GC 不可靠,必須主動管理:
new,預先建立池複用。new Form/Canvas,雖有延遲但防 OOM。null,輔助 System.gc() 回收。策略:先做核心玩法跑通無洩漏,再逐步加功能,記憶體不足即砍功能。
for 迴圈空轉或 Thread.sleep),給玩家喘息反應時間。private void giveLevel() {
if (level <= 10) {
levelSleep = 600 - (level - 1) * 50; // 下落間隔遞減
if (levelSleep < 200) levelSleep = 200;
levelDelTask = 200 + (level - 1) * 100; // 過關任務量遞增
if (levelDelTask > 1000) levelDelTask = 1000;
paintStar(); // 繪製星星等級
} else {
gameWin(); // 全關通關
}
}
公式保證難度平滑上升,長期留存關鍵。
工具類複用、座標自適應、記憶體鐵律、節奏與視覺打磨,四大支柱構建商業級 J2ME 遊戲品質基石。