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

📄 mycanvas.java

📁 使用j2me编制的一款横板过关类游戏。简单而完整。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.microedition.lcdui.*;

import java.io.*;
import java.lang.*;
public class MyCanvas extends Canvas implements Runnable{
    public Image offScreen;
    public Graphics offg;
    
    public  int gameState=MENU;//游戏状态
	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;
	public  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;
	private static final int mainMenu=12;
	
    public Image imp;//人物图片
	public Image imbk;//背景图片
	public Image immap;//地图元素
	public Image imlife;//生命
	public Image imarrow[];//箭头
	public Image imenemy[];//敌人
	public Image imlifebottle;//血瓶
	public Image imbox;//宝箱
	public Image imGirl;//公主
	public Image imHeart;//心
	public Image imRole;//剧情主人公
	public Image imbk1;
	public Image imjq;
	
	public boolean fire=false;//是否射箭
	public int arrow[];
	public int ax,ay;//箭的位置
	public int pp=2;//箭的方向	
	
	public int px,py;//主角位置
	public int d=1;//主角方向
	public int life;//主角生命
	public int nowrow1,nowcol1;//主角脚下位置
	public int nowrow2,nowcol2;//主角前面的位置

	public int movex;//map[movex][movey]
	public int movey;
	public int dir=0;//键位控制的方向0stop 1left 2right 3up 4 down
	public int nowFrame=0;//当前帧
	public int moveFrame[][]={//主角图片移动图片索引
    		{0,1,2},//up
			{3,4,5},//right
			{6,7,8},//down
			{9,10,11},};//left
	

	public boolean jump=true;//控制是否执行下落的左右移动

	public int map[][];//地图元素
    public int nowCol=0;//当前需要渲染的起始行
	public int bkpx=0;//背景图片的位移
    public int mappx=0;//地图元素的移动
    public int jumpy=12;//跳跃y
    public int jumpx=0;//跳跃x
    
    public int canCro[]={41,42,86,394,408,396,395,5,396,145,146,147,
    		             197,374,444,414,384,157,218,159,376,407,408
    		             ,437,55,161,162,389,449,419,11,435,272};//ifdown判断
    public int canPro[]={0,297,295,296,298,444,447,352,353,354,413,412,
    		             262,292,322,263,237,323,324,294,264,175,176,177,
    		             178,205,206,207,208,235,236,237,238,265,266,267,
    		             268,382,383,411,441,471,410,440,470,445,449,419,389};//ifpass判断
    
