📄 thboss.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 + -