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

📄 tanksprite.java

📁 经典FC游戏《超惑星战记》的J2ME版本!!功能基本上都实现了
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	
	
	//与敌人子弹碰撞检测
	private boolean checkBulletDamage(){
		rect1.x = x;
		rect1.y = y+16;
		rect1.dx=24;
		rect1.dy=16;
		rect2.dx = 8;
		rect2.dy = 8;
		if(spriteState==TANE){
			rect1.x=x;
			rect1.y=y;
			rect1.dx=16;
			rect1.dy=16;
		}
		for(int i=gm.lgr.enemyBullet.length-1;i>=0;i--){
			if(!gm.lgr.enemyBullet[i].isHidden){
				rect2.x=gm.lgr.enemyBullet[i].x;
				rect2.y=gm.lgr.enemyBullet[i].y;
				if(Rect.IntersectRect(rect1, rect2)){
					gm.lgr.enemyBullet[i].isHidden=true;
					gm.lgr.enemyBullet[i].creatBombEffect(gm.lgr.enemyBullet[i].x, gm.lgr.enemyBullet[i].y, gm.lgr.enemyBullet[i].bulletType);
					attack=gm.lgr.enemyBullet[i].pow;
					return true;
				}
			}
		}
		return false;
	}
	
	//检测当前精灵所在地图的属性状态
	private void checkTileValue(){
		int i = 0;
		int yTile;
		rect1.dx = 16;
		rect1.dy = 16;
		rect2.dx = 16;
		rect2.dy = 16;
		if(spriteState==TANE){
			rect1.y = this.y + Maps.y+4;
			rect1.x = x + Maps.x + 8;
			
			i = rect1.x / Maps.tileSize;
			if (i < 0 || i > Maps.w - 1)
				return ;	//超出地图,不作判断
			yTile = rect1.y / Maps.tileSize;
			rect2.x = i * 16;
			rect2.y = yTile * 16;
		}else{
			rect1.y = this.y + Maps.y + 15;	//坦克Y起点
			if(dx==0){
				rect1.x = x + Maps.x + dx + 16 ;
				i = rect1.x / Maps.tileSize;
			}else if(dx<0){
				rect1.x = x + Maps.x + 4 ;
				i = rect1.x / Maps.tileSize;
			}else{
				rect1.x = x + Maps.x +12 ;
				i = rect1.x / Maps.tileSize+1;
			}
			if (i < 0 || i > Maps.w - 1)
				return ;
			yTile = (y + Maps.y) / Maps.tileSize + 1;
			rect2.x = i * 16;
			rect2.y = yTile * 16;
		}
		isWater=false;	//不在水中
//		isLadder=false;
		isHidden=false;
		//检测地图属性,作出相当的判断
		/**
		 * 碰撞(0f):
		 *通道(01):
		 *掉血:(02):
		 *水:(04):
		 *梯:(08):
		 */
		value=(Maps.mapArray[yTile][i] >> 8);
		/**------------------TANK-----------------------------------------------------------*/
		if(!haveData){
			switch(spriteState){
			case TANK:
				switch(value){
				case 0x01:
					isHidden=true;
					if(timeCnt++%2==0)
						isHidden=false;
					
					break;
				case 0x02:
					if(!isProtected){
						loseLife(2);
						if(spriteState==TANK){
							isProtected=true;
						}else{
							isProtected=true;
						}
					}
					break;
				case 0x04:	//在水中
					isWater=true;
					break;
				case 0x09:	//11
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
				case 0x0b:	//12
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
				case 0x0c:	//13
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
				case 0x0e:
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
				case 0x0d:	//15
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
					
				}
				break;
				
			/*--------------------TANE-------------------------*/
			case TANE:
				switch(value){
				case 0x02:
					if(!isProtected){
						loseLife(2);
						isProtected=true;
					}
					break;
				case 0x04:	//在水中
					isWater=true;
					break;	
				case 0x08:
					if(isLadder){
						x=i*16-Maps.x;
					}else{
						y=yTile*16-Maps.y;
					}
					break;
				case 0x20:	//16
					if(isDown){
						isChangeScreen=true;
						direction=up;
						LoadGameResource.data=value;
						haveData=true;
					}
					break;
				case 0x21:	//17 C12
					if(isDown){
						isChangeScreen=true;
						direction=up;
						LoadGameResource.data=value;
						haveData=true;
					}
					break;
					
				case 0x22:	//18  C13
					if(isDown){
						isChangeScreen=true;
						direction=up;
						LoadGameResource.data=value;
						haveData=true;
					}
					break;
					
				case 0x23:	//19 C14
					if(isDown){
						isChangeScreen=true;
						direction=up;
						LoadGameResource.data=value;
						haveData=true;
					}
					break;
					
				case 0x24:	//17  C15
					if(isDown){
						isChangeScreen=true;
						LoadGameResource.data=value;
						haveData=true;
					}
					break;
				}
			break;	
			
			/*---------------------KANE-----------------------*/
			case KANE:
				switch(value){
				case 0x01:
					isHidden=true;
					if(timeCnt++%2==0)
						isHidden=false;
					break;
				case 0x02:
					if(!isProtected){
						loseLife(2);
						if(spriteState==TANK){
							isProtected=true;
						}else{
							isProtected=true;
						}
					}
					break;
				
				case 0x11:	//c1
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
					
				case 0x12:	//c2
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
				case 0x13:	//c3
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
				case 0x14:	//c4
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
					
				case 0x15:	//c5
					isChangeScreen=true;
					LoadGameResource.data=value;
					haveData=true;
					break;
				case 0x16:
					if(!HYPER_BEAM){
						isChangeScreen=true;
						isBoss=true;
						haveData=true;
						LoadGameResource.data=value;
					}
					break;
				}
				break;
			}
		}
	}
	
	// 换地图中主角的偏移
	public void initOffset(int offsetX,int offsetY){
		Maps.x=offsetX*16-TankGameCanvas.width/2;
		Maps.y=offsetY*16-TankGameCanvas.height/2;
		x=TankGameCanvas.width/2;
		y=TankGameCanvas.height/2;
		if(Maps.x<0){
			Maps.x=0;
			x=offsetX*16;
		}
		if(Maps.y<0){
			Maps.y=0;
			y=offsetY*16;
		}
		if(Maps.h*16-Maps.y<TankGameCanvas.height){
			Maps.y=Maps.h*16-TankGameCanvas.height;
		}
		if(Maps.w*16-Maps.x<TankGameCanvas.width){
			Maps.x=Maps.w*16-TankGameCanvas.width;
			x+=offsetX*16-Maps.x-TankGameCanvas.width/2;
		}
		isHidden=false;
		isDown=false;
	}
	
	// 轮子状态
	public void drop(){
		isUp=false;
		for(int i=1;i<=2;i++){
			if(isLeft){
				if(frameCnt<2){
					frameCnt++;
					wheelRise-=1;	
				}
			}else if(!isLeft){
				if(frameCnt>5){
					frameCnt--;
					wheelRise-=1;
				}
			}
		}
	}
	
	
	//TODO  判断按键按下的动作
	public void judgeKeyCode(int keyCode, int gameKeyCode) {
		switch (gameKeyCode) {
		case Canvas.UP:
			keyAction|=KeyMask.MASK_KEY_UP;
			break;
		case Canvas.DOWN:
			keyAction|=KeyMask.MASK_KEY_DOWN;
			break;
		case Canvas.FIRE:
			if ((((keyAction & KeyMask.MASK_KEY_FIRE) == 0) && ((keyAction & KeyMask.MASK_KEY_FIRE_FLAG) == 0))) {
				keyAction |= KeyMask.MASK_KEY_FIRE | KeyMask.MASK_KEY_FIRE_FLAG;
			}
			break;
		case Canvas.LEFT:
			keyAction |= KeyMask.MASK_KEY_LEFT;
			break;
		case Canvas.RIGHT:
			keyAction |= KeyMask.MASK_KEY_RIGHT;
			break;
		default:
			switch (keyCode) {
			case Canvas.KEY_NUM0:
				if ((((keyAction & KeyMask.MASK_KEY_ZERO) == 0) && ((keyAction & KeyMask.MASK_KEY_ZERO_FLAG) == 0))) {
					keyAction |= KeyMask.MASK_KEY_ZERO | KeyMask.MASK_KEY_ZERO_FLAG;
					isShowMap=!isShowMap;
					keyAction &= ~KeyMask.MASK_KEY_ZERO_FLAG;
				}
				break;
			case Canvas.KEY_NUM1:
				if ((((keyAction & KeyMask.MASK_KEY_STATE) == 0) && ((keyAction & KeyMask.MASK_KEY_STATE_FLAG) == 0))) {
					keyAction |= KeyMask.MASK_KEY_STATE | KeyMask.MASK_KEY_STATE_FLAG;
					if(spriteState==TANK&&isJumpOver){
						gm.lgr.staticTankSprite.init(this);
						tanePow=16;
						spriteState=TANE;
					}else if(spriteState==TANE){
						if(x-gm.lgr.staticTankSprite.x<20&&x-gm.lgr.staticTankSprite.x>=0&&y-gm.lgr.staticTankSprite.y>0&&y-gm.lgr.staticTankSprite.y<20){
							init(gm.lgr.staticTankSprite);
							spriteState=TANK;
						}
					}
					keyAction &= ~KeyMask.MASK_KEY_STATE_FLAG;
				}
				break;
			case Canvas.KEY_NUM2:
				keyAction|=KeyMask.MASK_KEY_UP;
				break;
			case Canvas.KEY_NUM3:
				if ((((keyAction & KeyMask.MASK_KEY_CONTORL) == 0) && ((keyAction & KeyMask.MASK_KEY_CONTORL_FLAG) == 0))) {
					keyAction |= KeyMask.MASK_KEY_CONTORL | KeyMask.MASK_KEY_CONTORL_FLAG;
					GameManage.gameState=GameManage.GMAESTATE_CONTROL;
					keyAction &= ~KeyMask.MASK_KEY_CONTORL_FLAG;
				}
				break;
			case Canvas.KEY_NUM4:
				keyAction |= KeyMask.MASK_KEY_LEFT;
				break;
			case Canvas.KEY_NUM6:
				keyAction |= KeyMask.MASK_KEY_RIGHT;
				break;
			case Canvas.KEY_NUM8:
				keyAction |= KeyMask.MASK_KEY_DOWN;
				break;
			case Canvas.KEY_NUM5:
				
				break;
			case Canvas.KEY_NUM7:
			case Canvas.KEY_NUM9:
				if ((((keyAction & KeyMask.MASK_KEY_FIRE) == 0) && ((keyAction & KeyMask.MASK_KEY_FIRE_FLAG) == 0))) {
					keyAction |= KeyMask.MASK_KEY_FIRE | KeyMask.MASK_KEY_FIRE_FLAG;
				}
				break;
			case Canvas.KEY_POUND:
			case Canvas.KEY_STAR:
				if(((keyAction & KeyMask.MASK_KEY_JUMP)==0)&&((keyAction & KeyMask.MASK_KEY_JUMP_FLAG)==0)){
					keyAction |= KeyMask.MASK_KEY_JUMP | KeyMask.MASK_KEY_JUMP_FLAG;
					jump();
				}
				break;
			}
			break;
		}
	}

	//释放按键处理
	public void freeKey(int keyCode, int gameKeyCode) {	
		switch (gameKeyCode) {
		case Canvas.FIRE:
			keyAction &= ~KeyMask.MASK_KEY_FIRE;
			break;
		case Canvas.UP:
			keyAction &= ~KeyMask.MASK_KEY_UP;
			drop();
			break;
		case Canvas.DOWN:
			keyAction &= ~KeyMask.MASK_KEY_DOWN;
			break;
		case Canvas.LEFT:
			keyAction &= ~KeyMask.MASK_KEY_LEFT;
			break;
		case Canvas.RIGHT:
			keyAction &= ~KeyMask.MASK_KEY_RIGHT;
			break;
		default:
			switch (keyCode) {
			case Canvas.KEY_NUM0:
				keyAction &= ~KeyMask.MASK_KEY_ZERO;
				break;
			case Canvas.KEY_NUM1:
				keyAction &= ~KeyMask.MASK_KEY_STATE;
				break;
			case Canvas.KEY_NUM3:
				keyAction &= ~KeyMask.MASK_KEY_CONTORL;
				break;
			case Canvas.KEY_NUM4: // left
				keyAction &= ~KeyMask.MASK_KEY_LEFT;
				break;
			case Canvas.KEY_NUM6:
				keyAction &= ~KeyMask.MASK_KEY_RIGHT; // right
				break;
			case Canvas.KEY_NUM2:
				keyAction &= ~KeyMask.MASK_KEY_UP; // jump
				drop();
				break;
			case Canvas.KEY_NUM8:
				keyAction &= ~KeyMask.MASK_KEY_DOWN;
				break;
			case Canvas.KEY_NUM5:
				
				break;
			case Canvas.KEY_NUM7:
			case Canvas.KEY_NUM9:
				keyAction &= ~KeyMask.MASK_KEY_FIRE;
				break;
			case Canvas.KEY_POUND:
			case Canvas.KEY_STAR:
				keyAction &= ~KeyMask.MASK_KEY_JUMP;
				break;
			}
			break;
		}
	}
	
	public void reInit(){
		tankPow=16;
		tanePow=16;
		kaneGun=0;
	}
	
	//读档
	public void readData(DataInputStream dis) throws java.io.IOException{
		super.readData(dis);
		spriteState=dis.readChar();
		direction=dis.readChar();
		
		frameCnt=dis.readInt();
		tankPow=dis.readInt();
		tanePow=dis.readInt();
		tankHov=dis.readInt();
		kaneGun=dis.readInt();
		tankMissile=dis.readInt();
		tankHball=dis.readInt();
		tankBolt=dis.readInt();
		oddFacePow=dis.readInt();
		Maps.x=dis.readInt();
		Maps.y=dis.readInt();
		
		isBoss=dis.readBoolean();
		isShowMap=dis.readBoolean();
		isBossOver=dis.readBoolean();
		haveData=dis.readBoolean();
		HYPER_BEAM=dis.readBoolean();
		CRUSHER_BEAM=dis.readBoolean();
		HOVER_BEAM=dis.readBoolean();
		KEY_BEAM=dis.readBoolean();
		DIVE_BEAM=dis.readBoolean();
		WALL1_BEAM=dis.readBoolean();
		WALL2_BEAM=dis.readBoolean();
		System.out.println("Tank 读档");
	}
	
	//存档
	public void writeData(DataOutputStream dos) throws java.io.IOException{
		super.writeData(dos);
		dos.writeChar(spriteState);
		dos.writeChar(direction);
		
		dos.writeInt(frameCnt);
		dos.writeInt(tankPow);
		dos.writeInt(tanePow);
		dos.writeInt(tankHov);
		dos.writeInt(kaneGun);
		dos.writeInt(tankMissile);
		dos.writeInt(tankHball);
		dos.writeInt(tankBolt);
		dos.writeInt(oddFacePow);
		dos.writeInt(Maps.x);
		dos.writeInt(Maps.y);
		
		dos.writeBoolean(isBoss);
		dos.writeBoolean(isShowMap);
		dos.writeBoolean(isBossOver);
		dos.writeBoolean(haveData);
		dos.writeBoolean(HYPER_BEAM);
		dos.writeBoolean(CRUSHER_BEAM);
		dos.writeBoolean(HOVER_BEAM);
		dos.writeBoolean(KEY_BEAM);
		dos.writeBoolean(DIVE_BEAM);
		dos.writeBoolean(WALL1_BEAM);
		dos.writeBoolean(WALL2_BEAM);
		System.out.println("Tank 存档");
	}
}

