📄 gamecanvas.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Image;
import java.io.IOException;
public class GameCanvas extends Canvas implements CommandListener
{
public static final int UNIT = 50; //方块的单位长度
public static final int LEFT = 10; //画图的左边界顶点
public static final int TOP = 9; //画图的上边界顶点
public static final int WIDTH = 4; //地图的宽度
public static final int HEIGHT = 5; //地图的高度
public static final int up=1;
public static final int down=2;
public static final int left=3;
public static final int right=4;
public int steps; //记录步数
private int num;
private int orient; //记录移动方向
private Draw draw;
private boolean selected; //区域是否选中标志
private Font f;
private Command cmd_Back;
private Command cmd_Reset;
private int[] selectArea=new int[4];
private int[] moveArea=new int[4];
private int[] loc = new int[2]; //光标的当前位置
public GameCanvas(int imageNum)
{
num=imageNum;
cmd_Back=new Command("Back",Command.BACK,1);
cmd_Reset=new Command("Reset",Command.SCREEN,1);
addCommand(cmd_Back);
addCommand(cmd_Reset);
setCommandListener(this);
try {
Init();
}catch (Exception e) {
e.printStackTrace();
}
}
public void Init() //变量初始化
{
if(num==0||num==2||num==4)
{loc[0]=1;loc[1]=4;}
else if(num==1)
{loc[0]=2;loc[1]=4;}
else {loc[0]=0;loc[1]=4;}
selectArea[0]=loc[0];
selectArea[1]=loc[1];
selectArea[2]=1;
selectArea[3]=1;
moveArea[0]=-1;
moveArea[1]=-1;
moveArea[2]=1;
moveArea[3]=1;
selected=false;
steps=0;
orient=0;
f=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE);
Image[] images = new Image[16];
images[0]=null;
for(int i=0; i<=15; i++) {
try {
images[i] = Image.createImage("/huarongroad/" + i + ".png");
}
catch(IOException ioe) {
images[i] = null;
}
}
draw=new Draw(images,num,loc[0],loc[1]);
}
public void commandAction(Command c,Displayable d)
{
if(c==cmd_Reset)
reset();
else if(c==cmd_Back)
HuaRongroad.setCurrent(new SelectScreen());
}
protected void paint(Graphics g) { //画图函数,用于绘制用户画面
try {
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight()); //清屏
g.setColor(0,0,0); //画外边框
g.drawRect(LEFT - 1,TOP - 1,4 * UNIT + 1 ,5 * UNIT + 1);
g.setFont(f);
g.drawString("步数:",UNIT + LEFT,5 * UNIT + TOP, Graphics.TOP | Graphics.LEFT);
g.drawString(Integer.toString(steps), 2 * UNIT + LEFT , 5 * UNIT + TOP , Graphics.TOP|Graphics.RIGHT);
for (int i = 0; i <HEIGHT; i++) { //显示图片
for (int j = 0; j <WIDTH; j++){
Image image=draw.getImage(i,j);
if(image!=null){
g.drawImage(image, LEFT + j * UNIT,TOP + i * UNIT,Graphics.TOP | Graphics.LEFT);
}
}
}
if(selected==false)
{
g.setColor(0,255,0); //选择区域用绿色画笔
g.drawRect(selectArea[0] * UNIT + LEFT,selectArea[1] * UNIT + TOP,selectArea[2] * UNIT,
selectArea[3] * UNIT);
}
else {
g.setColor(255,0,0); //选中区域用红色画笔
g.drawRect(selectArea[0] * UNIT + LEFT,selectArea[1] * UNIT + TOP,selectArea[2] * UNIT,
selectArea[3] * UNIT);
g.drawRect(moveArea[0] * UNIT + LEFT,moveArea[1] * UNIT + TOP,moveArea[2] * UNIT,
moveArea[3] * UNIT);
}
if(win())
{
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight()); //清屏
g.setColor(255,0,0); //显示成功画面
g.setFont(f);
g.drawString("恭喜你!成功了!",UNIT,getHeight()/2, Graphics.TOP | Graphics.LEFT);
g.drawString("所用步数为:",UNIT,getHeight()/2 + 20, Graphics.TOP | Graphics.LEFT);
g.drawString(Integer.toString(steps), 2 * UNIT , getHeight()/2 + UNIT , Graphics.TOP|Graphics.RIGHT);
}
}catch (Exception ex) {}
} //end paint
public void reset() //重新开始
{
Init();
repaint();
}
private void set1(int i) //选择区域设置
{
if(i==1)
{
selectArea[2]=2;
selectArea[3]=2;
}
else if(i==2)
{
selectArea[2]=2;
selectArea[3]=1;
}
else if(i==3)
{
selectArea[2]=1;
selectArea[3]=2;
}
else {
selectArea[2]=1;
selectArea[3]=1;
}
}
private void selectMethod(int x,int y) //选择区域选择框画法
{
int loc;
loc=draw.current[y][x];
switch(loc){
case 1: selectArea[0]=x;
selectArea[1]=y;
set1(1);
break;
case 5:
case 7:
case 9:
case 11: selectArea[0]=x;
selectArea[1]=y;
set1(3);
break;
case 2: selectArea[0]=x-1;
selectArea[1]=y;
set1(1);
this.loc[0]=x-1;
this.loc[1]=y;
break;
case 3: selectArea[0]=x;
selectArea[1]=y-1;
set1(1);
this.loc[0]=x;
this.loc[1]=y-1;
break;
case 4: selectArea[0]=x-1;
selectArea[1]=y-1;
set1(1);
this.loc[0]=x-1;
this.loc[1]=y-1;
break;
case 6:
case 8:
case 10:
case 12: selectArea[0]=x;
selectArea[1]=y-1;
set1(3);
this.loc[0]=x;
this.loc[1]=y-1;
break;
case 13: selectArea[0]=x;
selectArea[1]=y;
set1(2);
break;
case 14: selectArea[0]=x-1;
selectArea[1]=y;
set1(2);
this.loc[0]=x-1;
this.loc[1]=y;
break;
case 0:
case 15: selectArea[0]=x;
selectArea[1]=y;
set1(4);
break;
default: break;
} repaint();
}
private void set2(int i) //选中区域设置
{
if(i==1)
{
moveArea[2]=2;
moveArea[3]=2;
}
else if(i==2)
{
moveArea[2]=2;
moveArea[3]=1;
}
else if(i==3)
{
moveArea[2]=1;
moveArea[3]=2;
}
else if(i==4){
moveArea[2]=1;
moveArea[3]=1;
}
}
private void moveMethod(int x,int y) //选中区域选择框画法
{
int loc;
loc=draw.current[y][x];
switch(loc){
case 1: moveArea[0]=x;
moveArea[1]=y;
set2(1);
break;
case 5:
case 7:
case 9:
case 11: moveArea[0]=x;
moveArea[1]=y;
set2(3);
break;
case 2: moveArea[0]=x-1;
moveArea[1]=y;
set2(1);
this.loc[0]=x-1;
this.loc[1]=y;
break;
case 3: moveArea[0]=x;
moveArea[1]=y-1;
set2(1);
this.loc[0]=x;
this.loc[1]=y-1;
break;
case 4: moveArea[0]=x-1;
moveArea[1]=y-1;
set1(2);
this.loc[0]=x-1;
this.loc[1]=y-1;
break;
case 6:
case 8:
case 10:
case 12: moveArea[0]=x;
moveArea[1]=y-1;
set2(3);
this.loc[0]=x;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -