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

📄 frboss.java

📁 J2ME飞机设计游戏,希望对学习J2ME的程序员有所帮助
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.Sprite;

//import com.nokia.mid.ui.DirectGraphics;

public class FrBoss extends Boss {
	public FrBoss() {
		//world = World.getInstance();
		//planeActor = BattlePlaneActor.getInstance();

		xSpeed = new int[9]; // 初始化子弹的XY上的速度
		ySpeed = new int[9];
		initNormalFightXYSpeed();
		
//		
//		xCirlceSpeed = new int[24]; // 初始化疯狂攻击子弹的XY上的速度
//		yCirlceSpeed = new int[24];
		
		
		xCirlceSpeed = new int[20]; // 初始化疯狂攻击子弹的XY上的速度
		yCirlceSpeed = new int[20];
		initCrazyFightXYSpeed();
	}

	public void initData() {
		moveSpeed = 3;
		bulletInterval = 2;
		
		bossAirship = new CImage("/frBoss.png");
		setIPosX(GameConstant.iSCREEN_WIDTH >> 1);
		setIPosY(-97);

		smallCannon = new Cannon[6];

		for (int i = 0; i < smallCannon.length; i++) {
			smallCannon[i] = new Cannon("/cannon.png");
			smallCannon[i].setEnemyLife(60); // 没个小炮塔设置30血
			smallCannon[i].setIWidth(13 << 8);
			smallCannon[i].setIHeight(12 << 8);
		}

		artillery = new Cannon("/cannon.png"); // 大炮
		doubleCannon = new Cannon("/cannon.png");// 双管炮

		cirlceCannon = new Cannon[2];
		for (int cirIdx = 0; cirIdx < cirlceCannon.length; cirIdx++) {
			cirlceCannon[cirIdx] = new Cannon("/cannon.png");
			cirlceCannon[cirIdx].setEnemyLife(120);
			cirlceCannon[cirIdx].setIWidth(16<<8);
			cirlceCannon[cirIdx].setIHeight(15<<8);
		}

		bossCannon = new Cannon(); // boss炮

		// 设置小炮的位置
		smallCannon[0].setIPosX((getIPosX() - 68) << 8);
		smallCannon[0].setIPosY((getIPosY() - 4) << 8);
		smallCannon[1].setIPosX((getIPosX() + 55) << 8);
		smallCannon[1].setIPosY((getIPosY() - 4) << 8);
		smallCannon[2].setIPosX((getIPosX() - 40) << 8);
		smallCannon[2].setIPosY((getIPosY() + 19) << 8);
		smallCannon[3].setIPosX((getIPosX() + 27) << 8);
		smallCannon[3].setIPosY((getIPosY() + 19) << 8);
		smallCannon[4].setIPosX((getIPosX() - 68) << 8);
		smallCannon[4].setIPosY((getIPosY() - 45) << 8);
		smallCannon[5].setIPosX((getIPosX() + 55) << 8);
		smallCannon[5].setIPosY((getIPosY() - 45) << 8);

		// 设置大炮的位置
		artillery.setIPosX((getIPosX() - 12) << 8);
		artillery.setIPosY((getIPosY() + 18) << 8);
		artillery.setEnemyLife(240);
		artillery.setIWidth(24 << 8);
		artillery.setIHeight(19 << 8);

		// 设置双管炮的位置
		doubleCannon.setIPosX((getIPosX() - 15) << 8);
		doubleCannon.setIPosY((getIPosY() - 33) << 8);
		doubleCannon.setEnemyLife(150);
		doubleCannon.setIWidth(31 << 8);
		doubleCannon.setIHeight(17 << 8);

		// 设置圆泡的位置
		cirlceCannon[0].setIPosX((getIPosX() - 36) << 8);
		cirlceCannon[0].setIPosY((getIPosY() - 51) << 8);
		cirlceCannon[1].setIPosX((getIPosX() + 14) << 8);
		cirlceCannon[1].setIPosY((getIPosY() - 51) << 8);

		// BOSS炮
		bossCannon.setIPosX((getIPosX() - 19) << 8);
		bossCannon.setIPosY((getIPosY() - 91) << 8);
		bossCannon.setEnemyLife(200);
		bossCannon.setIWidth(39 << 8);
		bossCannon.setIHeight(34 << 8);

		BOSS_STATE = GameConstant.STATE_BOSS_APPEAR;
		//BOSS_STATE = GameConstant.STATE_BOSS_SEC_APPEAR;
	}

	public void changeMyState() {
		switch (BOSS_STATE) {
		case GameConstant.STATE_BOSS_APPEAR:
			dealAutoMove();
			break;
		case GameConstant.STATE_BOSS_NORMAL_FIGHT:
			normalFight();
			isCollide();
			break;
		case GameConstant.STATE_BOSS_SEC_APPEAR:
			dealAutoMove();
			break;
		case GameConstant.STATE_BOSS_CRAZY_FIGHT:
			crazyFight();
			isCollide();
			break;
		case GameConstant.STATE_BOSS_DIE:
			//if(bulletInterval == 60){
			if ((planeActor.getIPosY() >> 8) <= 0) {
				planeActor.setIDy(0);

				world.cleanAllObecjt();
				gameScreen = GameScreen.getInstance();
				gameScreen.StopSound();

				world.setGameLevel((byte) 2);
				world.setBossAppear(false);
				GameScreen.gameState = GameConstant.STATE_GAME_LOAD; // 加载

				//GameScreen.gameState = GameConstant.STATE_GAME_TASKCOMPLETE;
				break;
			}
			
			bomb(getIPosX() << 8, getIPosY() << 8, 0, 0);
			//bulletInterval++;
			break;
		}
	}

	public void dealAutoMove() {
		int posY = getIPosY() + moveSpeed;

		switch (BOSS_STATE) {
		case GameConstant.STATE_BOSS_APPEAR:
			if (getIPosY() >= 0) {
				BOSS_STATE = GameConstant.STATE_BOSS_NORMAL_FIGHT;
			} else {
				setIPosY(posY);
				changeWeaponState(moveSpeed << 8);
			}
			break;
		case GameConstant.STATE_BOSS_SEC_APPEAR:
			if (getIPosY() >= 97) {
				BOSS_STATE = GameConstant.STATE_BOSS_CRAZY_FIGHT;
			} else {
				setIPosY(posY);
				changeWeaponState(moveSpeed << 8);
			}
			break;
		}
	}

	public void draw(Graphics graphics) {
		graphics.setClip(0, 0, GameConstant.iSCREEN_WIDTH,
				GameConstant.iSCREEN_HEIGHT);
		bossAirship.drawImage(graphics, getIPosX(), getIPosY(),
				GameConstant.RIGHTCENTER);

//		bossAirship.drawImage(graphics, 0, 0, 100, 195,
//				DirectGraphics.FLIP_HORIZONTAL, getIPosX(), getIPosY() + 1,
//				GameConstant.LEFTCENTER);
		
		bossAirship.drawRegionImage(graphics, 0, 0, 100, 195,
				Sprite.TRANS_MIRROR, getIPosX(), getIPosY(),
				GameConstant.LEFTCENTER);

		drawWeapon(graphics);

		graphics.setClip(0, 0, GameConstant.iSCREEN_WIDTH,
				GameConstant.iSCREEN_HEIGHT);
	}

	public void changeWeaponState(int moveSpeed) {
		switch (BOSS_STATE) {
		case GameConstant.STATE_BOSS_APPEAR:
			for (int sCannonIdx = 0; sCannonIdx < 6; sCannonIdx++) {
				smallCannon[sCannonIdx].setIPosY(smallCannon[sCannonIdx]
						.getIPosY()
						+ moveSpeed);
			}
			artillery.setIPosY(artillery.getIPosY() + moveSpeed);

			doubleCannon.setIPosY(doubleCannon.getIPosY() + moveSpeed);

			for (int cCannonIdx = 0; cCannonIdx < 2; cCannonIdx++) {
				cirlceCannon[cCannonIdx].setIPosY(cirlceCannon[cCannonIdx]
						.getIPosY()
						+ moveSpeed);
			}

			bossCannon.setIPosY(bossCannon.getIPosY() + moveSpeed);
			break;
		case GameConstant.STATE_BOSS_SEC_APPEAR:
			for (int idx = 4; idx < 6; idx++) {
				smallCannon[idx].setIPosY(smallCannon[idx].getIPosY()
						+ moveSpeed);
			}

			doubleCannon.setIPosY(doubleCannon.getIPosY() + moveSpeed);

			for (int cCannonIdx = 0; cCannonIdx < 2; cCannonIdx++) {
				cirlceCannon[cCannonIdx].setIPosY(cirlceCannon[cCannonIdx]
						.getIPosY()
						+ moveSpeed);
			}

			bossCannon.setIPosY(bossCannon.getIPosY() + moveSpeed);
			break;
		}
	}

	public void drawWeapon(Graphics graphics) {
		switch (BOSS_STATE) {
		case GameConstant.STATE_BOSS_APPEAR:
		case GameConstant.STATE_BOSS_NORMAL_FIGHT:
			if (artillery.getEnemyLife() > 0) {
				// 画下面4门小炮
				for (int sCannonIdx = 0; sCannonIdx < 4; sCannonIdx++) {
					if (smallCannon[sCannonIdx].getEnemyLife() > 0) {
						smallCannon[sCannonIdx].draw(graphics, 56, 0, 13, 28,
								GameConstant.TOPLEFT);
					}
				}

				// 画大炮
				artillery.draw(graphics, 32, 0, 24, 37, GameConstant.TOPLEFT);
			} else {
				for (int i = 0; i < 4; i++) {
					smallCannon[i] = null;
				}
				artillery = null;

				bulletTimes = 30;
				BOSS_STATE = GameConstant.STATE_BOSS_SEC_APPEAR;
			}
			break;
		case GameConstant.STATE_BOSS_SEC_APPEAR:
		case GameConstant.STATE_BOSS_CRAZY_FIGHT:
			for (int idx = 4; idx < 6; idx++) {
				if (smallCannon[idx].getEnemyLife() > 0) {
					smallCannon[idx].draw(graphics, 56, 0, 13, 28,
							GameConstant.TOPLEFT);
				}
			}

			if (doubleCannon.getEnemyLife() > 0) {
				doubleCannon.draw(graphics, 0, 0, 32, 26, GameConstant.TOPLEFT);
			}

			for (int cCannonIdx = 0; cCannonIdx < 2; cCannonIdx++) {
				if (cirlceCannon[cCannonIdx].getEnemyLife() > 0) {
					cirlceCannon[cCannonIdx].draw(graphics, 69, 0, 22, 20,
							GameConstant.TOPLEFT);
				}
			}
			break;
		}
	}

	public void normalFight() {
		if (artillery.getEnemyLife() > 0) { // 如果双管炮爆炸就不产生子弹
			for (int i = 0; i < 4; i++) {
				if (bulletTimes % 30 == 0) {
					if (smallCannon[i].getEnemyLife() > 0) { // 如果血量大于0就产生子弹

						world.newBullet(3,
								smallCannon[i].getIPosX() + (7 << 8),
								smallCannon[i].getIPosY() + (24 << 8), 0,
								-5 << 8);
					}
				}
			}

			if (bulletTimes % 70 == 0) {
				bulletTimes = 30;

				for (int idx = 0; idx < 9; idx++) {
					world.newBullet(2, artillery.getIPosX() + (11 << 8),
							artillery.getIPosY() + (38 << 8), xSpeed[idx],
							ySpeed[idx]);
				}
			}

			bulletTimes++;
		}
	}

	public void crazyFight() {

⌨️ 快捷键说明

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