📄 enemy.java
字号:
package com.thinkenjoy.feitian;
//Download by http://www.codefans.net
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
//import java.util.Random;
//import com.thinkenjoy.control.ThreadCanvas;
import com.thinkenjoy.tools.ImageSet;
import com.thinkenjoy.tools.Tools;
import com.thinkenjoy.feitian.screen.PlayScreen;
import com.thinkenjoy.control.Control;
/**
* 那个Stage类里面你们只用把
* initial(int stageNum)中的scale改成0,就可以是完整的一关了
* @author yougq
*
* 敌人
*/
public class Enemy extends FightingObject {
private static int x = 0, y = 0; //记录子弹的X,Y坐标
/**
* boss是否死去
*/
public boolean bossIsDead = false;
public static ImageSet enemyImageSet;
public static ImageSet bossImageSet;
/**
* boss的闪烁
*/
private int bossShieldFlash;
/**
* 敌人运动轨迹种类
*/
private static final int A1 = 1;
private static final int A2 = 2;
private static final int A3 = 3;
private static final int A4 = 4;
private static final int A5 = 5;
private static final int A6 = 6;
private static final int A7 = 7;
private static final int A8 = 8;
private static final int A9 = 9;
private static final int A10 = 10;
private static final int A11 = 11;
private static final int A12 = 12;
/**
* 敌人种类对应的大小
*/
protected static final byte[] enemy_width = {30, 40, 35, 25, 35, 15, 30, 20,
20, 20,
15, 15, 15, 20, 20, 20, 20, 20,
15, 15,
20, 15, 20, 30, 30, 30, 60};
protected static final byte[] enemy_height = {35, 25, 30, 30, 45, 15, 30, 25,
25, 25,
15, 15, 15, 15, 15, 15, 15, 15,
20, 10,
15, 15, 15, 20, 20, 20, 60};
/**
* 敌人运动轨迹的相应轨迹初始值
*/
protected int scriptNum;
/**
* 每种怪物移动的轨迹种类(一一对应)
*/
protected static final byte[] enemy_moveType = {10, 10, 4, 5, 10, 6, 10, 2, 2,
2,
4, 5, 5, 1, 1, 1, 1, 1, 9, 3,
9, 9, 9, 3, 3, 10, 12};
/**
* 每种怪物的速度(一一对应 )
*/
protected static final byte[] enemy_speedY = {1, 1, 3, 3, 1, 3, 1, 3, 3, 3,
2, 3, 3, 3, 3, 3, 3, 3, 1, 3,
1, 1, 1, 3, 3, 1, 3};
protected static final byte[] enemy_speedX = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 5, 6,
6, 6, 6, 3, 3, 3, 3};
/**
* 每种怪物子弹轨迹(一一对应)
*/
protected static final int[] enemy_bulletType = {1, 2, 2, 3, 1, 1, 0, 1, 4, 1,
1, 1, 4, 0, 0, 0, 1, 3, 0, 1,
0, 0, 0, 1, 2, 0, 5};
protected int bulletType;
/**
* 每种怪物对应的子弹图片
*/
protected static final byte[] bulletImage = {6 - 1, 6 - 1, 10 - 1, 12 - 1,
8 - 1, 6 - 1, 0, 7 - 1, 8 - 1,
9 - 1,
6 - 1, 6 - 1, 6 - 1, 6 - 1, 6 - 1,
6 - 1, 9 - 1, 12 - 1, 0, 8 - 1,
0, 0, 0, 11 - 1, 7 - 1, 0, 6 - 1};
/**
* 每个怪物子弹发射的延迟(一一对应)
*/
protected static final byte[] bDShoot = {20, 20, 20, 20, 20, 10, 0, 10, 10,
20,
20, 20, 20, 0, 0, 0, 10, 10, 0, 10,
0, 0, 0, 10, 10, 10, 25};
/**
* 每种怪物的分值(一一对应)
*/
protected static final int[] enemy_scoreType = {20, 20, 20, 20, 50, 20, 25,
10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
10, 10,
5, 5, 5, 25, 25, 25, 500};
/**
* 一一对应的怪物血值(用于赋予super.energy)
*/
protected static final int[] enemy_energy = {20, 20, 20, 20, 50, 20, 25, 10,
10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
10, 10,
5, 5, 5, 25, 25, 25, 1500};
/**
* 在一个轨迹上需要刷屏的次数
*/
protected int scriptLength;
//#if NOK_7370 || MOT_E2
//# /**
//# * 一一对应的需要刷屏的次数
//# */
//# protected static final byte[] sLength = { 60,60,0,60,60,0 ,60,40,40,40,
//# 0 , 0, 0,60,60,60,60,60,40,3 ,
//# 40,40,40,30,30,60, 40};
//#else
/**
* 一一对应的需要刷屏的次数
*/
protected static final byte[] sLength = {60, 60, 0, 60, 60, 0, 40, 20, 20, 20,
0, 0, 0, 40, 40, 40, 40, 40, 20, 3,
20, 20, 20, 10, 10, 60, 20};
//#endif
/**
* 记录在一个轨迹下的刷屏次数
*/
protected int runtime;
/**
* 记录一个怪物状态下的刷屏次数
*/
protected int runCount;
/**
* 控制某种轨迹下的加速度
*/
protected int accelerate;
/**
* 此种敌人的分数
*/
protected int score;
protected boolean toggle = false;
protected boolean visible = true;
public Enemy(int type, int hitPow, int speedX, int speedY, int locX, int locY,
int width, int height) {
super(type, hitPow, speedX, speedY, locX, locY, width, height);
if (enemyImageSet == null) {
initialEnemy();
}
if (bossImageSet == null) {
initialBoss();
}
}
private void initialBoss() {
bossImageSet = new ImageSet(1);
//#if NOK_QD
//# Image[] tempBossImage = new Image[2];
//# tempBossImage[0] = Tools.getImage("images/stage/enemy_"+(78+(Control.getStage()-1)*2+1));
//# tempBossImage[1] = Tools.getImage("images/stage/enemy_"+(78+(Control.getStage()-1)*2+2));
//# bossImageSet.addState(tempBossImage,200);
//#else
Image tempBossImage_1 = Tools.getImage("images/stage/boss" +
Control.getStage());
//#if NOK_7260 || NOK_6101
//# if(Control.getStage()==1)bossImageSet.addState(ImageSet.extractFrames(tempBossImage_1,0, 0, 2, 1, 48, 42), 200);
//# if(Control.getStage()==2)bossImageSet.addState(ImageSet.extractFrames(tempBossImage_1,0, 0, 2, 1, 33, 32), 250);
//# if(Control.getStage()==3)bossImageSet.addState(ImageSet.extractFrames(tempBossImage_1,0, 0, 2, 1, 34, 45), 300);
//# if(Control.getStage()==4)bossImageSet.addState(ImageSet.extractFrames(tempBossImage_1,0, 0, 2, 1, 38, 49), 350);
//#else
if (Control.getStage() == 1) bossImageSet.addState(ImageSet.extractFrames(
tempBossImage_1, 0, 0, 2, 1, 84, 75), 200);
if (Control.getStage() == 2) bossImageSet.addState(ImageSet.extractFrames(
tempBossImage_1, 0, 0, 2, 1, 69, 64), 250);
if (Control.getStage() == 3) bossImageSet.addState(ImageSet.extractFrames(
tempBossImage_1, 0, 0, 2, 1, 54, 71), 300);
if (Control.getStage() == 4) bossImageSet.addState(ImageSet.extractFrames(
tempBossImage_1, 0, 0, 2, 1, 64, 85), 350);
//#endif
tempBossImage_1 = null;
//#endif
System.gc();
}
public static void initialEnemy() {
enemyImageSet = new ImageSet(27);
//#if NOK_QD
//# for(int i = 0 ; i<30; i++)
//# {
//# if(i<26)
//# {
//# Image[] threeSet = new Image[3];
//# threeSet[0] = Tools.getImage("images/stage/enemy_"+(i*3+1));
//# threeSet[1] = Tools.getImage("images/stage/enemy_"+(i*3+2));
//# threeSet[2] = Tools.getImage("images/stage/enemy_"+(i*3+3));
//# enemyImageSet.addState(threeSet,200);
//# } else {
//# Image[] twoSet = new Image[2];
//# twoSet[0] = Tools.getImage("images/stage/enemy_" + 35);
//# twoSet[1] = Tools.getImage("images/stage/enemy_" + 35);
//# enemyImageSet.addState(twoSet, 200);
//# }
//# }
//#else
Image tempEnemyImage_1 = Tools.getImage("images/stage/enemy_1");
Image tempEnemyImage_2 = Tools.getImage("images/stage/enemy_2");
Image tempEnemyImage_3 = Tools.getImage("images/stage/enemy_3");
Image tempEnemyImage_4 = Tools.getImage("images/stage/enemy_4");
//#if NOK_7260 || NOK_7210 || NOK_6101
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 47, 3, 1, 22, 23),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 94, 3, 1, 30, 22),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 71, 3, 1, 21, 22),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 28, 3, 1, 17, 18),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 0, 3, 1, 23, 27),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 1, 79, 3, 1, 12, 13),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 93, 3, 1, 25, 22),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 0, 3, 1, 17, 20),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 20, 3, 1, 17, 20),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 40, 3, 1,17, 20),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 61, 3, 1, 14, 10),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 71, 3, 1, 7, 14),450);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 85, 3, 1, 12, 14),450);
//#
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 0, 3, 1, 12, 12),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 12, 3, 1, 12, 12),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 24, 3, 1, 12, 12),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 36, 3, 1, 12, 12),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 48, 3, 1, 12, 12),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 99, 3, 1, 14, 19),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 119, 3, 1,17, 9),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 1, 45, 3, 1, 15, 10),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 56, 3, 1, 15, 11),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 1, 67, 3, 1, 15, 12),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 0, 3, 1, 26, 15),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 16, 3, 1, 26, 15),300);
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 30, 3, 1, 26, 15),300);
//#
//# enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3,0, 0, 2, 1, 2, 2), 200);
//#else
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 75, 3, 1,
32, 36), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 144, 3,
1, 41, 26), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 111, 3,
1, 35, 33), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 45, 3, 1,
27, 30), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_1, 0, 0, 3, 1,
37, 45), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 108, 3,
1, 16, 17), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 125, 3,
1, 32, 30), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 0, 3, 1,
21, 25), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 25, 3, 1,
21, 25), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 50, 3, 1,
21, 25), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 74, 3, 1,
16, 13), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 88, 3, 1,
7, 14), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 102, 3,
1, 15, 17), 450);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 0, 3, 1,
14, 18), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 18, 3, 1,
14, 18), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 36, 3, 1,
14, 18), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 54, 3, 1,
14, 18), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_4, 0, 72, 3, 1,
14, 18), 300);
//TODO:初始化enemyImageSet
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 119, 3,
1, 14, 20), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_2, 0, 139, 3,
1, 17, 9), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 63, 3, 1,
20, 15), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 1, 77, 3, 1,
17, 15), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 1, 93, 3, 1,
20, 15), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 0, 3, 1,
34, 21), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 21, 3, 1,
34, 21), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 42, 3, 1,
34, 22), 300);
enemyImageSet.addState(ImageSet.extractFrames(tempEnemyImage_3, 0, 0, 2, 1,
2, 2), 200);
//#endif
tempEnemyImage_1 = null;
tempEnemyImage_2 = null;
tempEnemyImage_3 = null;
tempEnemyImage_4 = null;
//#endif
System.gc();
}
public void dead() {
super.reset();
super.gunId = 10;
super.curExpAniId = 0;
scriptNum = 0;
scriptLength = 0;
runtime = 0;
accelerate = 0;
toggle = false;
visible = false;
super.currentFrame = 0;
}
public void reset() {
dead();
}
/**
* 初始化敌人,每种类型的敌人对应的属性值不相同
*
* @param type
* @param locX
* @param locY
*/
public void initial(int type, int locX, int locY) {
visible = true;
super.imageSet = enemyImageSet;
super.initial(type, 1, enemy_speedX[type], enemy_speedY[type], locX, locY,
enemy_width[type], enemy_height[type]);
if (type < 26) { //小怪
super.energy = enemy_energy[type];
super.bDelayShoot = bDShoot[type];
score = enemy_scoreType[type];
bulletType = enemy_bulletType[type];
} else { //Boss
super.energy = enemy_energy[type] + Control.getStage() * 500;
super.bDelayShoot = bDShoot[type] - Control.getStage() * 5;
score = enemy_scoreType[type] * Control.getStage();
bulletType = enemy_bulletType[type] + Control.getStage();
}
scriptNum = 0;
scriptLength = sLength[type]; //刷频次数
if (sLength[type] == 0) {
//#if NOK_7260 || NOK_7210 || NOK_6101
//# scriptLength = Tools.getRand(15,25);
//#else
scriptLength = Tools.getRand(25, 35);
//#endif
}
super.currentState = type; //对应的怪物图片(种类)
runtime = 0;
initialBullet(bulletImage[type], 5, -7, -5, 8, 6);
if (bulletImage[type] != 0)
super.gunId = bulletImage[type];
}
public boolean isDead() {
return super.isDead() && !visible;
}
/**
* 处理敌人的轨迹,每种敌人都有自己的轨迹
*
* @param pLocX
* @param pLocY
*/
public void cycle(int pLocX, int pLocY) {
super.cycle();
if (super.isDead())
return;
super.animateCycle();
switch (enemy_moveType[type]) {
//TODO:处理敌人的轨迹及动作
case A1: //A1
if (runtime++ < scriptLength) {
move( -getSpeedX(), 0);
} else {
move(getSpeedX(), 0);
}
break;
case A2: //A2
if (runtime++ < scriptLength) {
switch (scriptNum) {
case 0:
default:
move( -getSpeedX(), 0);
break;
case 1:
if (super.delayShoot <= 0) {
fire(pLocX, pLocY);
}
break;
case 2:
move(getSpeedX(), 0);
break;
}
} else {
runtime = 0;
scriptNum++;
if (scriptNum == 1) {
scriptLength = 20;
}
if (scriptNum > 2) {
scriptNum = 2;
}
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -