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

📄 thboss.java

📁 J2ME飞机设计游戏,希望对学习J2ME的程序员有所帮助
💻 JAVA
字号:
import java.util.Random;

import javax.microedition.lcdui.Graphics;

public class ThBoss extends Boss{
	public ThBoss() {
//		world = World.getInstance();
//		planeActor = BattlePlaneActor.getInstance();
		gameMenu = GameMenu.getInstance();
		
		secondImage = (new CImage("/unumber.png")).getClipImages(8,8);
		BOSS_STATE = GameConstant.STATE_BOSS_APPEAR;  //Boss第一次出现
	}

	public void initData() {
		switch (BOSS_STATE) {
		case GameConstant.STATE_BOSS_APPEAR:
			super.initSpiritDate("/thBossShow.bin", "/thBossShow.png",
					"/thBossShowCom.bin");
			setIPosX((GameConstant.iSCREEN_WIDTH >> 1) << 8);
			setIPosY((GameConstant.iSCREEN_HEIGHT + 72) << 8);

			moveSpeed = 10;
			break;
		case GameConstant.STATE_BOSS_SEC_APPEAR:
			super.initSpiritDate("/trdBoss.bin", "/trdBoss.png",
					"/trdBossCom.bin");
			setIPosX((GameConstant.iSCREEN_WIDTH >> 1) << 8);
			setIPosY(-72 << 8);
			setEnemyLife(350);
			//setEnemyLife(50);
			setIWidth(50 << 8); // 碰撞宽
			setIHeight(38 << 8); // 碰撞高

			moveSpeed = 5;
			break;
		case GameConstant.STATE_BOSS_TD_APPEAR: // 第3次出现
			setIPosY(-72 << 8);
			setEnemyLife(250);
			setIWidth(36 << 8);   //碰撞宽
			setIHeight(50 << 8);  //碰撞高
			moveSpeed = 5;

			setAction((byte) 2);
			setCurrentFrame(-1);
			break;
		case GameConstant.STATE_BOSS_FO_APPEAR: //第四形态
			setIPosY(-54 << 8);
			setEnemyLife(200);
			setIWidth(28 << 8); // 碰撞宽
			setIHeight(16 << 8); // 碰撞高
			moveSpeed = 5;
			setAction((byte) 4);
			setCurrentFrame(-1);
		}
	}

	public void changeMyState() {
		if(second <= 0){
			//world.cleanAllObecjt();
			//world.cleanPlane();
			GameScreen.gameState = GameConstant.STATE_GAME_OVER; // 加载
		}

		switch(BOSS_STATE){
		case GameConstant.STATE_BOSS_APPEAR:
			dealAutoMove();
			break;
		case GameConstant.STATE_BOSS_SEC_APPEAR:
			dealAutoMove();
			isCollide();
			isCollideWithPlaneInOnePart();
			if (getEnemyLife() <= 0) {
				BattlePlaneActor.iScore += 2000;
				BOSS_STATE = GameConstant.STATE_BOSS_DIE;
				setAction((byte) 1);
			}
			break;
		case GameConstant.STATE_BOSS_DIE:
			moveSpeed  = 6;
			dealAutoMove();
			bomb(getIPosX(), getIPosY(), 0, -moveSpeed << 8);
			break;
		case GameConstant.STATE_BOSS_TD_APPEAR:
			dealAutoMove();
			isCollide();
			isCollideWithPlaneInTwoPart();

			if(getEnemyLife() <= 0){
				BattlePlaneActor.iScore += 4000;
				BOSS_STATE = GameConstant.STATE_BOSS_TW_DIE;
				setAction((byte) 3);
				bombTimes = 5;
			}
			break;
		case GameConstant.STATE_BOSS_TW_DIE:
			moveSpeed  = 6;
			dealAutoMove();
			bomb(getIPosX(), getIPosY(), 0, -moveSpeed << 8);
			break;
		case GameConstant.STATE_BOSS_FO_APPEAR:
			dealAutoMove();
			isCollide();
			isCollideWithPlaneInThreePart();
			
			if(getEnemyLife() <= 0){
				BattlePlaneActor.iScore += 6000;
				timeInterval = 0;
				planeActor.setInvincible(true);
				BattlePlaneActor.PLANESTATE = GameConstant.STATE_GAME_WIN;
				BOSS_STATE = GameConstant.STATE_BOSS_TD_DIE;
			}
			break;
		case GameConstant.STATE_BOSS_TD_DIE:
			if (timeInterval == 20) {
				gameScreen = GameScreen.getInstance();
				gameScreen.StopSound();
			}

			if (timeInterval == 60) {
				world.cleanAllObecjt();
				System.out.println("over!!!!!!!!!!!");
				gameMenu.initGameMenu();
				GameScreen.gameState = GameConstant.STATE_GAME_OVER; // 加载
				break;
			}

			bomb(getIPosX(), getIPosY(), 0, 0);
			timeInterval++;
			break;
		}
	}
	
	public void clean() {
		cleanSpirit();

		for (int i = 0; i < secondImage.length; i++) {
			secondImage[i].clean();
		}
		secondImage = null;
	}
	
	public void dealAutoMove(){
		int iposY = getIPosY() >> 8;
		switch(BOSS_STATE){
		case GameConstant.STATE_BOSS_APPEAR:
			if (iposY <= -72) {
				BOSS_STATE = GameConstant.STATE_BOSS_SEC_APPEAR;
				cleanSpirit();
				initData();
			}else{
				setIPosY(getIPosY() - (moveSpeed << 8));
			}
			break;
		case GameConstant.STATE_BOSS_SEC_APPEAR:
			if(iposY <= 55){
				setIPosY(getIPosY() + (moveSpeed << 8));
			}else{
				if(timeInterval % 20 ==0){
					newEnemy(random.nextInt() % 5);
				}
				
				timeInterval++;
			}
			
			break;
		case GameConstant.STATE_BOSS_DIE:
			if (iposY <= 288) {
				setIPosY(getIPosY() + (moveSpeed << 8));
			} else {
				timeInterval = 20;
				BOSS_STATE = GameConstant.STATE_BOSS_TD_APPEAR;
				initData();
				
			}
			break;
		case GameConstant.STATE_BOSS_TD_APPEAR:
			if (iposY <= 65) {
				setIPosY(getIPosY() + (moveSpeed << 8));
			}else{
				if(timeInterval % 20 ==0){
					newEnemy(random.nextInt() % 5);
				}
				
				timeInterval++;
			}
			break;
		case GameConstant.STATE_BOSS_TW_DIE:
			if (iposY <= 288) {
				setIPosY(getIPosY() + (moveSpeed << 8));
			}else{
				timeInterval = 20;
				BOSS_STATE = GameConstant.STATE_BOSS_FO_APPEAR;
				initData();
			}
			break;
		case GameConstant.STATE_BOSS_FO_APPEAR:
			if (iposY <= 56) {
				setIPosY(getIPosY() + (moveSpeed << 8));
			}else{
				if(timeInterval % 20 ==0){
					newEnemy(random.nextInt() % 5);
				}
				
				timeInterval++;
			}
			break;
		}
	}
	
	public void isCollideWithBoss(Bullet bullet) {
		if (getEnemyLife() > 0) {
			if (isCollideInCenterTopLeft(this, bullet)) {
				setEnemyLife(getEnemyLife() - bullet.getDamage());

				world.newBullet(1, bullet.getIPosX(), bullet.getIPosY()
						- (20 << 8), 0, -4 << 8);
				isCollide = true;
			}
		}
	}

	public void isCollideWithBoss() {
		if (getEnemyLife() > 0) {
			setEnemyLife(getEnemyLife() - 4);
		}
	}

	// 与主角的碰撞是十字矩形
	public void isCollideWithPlaneInOnePart() {
		if (getEnemyLife() > 0) {
			int rMLeftX = (planeActor.getIPosX() - (planeActor.getIWidth() >> 1)) >> 8;
			// rMLeftY 为矩形的左上Y坐标
			int rMLeftY = (planeActor.getIPosY() - planeActor.getIHeight()) >> 8;

			// 贯穿图片中间的矩形x,y,width,height
			int cBossLeftX = (getIPosX() - (24 << 8)) >> 8;
			int cBossLeftY = (getIPosY() - (55 << 8)) >> 8;
			int cWidth = 48;
			int cHeight = 134;

			// 贯穿图片左右的矩形x,y,width,height
			int rLRBossLeftX = (getIPosX() - (50 << 8)) >> 8;
			int rLRBossLeftY = (getIPosY() - (30 << 8)) >> 8;
			int lrWidth = 96;
			int lrHeight = 72;

			if (planeActor.getLiftNum() >= 0) {
				isCollideWithPlane(rMLeftX, rMLeftY,
						planeActor.getIWidth() >> 8,
						planeActor.getIHeight() >> 8, cBossLeftX, cBossLeftY,
						cWidth, cHeight);

				isCollideWithPlane(rMLeftX, rMLeftY,
						planeActor.getIWidth() >> 8,
						planeActor.getIHeight() >> 8, rLRBossLeftX,
						rLRBossLeftY, lrWidth, lrHeight);

			}
		}
	}
	
	//是一个矩形的碰撞
	public void isCollideWithPlaneInTwoPart() {
		int rBLeftX = (planeActor.getIPosX() - (planeActor.getIWidth() >> 1)) >> 8;
		int rBLeftY = (planeActor.getIPosY() - (planeActor.getIHeight() >> 1)) >> 8;

		// rALeftX 为矩形的左上X,Y坐标
		int rALeftX = (getIPosX() - (17 << 8)) >> 8;
		int rALeftY = (getIPosY() - (75 << 8)) >> 8;
		int rWidth = 34;
		int rHeight = 150;
		
		if (planeActor.getLiftNum() >= 0) {
			isCollideWithPlane(rBLeftX, rBLeftY, planeActor.getIWidth() >> 8,
					planeActor.getIHeight() >> 8, rALeftX, rALeftY, rWidth,
					rHeight);
		}
	}
	
	public void isCollideWithPlaneInThreePart(){
		int rBLeftX = (planeActor.getIPosX() - (planeActor.getIWidth() >> 1)) >> 8;
		int rBLeftY = (planeActor.getIPosY() - (planeActor.getIHeight() >> 1)) >> 8;
		
		// rALeftX 为矩形的左上X,Y坐标
		int rALeftX = (getIPosX() - (14 << 8)) >> 8;
		int rALeftY = (getIPosY() - (55 << 8)) >> 8;
		int rWidth = 28;
		int rHeight = 108;
		
		if (planeActor.getLiftNum() >= 0) {
			isCollideWithPlane(rBLeftX, rBLeftY, planeActor.getIWidth() >> 8,
					planeActor.getIHeight() >> 8, rALeftX, rALeftY, rWidth,
					rHeight);
		}
	}
	
	private void isCollideWithPlane(int fCPosX, int fCPosY, int fWidth, int fHeight,
			int tCPosX, int tCPosY, int tWidth, int tHeight) {
		if(Tool.isIntersectingRect(fCPosX, fCPosY, fWidth, fHeight, tCPosX,
				tCPosY, tWidth, tHeight)){
			planeActor.setBattle_life(planeActor.getBattle_life() - 50);

			if (planeActor.getBattle_life() <= 0) {
				world.newBullet(7, planeActor.getIPosX(),
						planeActor.getIPosY(), 0, 0);
				BattlePlaneActor.PLANESTATE = GameConstant.STATE_GAME_DIE;
			}
		}
	}

	// 画秒数
	public void drawSecond(Graphics graphics, int x, int y) {
		if (secondTimes % 10 == 0) {
			second -= 1;

			if (second <= 0) {
				second = 0;
			}
		}

		secondImage[second / 100].drawGetClipImage(graphics, x - 24, y,
				GameConstant.TOPLEFT);
		secondImage[(second % 100) / 10].drawGetClipImage(graphics, x - 16, y,
				GameConstant.TOPLEFT);
		secondImage[second % 10].drawGetClipImage(graphics, x - 8, y,
				GameConstant.TOPLEFT);

		secondTimes++;
	}
	
	// 打BOSS时候出自暴飞机
	private void newEnemy(int num) {
		switch (num) {
		case 0:
			world.newEnemy(15);
			break;
		case 1:
			world.newEnemy(14);
			world.newEnemy(15);
			break;
		case 2:
			world.newEnemy(14);
			world.newEnemy(16);
			break;
		case 3:
			world.newEnemy(15);
			world.newEnemy(16);
			break;
		case 4:
			world.newEnemy(14);
			world.newEnemy(15);
			world.newEnemy(16);
			break;
		}
	}

	//private World world;
	//private BattlePlaneActor planeActor;
	private CImage [] secondImage; //秒
	private byte secondTimes = 1; //秒数间隔
	private byte second = 120;
	private int timeInterval = 20;  //子弹发射间隔
	private Random random = new Random();
	private GameScreen gameScreen;
	private GameMenu gameMenu;
}

⌨️ 快捷键说明

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