📄 cpc.java
字号:
import java.util.Vector;
import javax.microedition.lcdui.*;
/**
* 非作者授权,请勿用于商业用途。
* 电脑控制的精灵
* @author bruce.fine@gmail.com
* */
public class CPC extends MySprite {
//
int nHpTimer = 0;
int nHpTimerMax = 6;
public void delHp(int val) {
if (nHpTimer >= nHpTimerMax) {
nHP += val;
nHpTimer = 0;
}
}
// up down left ,right
// x0, y0, x1, y1
short nUpRectNum = 0;
short nDownRectNum = 0;
short nLeftRectNum = 0;
short nRightRectNum = 0;
short[][][] nRectCollosion = null;
static final byte B_VAR_BOX = 1;
/**
* 跳跳的小兔子
*/
static final byte B_VAR_RABIT = 2;
/**
* NPC
*/
static final byte B_VAR_NPC = 3;
/**
* 魔法,属于LISA
*/
static final byte B_VAR_MAGIC_LISA_FIRE = 4;
/**
* 魔法,属于坏蛋的:)
*/
static final byte B_VAR_MAGIC_CPC_FIRE = 5;
/**
* 魔法,属于坏蛋的:),普通球:)
*/
static final byte B_VAR_MAGIC_CPC_FIRE_BALL = 6;
/**
* 储箱
*/
static final byte B_VAR_SAVING = 7;
/**
* 虫
*/
static final byte B_VAR_WORM = 8;
/**
* 地图旋转,作用,可以为空也可以不为空~~~
*/
static final byte B_VAR_DOOR = 9;
/**
* 智商稍微高的怪物
*/
static final byte B_VAR_OGRE = 10;
/**
* 炸弹
*
*/
static final byte B_VAR_BOMB = 11;
// 攻击范围
int nAttackByBombTileNumUp = 0;
int nAttackByBombTileNumDown = 0;
int nAttackByBombTileNumLeft = 0;
int nAttackByBombTileNumRight = 0;
//
static final byte B_BOMB_STATE_STATIC = 0; // 没有引爆的炸弹
static final byte B_BOMB_STATE_BOMBING = 1; // 被引爆的炸弹
byte bBombState = B_BOMB_STATE_STATIC;
//
int nPower = 0; // 炸弹的能量
static final byte B_BOMB_VAR_NORMAL = 0; // 普通型
static final byte B_BOMB_VAR_SUPER = 1; // 超级炸弹
byte bBombVar = 0; // 炸弹的类型
//
int nTimer = 0;
int nTimerMax = 30;
//
/**
* 炸弹火焰
*
*/
static final byte B_VAR_BOMBSFIRE = 12;
int nBombFireToDisappear = 0;
int nBombFireToDisappearMax = 4;
//
/**
* BOSS在此
*/
static final byte B_VAR_BOSS_SIMPLY = 14;
static final byte B_BOSS_STATE_ALIVE = 0;
static final byte B_BOSS_STATE_DIE = 1;
// 如果bBossSate == 100,则bBoss为不死之身
byte bBossState = 0;
//
static final byte B_VAR_BOSS_SNAKE = 15;
boolean isLinkForBone = false;// 是否是骨节
//
static final byte B_VAR_BOSS_UFO = 16;
//
static final byte B_VAR_ZHEN = 17;
//
short nMapID = 0;
// 使用某个值作为MAPID
//
boolean isOpened = false;
int n_foos_id = 0;
int n_foos_num = 0;
//
short N_RABIT_TRAC_LENGTH = 20;
static final short N_SLEEP_TIME = 30;
boolean isHandleByNPC = false;
byte bVar = 0;
// 在一个方向上前进的步数
int nLength = 0;
int nSleepTime = 0;
static final int N_LENGTH_ATTACK = 30;
// int nAttackTimer = 0;
//
// int nAttackTimerMax = 40;
int nLisaAttackLength = 30;
int nHurtTimer = 0;
int HURT_TIMER_MAX = 8;
//
static int bulletNum = 0;
public CPC(byte var) {
// if (var == B_VAR_MAGIC_LISA_FIRE) {
// Consts.log("lisa fire");
// }
nUpRectNum = 1;
nDownRectNum = 1;
nLeftRectNum = 1;
nRightRectNum = 1;
nRectCollosion = new short[4][][];
nRectCollosion[0] = new short[nUpRectNum][4];
nRectCollosion[1] = new short[nDownRectNum][4];
nRectCollosion[2] = new short[nLeftRectNum][4];
nRectCollosion[3] = new short[nRightRectNum][4];
nRectCollosion[0][0] = new short[] { 0, 0, 16, 4 };
nRectCollosion[1][0] = new short[] { 0, 12, 16, 16 };
nRectCollosion[2][0] = new short[] { 0, 0, 4, 16 };
nRectCollosion[3][0] = new short[] { 12, 0, 16, 16 };
bVar = var;
switch (bVar) {
case B_VAR_BOMB: {
bBombState = B_BOMB_STATE_STATIC;
bBombVar = B_BOMB_VAR_NORMAL;
nPower = MyGameCanvas.instance.nPowerCMax; // 炸弹的能量
nAttackByBombTileNumUp = 0;
nAttackByBombTileNumDown = 0;
nAttackByBombTileNumLeft = 0;
nAttackByBombTileNumRight = 0;
nTimer = 0;
}
break;
case B_VAR_BOSS_SIMPLY: {
nTimer = 0;
nTimerMax = 30;
}
break;
case B_VAR_MAGIC_CPC_FIRE_BALL: {
bulletNum++;
}
break;
}
}
Anim anim = null;
public void initAnim(Anim anim) {
this.anim = anim;
}
public void update() {
if (nHpTimer < nHpTimerMax) {
nHpTimer++;
}
if (nHP <= 0) {
return;
}
if (anim != null) {
anim.update();
}
switch (bVar) {
case B_VAR_ZHEN: {
if (nTimer < nTimerMax) {
// 0 -> 封闭, 1->长出来 2 -> 绽放, 3-> 回缩
if (nTimer == nTimerMax - 3) {
if (bBossState == 0) {
bBossState = 1;
} else if (bBossState == 2) {
bBossState = 3;
} else if (bBossState == 3) {
bBossState = 0;
}
}
nTimer++;
} else {
nTimer = 0;
if (bBossState == 1) {
bBossState = 2;
} else if (bBossState == 3) {
bBossState = 0;
}
}
if (bBossState == 2) {
int r1x1 = MyGameCanvas.instance.npcLisa.nX;
int r1y1 = MyGameCanvas.instance.npcLisa.nY;
int r1x2 = r1x1 + 16;
int r1y2 = r1y1 + 16;
//
int r2x1 = nX;
int r2y1 = nY;
int r2x2 = r2x1 + 16;
int r2y2 = r2y1 + 16;
if (MyGameCanvas.isIntersectRect(r1x1, r1y1, r1x2, r1y2, r2x1,
r2y1, r2x2, r2y2)) {
MyGameCanvas.instance.npcLisa.delHp(-1);
}
}
}
break;
case B_VAR_BOSS_UFO: {
if (nX % Consts.SN_TILE_WIDTH == 0
&& nY % Consts.SN_TILE_HEIGHT == 0) {
switch (bDirection) {
case Canvas.UP: {
if (!isTilesNullForSnake((nX / Consts.SN_TILE_WIDTH),
(nY / Consts.SN_TILE_HEIGHT) - 1)) {
bDirection = Canvas.RIGHT;
}
}
break;
case Canvas.DOWN: {
if (!isTilesNullForSnake((nX / Consts.SN_TILE_WIDTH),
((nY + 16) / Consts.SN_TILE_HEIGHT) + 1)) {
bDirection = Canvas.LEFT;
}
}
break;
case Canvas.LEFT: {
if (!isTilesNullForSnake((nX / Consts.SN_TILE_WIDTH) - 1,
(nY / Consts.SN_TILE_HEIGHT))) {
bDirection = Canvas.UP;
}
}
break;
case Canvas.RIGHT: {
if (!isTilesNullForSnake(
((nX + 16) / Consts.SN_TILE_WIDTH) + 1,
(nY / Consts.SN_TILE_HEIGHT))) {
bDirection = Canvas.DOWN;
}
}
break;
}
}
switch (bDirection) {
case Canvas.UP: {
nY -= nSpeed;
nX += nSpeed;
}
break;
case Canvas.RIGHT: {
nY += nSpeed;
nX += nSpeed;
}
break;
case Canvas.DOWN: {
nX -= nSpeed;
nY += nSpeed;
}
break;
case Canvas.LEFT: {
nX -= nSpeed;
nY -= nSpeed;
}
break;
}
//
if (bBombState == B_BOSS_STATE_ALIVE && nHP > 1) {
if (nTimer < nTimerMax) {
nTimer++;
} else {
nTimer = 0;
if (true) {
// up
MyGameCanvas.instance.cpc2 = new CPC(
(byte) CPC.B_VAR_MAGIC_CPC_FIRE_BALL);
MyGameCanvas.instance.cpc2.initBasic("BALL", 16, 20,
(byte) Canvas.UP, 4, true, true, 0);
MyGameCanvas.instance.cpc2.initAbsXY(nX + 4, nY + 9);
MyGameCanvas.instance.cpc2.initParam(50, 50, 50, 50,
50, 50, 2, 2);
MyGameCanvas.instance.cpc2.initAnim(null);
MyGameCanvas.instance.vecticUnits
.addElement(MyGameCanvas.instance.cpc2);
//
MyGameCanvas.instance.cpc2 = new CPC(
(byte) CPC.B_VAR_MAGIC_CPC_FIRE_BALL);
MyGameCanvas.instance.cpc2.initBasic("BALL", 16, 20,
(byte) Canvas.DOWN, 4, true, true, 0);
MyGameCanvas.instance.cpc2.initAbsXY(nX + 4, nY + 16);
MyGameCanvas.instance.cpc2.initParam(50, 50, 50, 50,
50, 50, 2, 2);
MyGameCanvas.instance.cpc2.initAnim(null);
MyGameCanvas.instance.vecticUnits
.addElement(MyGameCanvas.instance.cpc2);
//
MyGameCanvas.instance.cpc2 = new CPC(
(byte) CPC.B_VAR_MAGIC_CPC_FIRE_BALL);
MyGameCanvas.instance.cpc2.initBasic("BALL", 16, 20,
(byte) Canvas.LEFT, 4, true, true, 0);
MyGameCanvas.instance.cpc2.initAbsXY(nX - 9, nY + 4);
MyGameCanvas.instance.cpc2.initParam(50, 50, 50, 50,
50, 50, 2, 2);
MyGameCanvas.instance.cpc2.initAnim(null);
MyGameCanvas.instance.vecticUnits
.addElement(MyGameCanvas.instance.cpc2);
//
MyGameCanvas.instance.cpc2 = new CPC(
(byte) CPC.B_VAR_MAGIC_CPC_FIRE_BALL);
MyGameCanvas.instance.cpc2.initBasic("BALL", 16, 20,
(byte) Canvas.RIGHT, 4, true, true, 0);
MyGameCanvas.instance.cpc2.initAbsXY(nX + 16, nY + 4);
MyGameCanvas.instance.cpc2.initParam(50, 50, 50, 50,
50, 50, 2, 2);
MyGameCanvas.instance.cpc2.initAnim(null);
MyGameCanvas.instance.vecticUnits
.addElement(MyGameCanvas.instance.cpc2);
MyGameCanvas.instance.cpc2 = null;
}
}
}
}
break;
case B_VAR_BOSS_SNAKE: {
if (nX % Consts.SN_TILE_WIDTH == 0
&& nY % Consts.SN_TILE_HEIGHT == 0) {
int b = bDirection;
switch (bDirection) {
case Canvas.UP: {
if (!isTilesNullForSnake((nX / Consts.SN_TILE_WIDTH),
(nY / Consts.SN_TILE_HEIGHT) - 1)) {
bDirection = Canvas.RIGHT;
}
}
break;
case Canvas.DOWN: {
if (!isTilesNullForSnake((nX / Consts.SN_TILE_WIDTH),
(nY / Consts.SN_TILE_HEIGHT) + 1)) {
bDirection = Canvas.LEFT;
}
}
break;
case Canvas.LEFT: {
if (!isTilesNullForSnake((nX / Consts.SN_TILE_WIDTH) - 1,
(nY / Consts.SN_TILE_HEIGHT))) {
bDirection = Canvas.UP;
}
}
break;
case Canvas.RIGHT: {
if (!isTilesNullForSnake((nX / Consts.SN_TILE_WIDTH) + 1,
(nY / Consts.SN_TILE_HEIGHT))) {
bDirection = Canvas.DOWN;
}
}
break;
}
if (b != bDirection) {
anim.changeAction(bDirection);
}
}
switch (bDirection) {
case Canvas.UP: {
nY -= nSpeed;
}
break;
case Canvas.DOWN: {
nY += nSpeed;
}
break;
case Canvas.LEFT: {
nX -= nSpeed;
}
break;
case Canvas.RIGHT: {
nX += nSpeed;
}
break;
}
//
if (bBombState == B_BOSS_STATE_ALIVE && nHP > 1) {
if (nTimer < nTimerMax) {
nTimer++;
} else {
nTimer = 0;
if (MyGameCanvas.instance.getRandomInt(0, 4, nX) == 0
&& CPC.bulletNum < 5) {
MyGameCanvas.instance.cpc2 = new CPC(
(byte) CPC.B_VAR_MAGIC_CPC_FIRE_BALL);
int dir = 0;
if (Canvas.RIGHT == bDirection) {
dir = Canvas.DOWN;
} else if (Canvas.LEFT == bDirection) {
dir = Canvas.UP;
} else if (Canvas.UP == bDirection) {
dir = Canvas.RIGHT;
} else {
dir = Canvas.LEFT;
}
MyGameCanvas.instance.cpc2.initBasic("BALL", 16, 20,
(byte) dir, 4, true, true, 0);
switch (dir) {
case Canvas.UP: {
MyGameCanvas.instance.cpc2
.initAbsXY(nX + 4, nY + 9);
}
break;
case Canvas.DOWN: {
MyGameCanvas.instance.cpc2.initAbsXY(nX + 4,
nY + 16);
}
break;
case Canvas.LEFT: {
MyGameCanvas.instance.cpc2
.initAbsXY(nX - 9, nY + 4);
}
break;
case Canvas.RIGHT: {
MyGameCanvas.instance.cpc2.initAbsXY(nX + 16,
nY + 4);
}
break;
}
MyGameCanvas.instance.cpc2.initParam(50, 50, 50, 50,
50, 50, 2, 2);
MyGameCanvas.instance.cpc2.initAnim(null);
MyGameCanvas.instance.vecticUnits
.addElement(MyGameCanvas.instance.cpc2);
MyGameCanvas.instance.cpc2 = null;
}
}
}
}
break;
case B_VAR_BOSS_SIMPLY: {
if (bBossState == B_BOSS_STATE_ALIVE) {
if (nHP == 1) {
bBossState = B_BOSS_STATE_DIE;
break;
}
if (nTimer < nTimerMax) {
nTimer++;
} else {
//
nTimer = 0;
MyGameCanvas.instance.cpc2 = new CPC(
(byte) CPC.B_VAR_MAGIC_CPC_FIRE_BALL);
MyGameCanvas.instance.cpc2.initBasic("BALL", 16, 20,
bDirection, 4, true, true, 0);
switch (bDirection) {
case Canvas.UP: {
MyGameCanvas.instance.cpc2.initAbsXY(nX + 4, nY + 9);
}
break;
case Canvas.DOWN: {
MyGameCanvas.instance.cpc2.initAbsXY(nX + 4, nY + 16);
}
break;
case Canvas.LEFT: {
MyGameCanvas.instance.cpc2.initAbsXY(nX - 9, nY + 4);
}
break;
case Canvas.RIGHT: {
MyGameCanvas.instance.cpc2.initAbsXY(nX + 16, nY + 4);
}
break;
}
MyGameCanvas.instance.cpc2.initParam(50, 50, 50, 50, 50,
50, 2, 2);
MyGameCanvas.instance.cpc2.initAnim(null);
MyGameCanvas.instance.vecticUnits
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -