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

📄 mycanvas.java

📁 一个不错J2ME飞行类射击模型有说明还不很完善
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import java.io.*;
public class myCanvas extends Canvas implements Runnable{
    public Image offScreen;
    public Graphics offg;
    public  int gameState=GAME;//游戏状态
	private static final int MENU=1;
	private  static final int menuState=2;
	private  static final int helpMenu=3;
	private  static final int aboutMenu=4;
	private  static final int optionMenu=5;
	private  static final int LOAD=6;
	private  static final int GAME=7;
	private  static final int PAUSE=8;
	private  static final int PassLevel=9;
	private  static final int GAMEOVER=10;
	private  static final int  GAMEWIN=11;
    public Image imp[];//人物图片
	public Image imbk;//背景图片
	public Image immap;//地图元素
	public int bkpx=0;
	public int px,py;
	public int nowFrame=0;
	public int dir=0;//0stop 1left 2right 3up 4 down
	private static final int mainMenu=12;
	public int map[][];
    public int nowCol=0;
    public int mappx=0;
    public int jump=12;
    public int canCro[]={13,17};
	public myCanvas()
    {
      offScreen=Image.createImage(240,289);
      offg=offScreen.getGraphics();
      initLevel(1);
      (new Thread(this)).start();
    }
	//加载本关数据
	public void initLevel(int n)
	{
	  imbk=null;
	  imp=null;
	  immap=null;
	  if(n==1)
	  {
	  try{
	  imbk=Image.createImage("/bk.png");
	  imp=new Image[3];
	  imp[0]=Image.createImage("/p1.png");
	  imp[1]=Image.createImage("/p2.png");
	  imp[2]=Image.createImage("/p3.png");
	  immap=Image.createImage("/icons1.png");
	  }catch(Exception e){}
	  px=30;
	  py=100;
	  dir=4;
	  }
	  map=null;
	  try{
	  InputStream is=this.getClass().getResourceAsStream("/map0"+n+".dat");
	  DataInputStream dis=new DataInputStream(is);
	  int row=dis.readInt();
	  int col=dis.readInt();
	  
	  map=new int[row][col];
	  for(int i=0;i<row;i++)
	  {for(int j=0;j<col;j++)
	   {
	  	map[i][j]=dis.readInt();
	   }
	  }
	  dis.close();
	  is.close();
	  }catch(Exception e){}
	}
	
