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

📄 mycanvas.java

📁 使用j2me编制的一款横板过关类游戏。简单而完整。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			drawMap();//绘制地图
			drawPlayer();//绘制人物
			drawArrow();//绘制箭;
			drawD();//绘制道具
			drawEnemy();//绘制敌人
			break;
		case PAUSE://暂停状态
			drawPause();break;
		case PassLevel://绘制过关
			drawPass();break;
		case GAMEOVER: //绘制游戏结束
			drawOver();break;
		case GAMEWIN://绘制游戏胜利
			drawWin();break;
		}
	   //游戏逻辑
		switch(gameState)
		{case GAME:
		  {
			//宝箱
			if(bx-px-16<=7&&bx-px-16>=-7&&by-py<=8)
				open=true;
			if(!eat&&open&&bx-px-16<=2&&bx-px-16>=-2&&by-py<=8)
				{eat=true;
				if(life!=6)
				  life++;}
				
				
			//敌人
			if((ax+34-ex)>=5&&(ax+34-ex<=8)&&Math.abs(ay-ey)<=32)
			{
				enemydead=true;
				edir=2;
			}
			if(edir==0)
			  {move-=3;
			  if(move<=0)
				  edir=1;
			  }
			if(edir==1)
			{move+=3;
			 if(move>=90)
				 edir=0;		  
			}
			
			eframe++;
			if(eframe>2)
				eframe=0;
			
			//箭
			if(pp==1)
			{ax-=4;
			 if(map[(ay)/16-2][(ax-mappx)/16+nowCol]!=0||(ax==ex+48&&Math.abs(ay-ey)<=32)||ax<=0)
		       {fire=false;pp=2;ax=0;ay=0;}
			  }
			if(pp==0)
			{ax+=4;
			 if(map[ay/16-2][(ax-mappx+34)/16+nowCol]!=0||((ax+34-ex)>=5&&(ax+34-ex<=8)&&Math.abs(ay-ey)<=32)||ax+34>=240)
			 { fire=false;pp=2;ax=0;ay=0;}
			}
			  //System.out.println("arrowX :"+(ay+7)/16);
		       //System.out.println("arrowY :"+((ax-mappx)/16-1+nowCol));
			
			
			//主角
			if(dir==6)//左上
			{
			  nowFrame=(nowFrame+1)%3;
			  if(checkPro(1,0))
			  {
			  jumpx=2;//下落过程中要算上左右的移动
			  py-=jumpy;
			  px-=jumpx;
			  jumpy-=2;
	     	  if(jumpy<=0){jumpy=0;
				  dir=4;
				  jumpx=-jumpx;}
			}
			  else dir=4;}
	     	  
			if(dir==5)//右上
			{
			  nowFrame=(nowFrame+1)%3;
			  if(checkPro(1,1))
			  { 			 
			  py-=jumpy;
			  jumpy-=2;
	     	  if(jumpy<=0){jumpy=0;
				  dir=4;}
	     	  if(px>=240/2)//如果在屏幕中心右边就滚动地图
			   { 
	     		
			   if(nowCol<59)
			   {
				   bkpx-=2;//背景滚动 
			    if(bkpx<-240){bkpx=0;}
			    mappx-=4;
			    if(mappx<=-16){
			   	  nowCol++;
			   	  mappx=0;
			      }
		       }
			   else 
		     	 {
		     		 jumpx=2;
		     		 px+=jumpx;
		     	 }
		      }
	     	 else //如果在左边就执行跳跃的左右移动
	     	 {
	     		 jumpx=2;
	     		 px+=jumpx;
	     		 if(px>240/2)//让主角总在屏幕的中心
	     			 px=240/2;
	     	 }
			  }
			  else
				  dir=3;
			}
			
		    if(dir==1)//左
		    {
		      nowFrame=(nowFrame+1)%3;	
		      if(checkPro(0,0))
		      {px-=8;
		      if(px<0)
			    px=0;
		      if(bkpx>240){bkpx=0;}
		    }
		      if(!checkDown())
		      {
		   	    dir=4;
		      }
		      }
		    
		    if(dir==2)//右
		    {
		     System.out.println(nowCol);
		     nowFrame=(nowFrame+1)%3;
			if(checkPro(0,1))
			{
			 if(px<240/2)//如果在屏幕中心左边就只滚动人物
			  {px+=8;}
			 else
			  { //滚动背景
				
			   if(nowCol<59)
			   {
				 bkpx-=2;//背景滚动
			    if(bkpx<-240){bkpx=0;}
			    mappx-=4;
			    if(mappx<=-16){
			   	  nowCol++;
			   	  mappx=0;
			      }
		       }else
		        {//滚动人物
		    	  if(px<=240-32&&checkPro(0,1))
		    	   {
		    	 	 px+=8; 
					 if(px>=240-32)
						px=240-32;
		    	   }
		         }
		      }
		      if(!checkDown())
		      {
		   	    dir=4;
		      }
		    }
		    }
		    
		    
		    
		  if(dir==3)//上
		  {
		    py-=jumpy;
		    jumpy-=2;
		    if(jumpy<=0){jumpy=0;
		     dir=4;
		     jump=false;//这是不执行下落时的左右移动
		    }
		  
		  }
		  
		  if(dir==4)//下
		  { 
			px+=jumpx;
		  	py+=jumpy;
		  	jumpy+=2;
		  	if(jumpy>12){jumpy=12;jumpx=0;
		  	//dir=0;
		  	}
		  	if(checkDown()){
		  	   jumpy=12;
		  	   dir=0;
		  	   py=(py+24)/16*16-24;
		  	   jumpx=0;
		  	   jump=true;
		  	   }
		  	
		  	if(px>=240/2&&jump&&dir!=0)//如果在屏幕中心右边就滚动地图
			  { 
			   if(nowCol<59)
			   {
			    if(bkpx<-240){bkpx=0;}
			    mappx-=2;
			    if(mappx<=-16){
			   	  nowCol++;
			   	  mappx=0;}
		       }
		      }
		  }
		  if(py>=289||life==0)
			  this.gameState=GAMEOVER;
		  //碰撞检测
		  if((ex-px<=1&&ex-px>=0)||(px-ex<=30&&px-ex>=0))
			  if(ey-py<=24)
				  life--;
		  if(px+(nowCol+2)*16-mappx>=74*16)
			  this.gameState=PassLevel;
		  break;
		  
		}
		case GAMEWIN:
		{
		   	ppx+=4;
			if(ppx>95)
			{ppx=95;
			isrun=true;	
			}
			else{RoleNow++;}
			if(RoleNow>6)
			{
				RoleNow=0;
			}
			break;
		}
		
		}	
	  //控制FPS
	  passtime=System.currentTimeMillis()-starttime;
	  if(100-passtime>=0)
	  try{Thread.sleep(100-passtime);}catch(Exception e){}
	  this.repaint();
	  this.serviceRepaints();
		
	 }	
	
	}
	
	public boolean checkDown(){
		nowrow1=(py+24)/16-2;
	    nowcol1=(px+11-mappx)/16+nowCol;
	    if(nowrow1<=0)nowrow1=0;
	    if(nowrow1>=15)nowrow1=15;
	    if(nowcol2>=68)nowcol1=68;
	    boolean can=false;
//	    System.out.println(" map[r][c]"+map[nowrow][nowcol]);
	    //System.out.println(" [r]"+nowrow1);
	    //System.out.println(" [c]"+nowcol1);
	    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[nowrow1][nowcol1]==canCro[i])
	    {    
	     return true;
	    }
	    }
	    return false;
	 }
	
	public boolean checkPro(int m,int n){
		nowrow2=(py+24)/16-3-m;
	    nowcol2=(px-mappx)/16+nowCol+n;
	    if(nowrow2<=0)nowrow2=0;
	    if(nowrow2>=15)nowrow2=15;
	    if(nowcol2>=68)nowcol2=68;
//	    System.out.println(" map[r][c]"+map[nowrow2][nowcol2]);
	    //System.out.println(" pp[r]"+nowrow2);
	    //System.out.println(" pp[c]"+nowcol2);
	    for(int i=0;i<canPro.length;i++)
	    {
	    	if(map[nowrow2][nowcol2]==canPro[i])
		    {    
		     return true;
		    }
		    }
		    return false;
	}
	
	public void keyPressed(int n)
	{ int k=this.getGameAction(n);
	 switch(n)
	 {	  
	  case 53:
		 if(fire==false) 
		 {		 
			 if(d==1)
			 {ax=px+16;
			 ay=py+8;
			 pp=0;
			 }
			 if(d==3)
			 {ax=px-34;
			 ay=py+8;
			 pp=1;}
			 fire=true;
		 }
		 break;
	  case 52:
	 	 if(dir!=3&&dir!=4&&dir!=5&&dir!=6) dir=1;//左
	 	 break;
	  case 54:
	  	 if(dir!=3&&dir!=4&&dir!=5&&dir!=6) dir=2;//右
	  	 break;
	  case 50:
	  	  if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=3;//上
	  	 break;
	  case 56:
		  if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=4;//下
		  break;
	  case 51:
		  if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=5;//下
		  break;
	  case 49:
		  if(dir!=3&&dir!=4&&dir!=5&&dir!=6)dir=6;//下
		  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 + -