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

J2ME 遊戲開發入門:Hero 玩家飛機模型的創建與邊界約束

     編輯:J2ME

設計目標

實現玩家飛機(Hero)的創建、四向移動、螢幕邊界約束,遵循「單一職責、解耦」原則,不在 Hero 內處理子彈發射、敵機管理等邏輯。

類結構設計

  • Fairy:遊戲精靈基類,封裝圖片、座標、繪製、移動通用邏輯。
  • Hero extends Fairy:玩家飛機,單例模式(createHero()),提供 moveLeft/Right/Up/Down()。
  • Resources:資源常量類,FLY 索引對應飛機圖片。
  • Platform:螢幕尺寸常量 WIDTH、HEIGHT。

核心代碼

public class Hero extends Fairy {
    private static Hero hero;
    private static final Log log = Log.getLog("Hero");

    private Hero(int x, int y) {
        super(Resources.FLY, x, y); // 傳入圖片索引、初始座標
    }

    /** 單例工廠 */
    public final static Hero createHero(int x, int y) {
        if (hero == null) hero = new Hero(x, y);
        return hero;
    }

    /** 向左移動,左邊界保留 16 像素 */
    public final void moveLeft() {
        if (getX() >= 16) move(-8, 0);
    }

    /** 向右移動,右邊界預留 16 像素 */
    public final void moveRight() {
        if (getX() <= Platform.WIDTH - 16) move(8, 0);
    }

    /** 向上移動,頂部保留 8 像素 */
    public final void moveUp() {
        if (getY() >= 8) move(0, -8);
    }

    /** 向下移動,底部預留 38 像素(狀態欄/操作區) */
    public final void moveDown() {
        if (getY() <= Platform.HEIGHT - 38) move(0, 8);
    }
}

基類 Fairy 關鍵方法(補充)

public abstract class Fairy {
    protected int x, y;
    protected Image img;

    public Fairy(int resId, int x, int y) {
        this.img = ResourceManager.getImage(resId);
        this.x = x; this.y = y;
    }

    public void move(int dx, int dy) { x += dx; y += dy; }
    public int getX() { return x; }
    public int getY() { return y; }

    public void paint(Graphics g) {
        g.drawImage(img, x, y, Graphics.TOP | Graphics.LEFT);
    }
}

使用場景

// 遊戲初始化
Hero hero = Hero.createHero(Platform.WIDTH/2, Platform.HEIGHT - 50);

// 按鍵處理
protected void keyPressed(int keyCode) {
    switch (KeyCodeAdapter.getInstance().adoptKeyCode(keyCode)) {
        case KeyCodeAdapter.LEFT_KEY:  hero.moveLeft();  break;
        case KeyCodeAdapter.RIGHT_KEY: hero.moveRight(); break;
        case KeyCodeAdapter.UP_KEY:    hero.moveUp();    break;
        case KeyCodeAdapter.DOWN_KEY:  hero.moveDown();  break;
    }
    repaint();
}

設計亮點

  1. 單例模式:全局唯一玩家對象,避免多實例狀態不一致。
  2. final 方法:禁止子類覆寫移動邏輯,保證邊界約束生效。
  3. 邊界常量化:16、8、38 等魔術數字應提煉為 Hero.MARGIN_LEFT 等常量,便於適配不同分辨率。
  4. 解耦:Hero 僅負責「自身狀態與約束」,子彈發射交由 BulletManager、敵機由 FoeManager 處理,符合高內聚低耦合。

擴展建議

  • 加入無敵閃爍、護盾、多形態圖片切換狀態機。
  • 移動步長(8px)可提取為屬性,支援加速道具。
  • 引入碰撞箱 getCollisionRect(),精準碰撞檢測。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved