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

📄 tankbullet.java

📁 经典FC游戏《超惑星战记》的J2ME版本!!功能基本上都实现了
💻 JAVA
字号:
/**
 * <p>Title: Transpanzer</p>
 * <p>Description:
 * You cannot remove this copyright and notice.
 * You cannot use this file any part without the express permission of the author.
 * All Rights Reserved</p>
 * @author Jjyo
 * @email jjyo@163.com
 * @version 1.0.0
 */

public class TankBullet extends FSprite{
		
	public GameManage gm;
 	private int xSpeed;
 	private int ySpeed;
 	private int bulletType;
 	private int tmpDx;
 	private int tmpDy;
 	private int r;
 	private int arc;
 	private int arcos;
 	private int index;
 	private int frame[]={0,1,2,3,4};
 	private boolean change;
 	private Rect rect1=new Rect();
 	private Rect rect2=new Rect();
 	//model
	public TankBullet(GameManage gm){
		System.out.println("TankBullet Sucessful...");
		this.gm=gm;
	    isHidden=true;
	    rect1.dx=8;
	    rect1.dy=8;
	    rect2.dx=16;
	    rect2.dy=16;
	}
	
	public void initBullet(int x,int y,int xSpeed,int ySpeed,int bulletType){
		
		this.x=x;
		this.y=y;
		this.xSpeed=xSpeed;
		this.ySpeed=ySpeed;
		this.bulletType=bulletType;
		isHidden=false;
		frameCnt=0;
		tmpDx=x;
		tmpDy=y;
		this.arc=xSpeed;
		this.arcos=ySpeed;
		r=15;
		if(System.currentTimeMillis()%2==0){
			change=true;
		}
	}
	