	public MyCanvas()
    {
	  imarrow=new Image[2];
	  imenemy=new Image[2];
	  arrow=new int[3];
      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=Image.createImage("/walk.png");
	  immap=Image.createImage("/01.png");
	  imlife=Image.createImage("/life.png");
	  imarrow[0]=Image.createImage("/arrow.png");
	  imarrow[1]=Image.createImage("/arrow1.png");
	  imenemy[0]=Image.createImage("/enemy1.png");
	  imenemy[1]=Image.createImage("/enemy2.png");
	  imlifebottle=Image.createImage("/lifebottle.png");
	  imGirl=Image.createImage("/Noble.png");
	  imbox=Image.createImage("/box.png");
	  imHeart =Image.createImage("/xin.png");
	  imRole=Image.createImage("/Fighter.png");
	  imbk1=Image.createImage("/bk1.png");
	  imjq=Image.createImage("/Duke.png");
	  
	  }catch(Exception e){}
	  px=10;
	  py=10;
	  dir=4;
	  life=5;
	  }
	  map=null;
	  try{
	  InputStream is=this.getClass().getResourceAsStream("/map0"+n+".dat");//map01.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(){}
	int t=0;
	public void drawLoad(){
		if(t<=100)
		 {offg.drawImage(imjq,0,0,0);
		 t++;
		 }
		else 
		 this.gameState=GAME;
	}
	
	public void  drawBack(){//绘制背景
	 //offg.drawImage(imbk,bkpx-240,0,0);
	 offg.drawImage(imbk,bkpx,0,0);	
	 offg.drawImage(imbk,bkpx+240,0,0);
	 
	 Font f1=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE);
	 offg.setFont(f1);
	 offg.setColor(255,0,0);
	 offg.drawString("生命:",10,10,Graphics.LEFT|Graphics.TOP);
	 for(int i=0;i<life;i++)
	  offg.drawImage(imlife,20+30*(i+1),10,Graphics.LEFT|Graphics.TOP);
	
	}
	

	
	public void drawMap(){//绘制地图
		
		 for(int i=0;i<16;i++)
		 {for(int j=nowCol;j<16+nowCol;j++)
		  {
		 	//offg.setClip((j-nowCol)*16+mappx,i*16,16,16);
			// offg.setClip((j-nowCol)*16,i*16,16,16);
		 	if(map[i][j]>0)
		 	{
		 		movey = map[i][j]/30;
		 		movex = map[i][j]%30 - 1;
		 		if(movex < 0)
		 		{
		 			movey -= 1;
		 			movex = 29;
		 		}
		 		offg.setClip((j-nowCol)*16+mappx,i*16+32,16,16);
		 		offg.drawImage(immap,(j-nowCol)*16-movex*16 + mappx, i*16-movey*16+32,0);
		 	}
		  }
		 }
		 offg.setClip(0,0,240,289);
	}
	
	public void drawPlayer(){//绘制人物
		 
	  switch(dir)
	  {
	   case 1://left
		   d=3;break;
	   case 2://right
		   d=1;break;
	   case 5://right up
		   d=1;
		   break;
	   case 6://left up
		   d=3;
	       break;
	   case 0:
	   	   break;
	  }
	     offg.setClip(px,py,16,24);
	     int trueframe=moveFrame[d][nowFrame];
		 int movex=16*(trueframe);
		 offg.drawImage(imp,px-movex,py,0);
		 offg.setClip(0,0,240,289);
	}
	
	public void drawArrow(){//绘制箭
		if(fire)
		{
			offg.drawImage(imarrow[pp],ax,ay,0);

		}
			
	}
	
	
	int edir=0;//方向
	int er=11,ec=25;//敌人行列数
	int eframe=0;//帧数
	int move=150;//移动范围
	int ex,ey;//坐标
	int time=0;//死亡帧
	boolean enemydead=false;
	public void drawEnemy(){//绘制敌人
		 
		 if(!enemydead)
		  {
			 ex=ec*16-nowCol*16+mappx+move;
			 ey=er*16+5;
			 offg.setClip(ex,ey,48,48);
		     offg.drawImage(imenemy[0],ex-eframe*48,ey-48*edir,0);}
		 else
		  {
			 if(time!=3)
		       {offg.setClip(ex,ey+16,48,32);
		       offg.drawImage(imenemy[0],ex-eframe*48,ey-48*2+16,0);
		       time++;}
			 else
			 {
				 ex=ey=0;
			 }
		  }
		 offg.setClip(0,0,240,289);
	}
	
	boolean eat=false;
	boolean open=false;
	int bx,by;
	public void drawD(){//绘制宝箱和血瓶
		bx=44*16-nowCol*16+mappx;
		by=14*16;
		if(!open)
		{offg.setClip(bx,by,32,32);
		 offg.drawImage(imbox,bx,by,0);
		}
		else
		 {
			if(!eat)
			{
			 offg.drawImage(imlifebottle,bx,by,0);
			}
			else {bx=0;by=0;}
		 }
		offg.setClip(0,0,240,289);
			
	}
	
    public void	drawPause(){}
    
    public void drawPass(){
    	offg.drawString("YOU WIN!!!",80,144,Graphics.LEFT|Graphics.TOP);
    	this.gameState=GAMEWIN;
    }
    public void drawOver(){
    	Font f2=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE);
   	    offg.setFont(f2);
   	    offg.setColor(255,0,0);
    	offg.drawString("GAME OVER!",80,144,Graphics.LEFT|Graphics.TOP);
    }
    
    public int RoleFrame[]={8,9,10,11,10,9,8};
	//public int GirlFrame[]={0,1,2,3,2,3,1};
	public int ppx=0;
	public int ppy=130;
	public int RoleNow=0;
	public boolean isrun=false;
	public int isflash=3;
    public void drawWin(){
        offg.drawImage(imbk1,0,0,0);
		if(isrun&&isflash> 6)
		{
			offg.drawImage(imHeart,106,57,0);
		}
		isflash--;
		offg.setClip(122,130,32,48);
		offg.drawImage(imGirl,122,82,0);
		offg.setClip(ppx,ppy,32,48);
		
		int RoleTrue=RoleFrame[RoleNow];
		int movex=32*(RoleTrue%4);
		offg.drawImage(imRole,ppx-movex,ppy-96,0);
		if(isflash==0)
		{
			isflash=18;
		}
		offg.setClip(0,0,240,289);
    }
    
    
	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();//绘制背景

⌨️ 快捷键说明

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