首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 遊戲開發實戰講解(二):華容道需求與概要設計

     編輯:J2ME

三、需求分析

明確遊戲規則與操作邏輯:

  • 角色:曹操、關羽、張飛、趙雲、黃忠、馬超、卒(7 種棋子)。
  • 操作流程:
    1. 方向鍵選擇區域 → 黑框高亮
    2. Fire 鍵確認選中 → 綠框高亮
    3. 方向鍵選擇目標區域 → 紅框高亮
    4. Fire 鍵執行移動 → 清除綠/紅框
  • 核心概念區分:選擇區域、選中區域、要移動區域、要移動到區域。
  • 暫不實現:過關動畫、關卡切換、暫停存檔。

美術資源:用 ACDSee 將網圖調整為 271×177 BMP,轉 PNG 格式。

四、概要設計

項目劃分五大模塊:

模塊職責
Images圖片常量、資源管理
Draw通用繪圖工具方法
Map從外部文件讀取地圖數據至二維數組,繪製地圖
Displayable1繼承 Canvas,處理核心控制邏輯與輔助函數
MIDlet1應用入口,控制生命週期

Map 類設計重點

  • byte Grid[][]:存儲地圖數據,第一維為垂直座標。
  • read_map(int level):用 InputStream 讀取 /huarongroad/levelX 文件,填充 Grid,返回光標初始位置。
  • draw_map(Graphics g):遍歷 Grid 調用 Draw.paint() 繪製。

讀取文件採用 getClass().getResourceAsStream(),路徑相對 class 文件。手工編寫小地圖文本文件,大地圖需開發編輯器(後續介紹)。

Map 類代碼

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()、檢查勝利;未選中且非空白則標記選中。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved