⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecanvas.java

📁 my华容道
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -