引入 History 類別封裝 Vector,每步記錄 5 元素位元組陣列:[x, y, width, height, direction]。關鍵點在於 addStep() 必須 新建陣列實例,避免同一引用被後續修改導致歷史數據污染(Java 參數傳遞為引用傳值)。
public class History {
private static Vector steps = new Vector();
public static void addStep(Object step) { steps.addElement(step); }
public static void removeLastStep() { steps.removeElement(steps.lastElement()); }
public static Object getLastStep() { return steps.lastElement(); }
// ... getStepAt, getSize, clear 略
}
移動結束時記錄:
byte[] step = new byte[5];
step[0] = this.SelectArea[0]; step[1] = this.SelectArea[1];
step[2] = this.SelectArea[2]; step[3] = this.SelectArea[3];
step[4] = this.getMoveDirection(); // 1上 2下 3左 4右
history.addStep(step);
悔棋邏輯 unMove():取出最後一步,反向恢復 SelectArea、MoveArea、光標位置 loc,並將棋盤數據 MyMap.Grid 回滾。最後交換 SelectArea 與 MoveArea,重置 selected=false 並 repaint()。MIDlet 層新增 CMD_UNDO 命令觸發 logic.unMove()。
原版需玩家先選取方塊再指定目標位置,操作繁瑣。新版引入 currentCursor、nextCursor 取代原有選取/移動區域,玩家只需將光標移至目標方塊,系統自動判斷該方塊可移動方向(上下左右)並直接執行移動。核心改進:
DIRECTION_UP/DOWN/LEFT/RIGHT。ControlLogic 建構子新增 gameLevel 參數,nbInit() 取代舊版 jbInit(),初始化流程更清晰。
