項目共五個類,前四類復用成熟代碼,重點實現 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。若報錯則修改調試。