	public void action(){
		if(!isHidden){
			if(x>TankGameCanvas.width-32||x<16||y<16||y>TankGameCanvas.height-32)
			{
				isHidden=true;
				return;
			}
			switch(bulletType){
			/**
			 * ----------------------------------------------------
			 */
			case TankSprite.BULLET_DEFANUL:
				pow=4;
				if(xSpeed<0){
					frameCnt=0;
				}else if(xSpeed>0){
					frameCnt=6;
				}else if(ySpeed<0){
					frameCnt=12;
				}
				
				break;
			/**
			* -----------------------------------------------------
			*/
			case TankSprite.BULLET_HYPER:
				pow=8;
				if(xSpeed<0){
					frameCnt=1;
				}else if(xSpeed>0){
					frameCnt=7;
				}else if(ySpeed<0){
					frameCnt=13;
				}
				break;
			/**
			 * ----------------------------
			 */
			case TankSprite.BULLET_CRUCHER:
				pow=16;
				frameCnt++;
				if(xSpeed<0){
					if(frameCnt>=6)
						frameCnt=2;
					if(tmpDx==x)
						frameCnt=2;
				}
				else if(xSpeed>0){
					if(frameCnt>=12)
						frameCnt=8;
					if(tmpDx==x)
						frameCnt=8;
				}else{
					if(frameCnt>=18)
						frameCnt=14;
					if(tmpDy==y)
						frameCnt=14;
				}
				
				break;
			/**
			 * ----------------------------------------------------
			 */
			case TankSprite.BULLET_TANE:
				pow=2;
				frameCnt=0;
				if(x-tmpDx>72||x-tmpDx<-72){
					isHidden=true;
					gm.creatBombEffect(x-12, y-12, 0);
					return;
				}
				break;
			/**
			 * ---------------------------------------------------
			 */
			case TankSprite.BULLET_BOMB:
				pow=24;
				frameCnt=3;
				if(x-tmpDx>50||x-tmpDx<-48||y-tmpDy>48||y-tmpDy<-32||x<0||x>TankGameCanvas.width||y<0||y>TankGameCanvas.height){
					isHidden=true;
					gm.creatBombEffect(x-16, y-16, 4);
					return;
				}
				break;
			/**
			 * ---------------------------------------------------
			 */
			case TankSprite.BULLET_GUN00:
			case TankSprite.BULLET_GUN01:
			case TankSprite.BULLET_GUN02:
			case TankSprite.BULLET_GUN03:
			case TankSprite.BULLET_GUN04:
				pow=4;
				if(xSpeed<0){
					frameCnt=5;
					if(tmpDx==x)
						frameCnt=4;
				}
				else if(xSpeed>0){
					frameCnt=12;
	
					if(tmpDx==x)
						frameCnt=11;
				}
				else if(ySpeed<0){
					frameCnt=19;
					if(tmpDy==y)
						frameCnt=18;
				}else{
					frameCnt=26;
					if(tmpDy==y)
						frameCnt=25;
				}
				if(bulletType==TankSprite.BULLET_GUN00){
					pow=2;
					if(x-tmpDx>100||x-tmpDx<-100||y-tmpDy>100||y-tmpDy<-100||
							x<0||x>TankGameCanvas.width||y<0||y>TankGameCanvas.height){
						isHidden=true;
						return;
					}
				}
				break;
			/**
			 * -------------------------------------------------
			 */
			case TankSprite.BULLET_GUN05:
				pow=4;
				if(xSpeed<0){
					frameCnt=5;
				}
				else if(xSpeed>0){
					frameCnt=12;
				}
				else if(ySpeed<0){
					frameCnt=19;
				}else{
					frameCnt=26;
				}
				if(r==15){
					switch(TankSprite.direction){
					case TankSprite.left:
						frameCnt=4;
						r+=1;
						break;
					case TankSprite.right:
						 frameCnt=11;
						 r+=1;
						break;
					case TankSprite.up:
						frameCnt=18;
						r+=1;
						break;
					case TankSprite.down:
						frameCnt=25;
						r+=1;
						break;
					}
				}
				xSpeed=(int)(r*Math.cos(Math.toRadians(arc)));
	 			ySpeed=(int)(r*Math.sin(Math.toRadians(arc)));	
	 			if(arc%180==0)
	 				r+=2;
	 			arc+=arcos;
	 			if(arc>=360)	//角度>360时复位
	 				arc=0;
				break;
			case TankSprite.BULLET_GUN06:
				pow=4;
				if(xSpeed<0){
					frameCnt=5;
				}
				else if(xSpeed>0){
					frameCnt=12;
				}
				else if(ySpeed<0){
					frameCnt=19;
				}else{
					frameCnt=26;
				}
				if(r==15){
					switch(TankSprite.direction){
					case TankSprite.left:
						frameCnt=4;
						r+=1;
						break;
					case TankSprite.right:
						 frameCnt=11;
						 r+=1;
						break;
					case TankSprite.up:
						frameCnt=18;
						r+=1;
						break;
					case TankSprite.down:
						frameCnt=25;
						r+=1;
						break;
					}
				}
				xSpeed=(int)((r+5)*Math.cos(Math.toRadians(arc)));
	 			ySpeed=(int)((r+5)*Math.sin(Math.toRadians(arc)));	
	 			if(arc%180==0)
	 				r+=2;
	 			arc+=arcos;
	 			if(arc>=360)	//角度>360时复位
	 				arc=0;
				break;
			case TankSprite.BULLET_GUN07:
				pow=8;
				if(xSpeed<0){
					xSpeed-=1;
					frameCnt=5;
					if(tmpDx==x){
						frameCnt=4;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							y+=4;
						}else{
							y-=4;
						}
					}
					
				}
				else if(xSpeed>0){
					frameCnt=12;
					xSpeed+=1;
					if(tmpDx==x){
						frameCnt=11;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							y+=4;
						}else{
							y-=4;
						}
					}
				}
				else if(ySpeed<0){
					frameCnt=19;
					ySpeed-=1;
					if(tmpDy==y){
						frameCnt=18;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							x+=4;
						}else{
							x-=4;
						}
					}
				}else{
					frameCnt=26;
					ySpeed+=1;
					if(tmpDy==y){
						frameCnt=25;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							x+=4;
						}else{
							x-=4;
						}
					}
				}
				if(++timeCnt>10)
					timeCnt=0;
				break;
				
			case TankSprite.BULLET_GUN08:
				pow=16;
				if(xSpeed<0){
					xSpeed-=2;
					nextFrame(5,6);
					if(tmpDx==x){
						frameCnt=4;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							y+=6;
						}else{
							y-=6;
						}
					}
				}
				else if(xSpeed>0){
					nextFrame(5,13);
					xSpeed+=2;
					if(tmpDx==x){
						frameCnt=11;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							y+=6;
						}else{
							y-=6;
						}
					}
				}
				else if(ySpeed<0){
					nextFrame(5,20);
					ySpeed-=2;
					if(tmpDy==y){
						frameCnt=18;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							x+=6;
						}else{
							x-=6;
						}
					}
				}else{
					nextFrame(5,27);
					ySpeed+=2;
					if(tmpDy==y){
						frameCnt=25;
					}else{
						if(timeCnt>=0&&timeCnt<5){
							x+=6;
						}else{
							x-=6;
						}
					}
				}
				if(++timeCnt>10)
					timeCnt=0;
				break;
			}
			
			x+=xSpeed;
			y+=ySpeed;
			checkTileCollision();
			checkColisionCorps();
		}
	}
	
	protected void nextFrame(int frameNum,int frameIndex){
		if(index>=frameNum||index<0)
			index=0;
		frameCnt=frame[index]+frameIndex;
			index++;
	}
	
	private void checkTileCollision() {
		int i=0,j;
		if(bulletType==TankSprite.BULLET_DEFANUL||bulletType==TankSprite.BULLET_HYPER||bulletType==TankSprite.BULLET_CRUCHER){
			if(xSpeed<0){
				rect1.x=this.x+Maps.x;
				rect1.y=this.y+Maps.y+16;
			}else if(xSpeed>0){
				rect1.x=this.x+Maps.x+16;
				rect1.y=this.y+Maps.y+16;
			}else{
				rect1.x=this.x+Maps.x+16;
				rect1.y=this.y+Maps.y;
			}
		}else{
			rect1.x=this.x+Maps.x;
			rect1.y=this.y+Maps.y+4;
		}
		int yTile;
		j = rect1.x / Maps.tileSize;
		if(i<0||i>Maps.w)
		      isHidden=true;
		yTile = rect1.y / Maps.tileSize;
		rect2.x = j * 16;
		rect2.y = yTile * 16;
		if(yTile<0||yTile>Maps.h-1){
		     isHidden=true;
		     return;
		}
		//检测地图属性,作出相当的判断
		if (((Maps.mapArray[yTile][j] >> 8) & 0x0f) == 0x0f) {
			rect2.x = j * 16;
			rect2.y = yTile * 16;
			if (Rect.IntersectRect(rect1, rect2)) {
				if(TankSprite.bulletType!=TankSprite.BULLET_GUN08)
					isHidden=true;
				creatBombEffect(x,y,bulletType);
			}
		}
		if(bulletType!=TankSprite.BULLET_BOMB&&TankSprite.spriteState==TankSprite.KANE){
			if ((Maps.mapArray[yTile][j] & 0x00ff) == 0x18) {
				rect2.x = j * 16;
				rect2.y = yTile * 16;
				if (Rect.IntersectRect(rect1, rect2)) {
					isHidden=true;
					Maps.mapArray[yTile][j]=0x1d;
					creatBombEffect(x,y,bulletType);
				}
			}
		}
		
		
	}
	
	private void checkColisionCorps(){
		if(xSpeed<0){
			rect1.x=this.x;
			rect1.y=this.y+16;
		}else if(xSpeed>0){
			rect1.x=this.x+16;
			rect1.y=this.y+16;
		}
		
		for(int i=gm.lgr.corps.length-1;i>=0;i--){
			if(!gm.lgr.corps[i].isHidden){
				rect2.x=gm.lgr.corps[i].x;
				rect2.y=gm.lgr.corps[i].y;
				rect2.dx=16;
				rect2.dy=16;
				if(Rect.IntersectRect(rect1, rect2)){
					isHidden=true;
					creatBombEffect(x,y,bulletType);
				}
			}
		}
	}
	
	//爆炸效果
	private void creatBombEffect(int x,int y,int bulletType){
		switch(bulletType){
		case TankSprite.BULLET_DEFANUL:
		case TankSprite.BULLET_HYPER:
		case TankSprite.BULLET_CRUCHER:
			gm.creatBombEffect(x-8, y-6, 0);
			break;
			
		case TankSprite.BULLET_TANE:
			gm.creatBombEffect(x-16, y-12, 0);
			break;
			
		case TankSprite.BULLET_BOMB:
			gm.creatBombEffect(x-14, y-14, 4);
			break;
			
		case TankSprite.BULLET_GUN00:
		case TankSprite.BULLET_GUN01:
		case TankSprite.BULLET_GUN02:
		case TankSprite.BULLET_GUN03:
		case TankSprite.BULLET_GUN04:
		case TankSprite.BULLET_GUN05:
		case TankSprite.BULLET_GUN06:
		case TankSprite.BULLET_GUN07:
		case TankSprite.BULLET_GUN08:
			gm.creatBombEffect(x-14, y-14, 5);
			break;
		}
	}
}

⌨️ 快捷键说明

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