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

J2ME 遊戲開發實戰講解(三):華容道核心代碼實現

     編輯:J2ME

六、編碼實現:Displayable1 完整代碼

項目共五個類,前四類復用成熟代碼,重點實現 Displayable1:

package huarongroad;
import javax.microedition.lcdui.*;

public class Displayable1 extends Canvas implements CommandListener {
    private int[] loc = new int[2];
    private int[] SelectArea = new int[4];
    private int[] MoveArea = new int[4];
    private Map MyMap = new Map();
    private boolean selected;
    private int level;

    public Displayable1() {
        try { jbInit(); } catch (Exception e) { e.printStackTrace(); }
    }
    private void Init_game() {
        loc = MyMap.read_map(level);
        SelectArea[0]=loc[0]; SelectArea[1]=loc[1]; SelectArea[2]=1; SelectArea[3]=1;
        MoveArea[0]=-1; MoveArea[1]=-1; MoveArea[2]=0; MoveArea[3]=0;
    }
    private void jbInit() throws Exception {
        selected=false; level=1; Images.init(); Init_game();
        setCommandListener(this); addCommand(new Command("Exit",Command.EXIT,1));
    }
    public void commandAction(Command c, Displayable d) {
        if (c.getCommandType()==Command.EXIT) MIDlet1.quitApp();
    }
    protected void paint(Graphics g) {
        try {
            g.drawImage(Images.image_Frame,0,0,Graphics.TOP|Graphics.LEFT);
            MyMap.draw_map(g);
            if (selected) g.setColor(0,255,0);
            g.drawRect(SelectArea[0]*Images.UNIT+Images.LEFT, SelectArea[1]*Images.UNIT+Images.TOP,
                       SelectArea[2]*Images.UNIT, SelectArea[3]*Images.UNIT);
            g.setColor(255,255,255);
            if (selected) {
                g.setColor(255,0,255);
                g.drawRect(MoveArea[0]*Images.UNIT+Images.LEFT, MoveArea[1]*Images.UNIT+Images.TOP,
                           MoveArea[2]*Images.UNIT, MoveArea[3]*Images.UNIT);
                g.setColor(255,255,255);
            }
        } catch (Exception ex) {}
        System.out.println(Runtime.getRuntime().freeMemory());
        System.out.println(Runtime.getRuntime().totalMemory());
    }
    private void setRange() {
        if (MyMap.Grid[loc[1]][loc[0]]==Images.DLEFT) loc[0]--;
        else if (MyMap.Grid[loc[1]][loc[0]]==Images.DUP) loc[1]--;
        else if (MyMap.Grid[loc[1]][loc[0]]==Images.DLEFTUP) { loc[0]--; loc[1]--; }
        SelectArea[0]=loc[0]; SelectArea[1]=loc[1];
        SelectArea[2] = (loc[0]+1=Images.HEIGHT || loc[0]+i>=Images.WIDTH ||
                    (!isInRange(loc[0]+i,loc[1]+j) && MyMap.Grid[loc[1]+j][loc[0]+i]!=Images.BLANK))
                    return false;
        MoveArea[0]=loc[0]; MoveArea[1]=loc[1];
        MoveArea[2]=SelectArea[2]; MoveArea[3]=SelectArea[3];
        return true;
    }
    private boolean isInRange(int x,int y) {
        return x>=SelectArea[0] && x=SelectArea[1] && y=MoveArea[0] && x=MoveArea[1] && y=0) { loc[1]--; setRange(); repaint(); } }
                else { if (loc[1]-1>=0) { loc[1]--; if(setMoveRange()) repaint(); else loc[1]++; } }
                break;
            case Canvas.DOWN:
                if (!selected) {
                    if (loc[1]+1=0) { loc[0]--; setRange(); repaint(); } }
                else { if (loc[0]-1>=0) { loc[0]--; if(setMoveRange()) repaint(); else loc[0]++; } }
                break;
            case Canvas.RIGHT:
                if (!selected) {
                    if (loc[0]+1

構建與運行

用 WTK 2.0 KToolbar 建立工程,放入源文件,點 Build 再 Run。若報錯則修改調試。

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