	public void paint(Graphics g)
	{
	  g.drawImage(offScreen,0,0,0);
	}
	public void drawMainMenu(){}
	public void drawHelp(){}
	public void drawAbout(){}
	public void drawOption(){}
	public void drawLoad(){}
	public void  drawBack(){
	 offg.drawImage(imbk,bkpx-240,0,0);
	 offg.drawImage(imbk,bkpx,0,0);	
	 offg.drawImage(imbk,bkpx+240,0,0);
	
	}//绘制背景
	int movex;
	public void drawMap(){
		
	 for(int i=0;i<18;i++)
	 {for(int j=nowCol;j<16+nowCol;j++)
	  {
	 	offg.setClip((j-nowCol)*16+mappx,i*16,16,16);
	 	if(map[i][j]>0)
	 	{movex=(map[i][j]-1)*16;
	 	offg.drawImage(immap,(j-nowCol)*16-movex+mappx,i*16,0);
	 	}
	  }
	 }
	 offg.setClip(0,0,240,289);
	}//绘制地图
	public void drawPlayer(){
	  
	  switch(dir)
	  {
	   case 1:
	   case 2:
	   case 3://up
	   case 4://down
	       offg.drawImage(imp[nowFrame],px,py,0);
	       break;
	   case 0:
	   	   offg.drawImage(imp[0],px,py,0);
	  }
	}//绘制人物
	public void drawBullet(){}//绘制子弹;
	public void drawD(){}//绘制道具
    public void	drawPause(){}
    public void drawPass(){}
    public void drawOver(){}
    public void drawWin(){}
	public void run()
	{ long starttime=0;
	  long passtime=0;
	 while(true)
	 {starttime=System.currentTimeMillis();
	  //图形绘制
		switch(gameState)
		{
		case MENU://菜单状态
			switch(menuState)
			{case mainMenu://绘制主菜单
				 drawMainMenu();break;
			 case helpMenu://绘制帮助画面
			 	 drawHelp(); break;
			 case aboutMenu://游戏关于画面
			 	 drawAbout();break;
			 case optionMenu://游戏选项画面
			 	 drawOption();break;
			}
		 break;
		case LOAD://游戏载入状态
			drawLoad();break;
		case GAME://游戏状态
		    drawBack();//绘制背景
			drawMap();//绘制地图
			drawPlayer();//绘制人物
			drawBullet();//绘制子弹;
			drawD();//绘制道具
			break;
		case PAUSE://暂停状态
			drawPause();break;
		case PassLevel://绘制过关
			drawPass();break;
		case GAMEOVER: //绘制游戏结束
			drawOver();break;
		case GAMEWIN://绘制游戏胜利
			drawWin();break;
		}
	   //游戏逻辑
		switch(gameState)
		{case GAME:
		  if(dir==1){
		   nowFrame=(nowFrame+1)%3;	
		   px-=8;
		   bkpx+=2;
		   if(bkpx>240){bkpx=0;}
		  }
		  if(dir==2){
		   nowFrame=(nowFrame+1)%3;	
		   bkpx-=2;//背景滚动
		   
		   if(px<240/2)
		   { //滚动人物
		   px+=8;
		   }
		   else
		   { //滚动背景
		    if(nowCol<94)
		    {
		    if(bkpx<-240){bkpx=0;}
		    mappx-=4;
		    if(mappx<=-16){
		   	  nowCol++;
		   	  mappx=0;
		   	}
		    }else
		    {//滚动人物
		    	 if(px<=240-22)
		    	 {
		    	 	 px+=8;
		    	 }
		    }
		   }
		   if(!checkDown())
		   {
		   	 dir=4;
		   }
		  }
		  else if(dir==3)
		  {
		    py-=jump;
		    jump-=2;
		    if(jump<=0){jump=0;
		     dir=4;
		    }
		  
		  }else if(dir==4)
		  { 
		  	py+=jump;
		  	jump+=2;
		  	if(jump>12){jump=12;
		  	//dir=0;
		  	}
		  	if(checkDown()){
		  	   jump=12;
		  	   dir=0;
		  	   py=(py+24)/16*16-24;

		  	}
		  	
		  }
		
		}
	  //控制FPS
	  passtime=System.currentTimeMillis()-starttime;
	  if(100-passtime>=0)
	  try{Thread.sleep(100-passtime);}catch(Exception e){}
	  this.repaint();
	  this.serviceRepaints();
		
	 }	
	
	}
	int nowrow,nowcol;
	public boolean checkDown(){
		nowrow=(py+24)/16;
	    nowcol=(px+11-mappx)/16+nowCol;
	    boolean can=false;
	    System.out.println(" map[r][c]"+map[nowrow][nowcol]);
	    System.out.println(" [r]"+nowrow);
	    System.out.println(" [c]"+nowcol);
	    for(int i=0;i<canCro.length;i++)
	    {System.out.println(" value:"+canCro[i]);
	    System.out.println(" map[r][c]"+map[nowrow][nowcol]);
	    if(map[nowrow][nowcol]==canCro[i])
	    {    
	     return true;
	    }
	    }
	    return false;
	 }
	
	public void keyPressed(int n)
	{ int k=this.getGameAction(n);
	 switch(k)
	 {case LEFT:
	 	if(dir!=3&&dir!=4) dir=1;break;
	  case RIGHT:
	  	if(dir!=3&&dir!=4) dir=2;break;
	  case UP:
	  	  if(dir!=3&&dir!=4)dir=3;break;
	 
	 }
		}
	public void keyReleased(int n)
	{ 
		 int k=this.getGameAction(n);
		 switch(k)
		 {case LEFT:
		 	if(dir!=3&&dir!=4) dir=0;break;
		  case RIGHT:
		  	if(dir!=3&&dir!=4) dir=0;break;
		 
		 }
		
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -