明確遊戲規則與操作邏輯:
美術資源:用 ACDSee 將網圖調整為 271×177 BMP,轉 PNG 格式。
項目劃分五大模塊:
| 模塊 | 職責 |
|---|---|
| Images | 圖片常量、資源管理 |
| Draw | 通用繪圖工具方法 |
| Map | 從外部文件讀取地圖數據至二維數組,繪製地圖 |
| Displayable1 | 繼承 Canvas,處理核心控制邏輯與輔助函數 |
| MIDlet1 | 應用入口,控制生命週期 |
byte Grid[][]:存儲地圖數據,第一維為垂直座標。read_map(int level):用 InputStream 讀取 /huarongroad/levelX 文件,填充 Grid,返回光標初始位置。draw_map(Graphics g):遍歷 Grid 調用 Draw.paint() 繪製。讀取文件採用 getClass().getResourceAsStream(),路徑相對 class 文件。手工編寫小地圖文本文件,大地圖需開發編輯器(後續介紹)。
package huarongroad;
import java.io.InputStream;
import javax.microedition.lcdui.*;
public class Map {
public byte Grid[][];
public Map() { Grid = new byte[Images.HEIGHT][Images.WIDTH]; }
public int[] read_map(int level) {
int[] cursor = new int[2];
try {
InputStream is = getClass().getResourceAsStream("/huarongroad/level"+level);
if (is != null) {
for (int k=0;k
Displayable1 核心邏輯:
level、loc[2]、SelectArea[4]、MoveArea[4]、selected、MyMap。keyPressed():用 getGameAction() 轉換鍵值,處理上下左右、Fire。paint():重繪背景、地圖、選擇框(黑/綠/紅畫筆切換)。setRange()/setMoveRange():設置選中/目標區域,利用地圖組合標記常量逆向解析尺寸。isInRange()/isInRange2():判斷點是否在選中/目標區域內。Move():三步移動——複製源區域、貼到目標區域、清理源區域殘留。win():判斷曹操是否到達目標位置。PrintGrid():打印地圖數組內容。方向鍵處理邏輯:未選中時移動光標調用 setRange();已選中時移動光標調用 setMoveRange(),不可移則回退。Fire 鍵:已選中則執行 Move()、檢查勝利;未選中且非空白則標記選中。