class StaticTankSprite extends FSprite{

	private int tempX;
	private int tempY;
	public int wheelRise;		//车轮的高度
	public int leftFrameCnt;	//左轮
	public int rightFrameCnt;	//右轮
	public boolean isLeft;

	public StaticTankSprite() {
		
	}

	public void init(TankSprite tankSprite){
		
		this.x=tankSprite.x;
		this.y=tankSprite.y;
		this.leftFrameCnt=tankSprite.leftFrameCnt;
		this.rightFrameCnt=tankSprite.rightFrameCnt;
		isHidden=false;
		this.isLeft=tankSprite.isLeft;
		if(tankSprite.isLeft){
			frameCnt=8;
		}else{
			frameCnt=9;
		}
		this.wheelRise=tankSprite.wheelRise;
		tempX=tankSprite.x+Maps.x;
		tempY=tankSprite.y+Maps.y;
	}
	
	public void action(){
		
	}
	
	public void setPot(int mapX,int mapY){
		this.x=tempX-mapX;
		this.y=tempY-mapY;
		
	}
	//读档
	public void readData(DataInputStream dis) throws java.io.IOException{
		x=dis.readInt();
		y=dis.readInt();
		tempX=dis.readInt();
		tempY=dis.readInt();
		isHidden=dis.readBoolean();
		isLeft=dis.readBoolean();
		leftFrameCnt=dis.readInt();
		rightFrameCnt=dis.readInt();
		frameCnt=dis.readInt();
		wheelRise=dis.readInt();
	}
	//存档
	public void writeData(DataOutputStream dos) throws java.io.IOException{
		dos.writeInt(x);
		dos.writeInt(y);
		dos.writeInt(tempX);
		dos.writeInt(tempY);
		dos.writeBoolean(isHidden);
		dos.writeBoolean(isLeft);
		dos.writeInt(leftFrameCnt);
		dos.writeInt(rightFrameCnt);
		dos.writeInt(frameCnt);
		dos.writeInt(wheelRise);
	}
}

⌨️ 快捷键说明

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