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

📄 cpc.java

📁 这个游戏的关卡使用mapwin制作的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
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 + -