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

📄 enemy.java

📁 实现了 移动 碰撞检测
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
						this.visible = false;
						temp = true;
					}
				}
				break;
			}
			return temp;
		}

		if (spriteType == Hp16)
		{ //医疗箱
			switch (enemyState)
			{
			case STA_DEAD: //被击中
				if (spriteY < gameworld.screenHeight - 14)
				{
					move(0, 14);
				} else
				{
					spriteY = gameworld.screenHeight - 14;
					if (spriteX <= -gameworld.offsetX + 10)
					{
						this.visible = false;
						gameworld.player.addHP();
					} else
					{
						move(-14, 0);
					}
				}
				break;
			}
			return temp;
		}
		if (spriteType == 21 || spriteType == 22)
		{
			switch (enemyState)
			{
			case STA_DEAD: //被打中播放爆炸效果
				frameSpace += System.currentTimeMillis() - lastTime;
				if (frameSpace > 100)
				{
					frameSpace = 0;
					currentFrame++;
				}
				if (currentFrame > 3)
				{//爆炸后加生命值
					if (spriteY < gameworld.screenHeight - 14)
					{
						move(0, 14);
					} else
					{
						spriteY = gameworld.screenHeight - 14;
						if (spriteX <= -gameworld.offsetX + 10)
						{
							this.visible = false;
							gameworld.player.addHP();
						} else
						{
							move(-14, 0);
						}
					}
				}
				break;
			}
			return temp;
		}
		if (spriteType == iteam23)
		{ //其它宝物
			switch (enemyState)
			{
			case STA_DEAD: //被击中
				switch (itemType)
				{
				case 0: //空袭
					if (spriteY < gameworld.screenHeight - 17)
					{
						move(0, 17);
					} else
					{
						spriteY = gameworld.screenHeight - 17;
						if (spriteX < -gameworld.offsetX + 90)
						{
							if (spriteX + 17 >= -gameworld.offsetX + 90)
							{
								move((spriteX + 17) - (gameworld.offsetX + 90),
										0);
								gameworld.player.addAir();
								this.visible = false;
							} else
							{
								move(17, 0);
							}
						} else
						{
							move(-17, 0);
						}
					}
					break;
				case 1: //增加子弹
				case 2: //增加子弹
					if (spriteY < gameworld.screenHeight - 17)
					{
						move(0, 17);
					} else
					{
						spriteY = gameworld.screenHeight - 17;
						if (spriteX < -gameworld.offsetX
								+ gameworld.screenWidth - 50)
						{
							if (spriteX + 17 >= -gameworld.offsetX
									+ gameworld.screenWidth - 50)
							{
								move((spriteX + 17)
										- (gameworld.offsetX
												+ gameworld.screenWidth - 50),
										0);
								gameworld.player.addBullet();
								this.visible = false;
							} else
							{
								move(17, 0);
							}
						} else
						{
							move(-17, 0);
						}
					}

					break;
				}
				break;
			}
			return temp;
		}

		if (spriteType == ship28)
		{ // 船
			switch (enemyState)
			{
			case STA_GO_RIGHT: // 展开
				frameSpace += System.currentTimeMillis() - lastTime;
				if (frameSpace > 500)
				{
					currentFrame++;
					frameSpace = 0;
					if (currentFrame > totalFrame)
					{
						temp = true;
						nextState = Enemy.STA_FIRE;
					}
				}
				break;
			case STA_DEAD: //爆炸
				frameSpace += System.currentTimeMillis() - lastTime;
				if (frameSpace > 150)
				{
					currentFrame++;
					frameSpace = 0;
					if (currentFrame > totalFrame)
					{
						temp = true;
					}
				}
				break;

			case STA_FIRE: //攻击
				frameSpace += System.currentTimeMillis() - lastTime;
				if (frameSpace > 1000)
				{
					frameSpace = 0;
					temp = true;
					nextState = Enemy.STA_HIDEING;
					action();
				} else
				{
					isFire = !isFire;
				}
				break;
			case STA_HIDEING: //隐藏
				frameSpace += System.currentTimeMillis() - lastTime;
				if (frameSpace > 500)
				{
					currentFrame--;
					frameSpace = 0;
					if (currentFrame <= totalFrame)
					{
						temp = true;
						nextState = Enemy.STA_SPUER;
					}
				}
				break;
			}
		}
		return temp;
	}

	//改变精灵状态
	final void changeState(int st)
	{
		enemyState = st;
		nextState = st;
		//静止的士兵、随机出现的士兵、手雷兵、伞兵
		if (this.spriteType == 1 || this.spriteType == soldier_small4
				|| spriteType == soldier_big5 || spriteType == 7)
		{
			switch (st)
			{
			case STA_GO_RIGHT://向右运动状态
				tempFrame = 0;//起始帧
				tempTotalFrame = 2;//最大帧数
				break;
			case STA_DEAD://死亡状态
				tempFrame = 0;
				tempTotalFrame = 1;
				break;
			case STA_FIRE: //攻击
				if (spriteType == soldier_small4)
				{ //行走士兵
					int t = gameworld.randomNum(3);
					tempFrame = t;
					tempTotalFrame = t;

				} else if (spriteType == 1)
				{ //静止士兵
					tempFrame = 0;
					tempTotalFrame = 1;
				} else
				{ //手雷兵
					tempFrame = 0;
					tempTotalFrame = 2;
				}
				break;
			case STA_GO_LEFT: //向左运动
				tempFrame = 0;//播放 0-2 桢
				tempTotalFrame = 2;
				break;
			case STA_REST: //静止状态;
				tempFrame = 0;
				tempTotalFrame = 1;
				break;
			}
			isChangeState = true;
			return;
		}
		if (this.spriteType == tank2)
		{//坦克
			switch (st)
			{			
			case 0: // 向右运动状态
				tempFrame = 0; // 起始帧
				tempTotalFrame = 1; // 最大帧数
				break;
			case STA_DEAD: // 死亡状态
				tempFrame = 2;
				tempTotalFrame = 4;
				break;
			case 2: // 攻击
				tempFrame = 0;
				tempTotalFrame = 1;
				break;
			case 4: // 静止状态;
				tempFrame = 0;
				tempTotalFrame = 1;
				break;
			case 5: // 掉转炮头
				tempFrame = 0;
				tempTotalFrame = 1;
				break;
			case 9: // 攻击完成后播放炮火动画
				tempFrame = 0;
				tempTotalFrame = 1;
				break;

				}
			isChangeState = true;
			return;
		}
		if (spriteType == plane6)
		{ //飞机
			switch (enemyState)
			{
			case STA_DEAD: //爆炸
				tempFrame = 0;
				tempTotalFrame = 2;
				break;
			case STA_GO_RIGHT: //飞行
			default:
				tempFrame = 0;
				tempTotalFrame = 2;
				break;
			}
			isChangeState = true;
			return;
		}
		if (spriteType == Hp9)
		{ //油桶
			tempFrame = 0;
			tempTotalFrame = 0;
			return;
		}
		if (spriteType == smallstone10)
		{ //大石头
			tempFrame = 0;
			tempTotalFrame = 0;
			return;
		}
		if (spriteType == bigstone11)
		{ //小石头
			tempFrame = 1;
			tempTotalFrame = 1;
			return;
		}

		if (spriteType == casern12)
		{ //碉堡
			switch (enemyState)
			{
			case STA_FIRE: //攻击
			case STA_REST: //静止
				tempFrame = 0;
				tempTotalFrame = 0;
				break;
			}
			isChangeState = true;
			return;
		}

		if (spriteType == supersoj13)
		{ //特种兵
			switch (enemyState)
			{
			case STA_GO_RIGHT: //向右移动
				tempFrame = 0;
				tempTotalFrame = 2;
				break;
			case STA_DEAD: //死亡
				tempFrame = 0;
				tempTotalFrame = 1;
				break;
			case STA_FIRE: //攻击
				tempFrame = 3;
				tempTotalFrame = 3;
				break;
			case STA_GO_LEFT: //向左移动
				tempFrame = 0;
				tempTotalFrame = 2;
				break;
			case STA_ROLL_RIGHT: //向右翻滚
				tempFrame = 0;
				tempTotalFrame = 4;
				break;
			case STA_ROLL_LEFT: //向左翻滚
				tempFrame = 0;
				tempTotalFrame = 4;
				break;
			}
			isChangeState = true;
			return;
		}
		if (spriteType == bus14)
		{ //汽车
			switch (enemyState)
			{
			case STA_DEAD: //爆炸
				tempFrame = 2;
				tempTotalFrame = 4;
				break;
			default: //静止
				tempFrame = 0;
				tempTotalFrame = 0;
				break;
			}
			isChangeState = true;
			return;
		}

		if (spriteType == bomb15)
		{//敌人投掷的手雷
			switch (st)
			{
			case STA_GO_RIGHT://手雷被扔出
				tempFrame = 0;
				tempTotalFrame = 3;
				break;
			case STA_DEAD://手雷爆炸
				tempFrame = 0;
				tempTotalFrame = 2;
				break;
			}
			isChangeState = true;
			return;
		}
		if (spriteType == Hp16)
		{ //医疗箱
			tempFrame = 0;
			tempTotalFrame = 0;
			isChangeState = true;
			return;
		}

		if (spriteType == casern19)
		{ //碉堡
			tempFrame = 0;
			tempTotalFrame = 0;
			isChangeState = true;
			return;
		}

		if (spriteType == casern20)
		{ //碉堡
			tempFrame = 1;
			tempTotalFrame = 1;
			isChangeState = true;
			return;
		}

		if (spriteType == 21)
		{ //油桶
			tempFrame = 0;
			tempTotalFrame = 0;
			isChangeState = true;
			return;
		}

		if (spriteType == 22)
		{ //油桶
			tempFrame = 0;
			tempTotalFrame = 0;
			isChangeState = true;
			return;
		}

		if (spriteType == 28)
		{ //船
			switch (enemyState)
			{
			case STA_GO_RIGHT: //展开
				tempFrame = 0;
				tempTotalFrame = 2;
				break;
			case STA_DEAD: //爆炸
				tempFrame = 3;
				tempTotalFrame = 3;
				break;
			case STA_SPUER:
			case STA_HIDEING:
				tempFrame = 0;
				tempTotalFrame = 1;
			}
			isChangeState = true;
			return;
		}
	}

	//敌人的逻辑处理
	final void logic()
	{
		if (lastTime == 0)
		{
			lastTime = System.currentTimeMillis();
		}

		//敌人超出屏幕后消失
		if ((this.spriteX + this.width) / 16 < gameworld.column)
		{
			this.visible = false;
			if (spriteType == rest1 || spriteType == tank2
					|| spriteType == tower3 || spriteType == soldier_small4
					|| spriteType == soldier_big5 || spriteType == plane6
					|| spriteType == supersoj13 || spriteType == bus14
					|| spriteType == ship28 || spriteType == iteam23)
			{
				gameworld.enemyCount--; //敌人总数减1
			}
			return;
		}
		//根据敌人的类型设定触发动作间隔
		switch (spriteType)
		{
		case rest1: //静止不动的士兵
			if (!isTrigger)
			{
				trigger(randomTime * 1000); //触发动作
			} else
			{
				nextState = STA_FIRE; //攻击
				isFire = !isFire;
			}
			break;
		case tank2: //坦克
			if (!isTrigger)
			{
				trigger(randomTime); //进入屏幕4秒后触发动作
				break;
			}
			if (isTrigger && isFisrt)
			{
				tempState = enemyState; //保存原来的状态以便开火之后恢复
				nextState = STA_GO_RIGHT; //移动
				isFisrt = false;
				randomTime = gameworld.randomNum(4);
				moveTime = randomTime * 1000;
				if (moveTime == 0)
				{
					moveTime = 1000;

⌨️ 快捷键说明

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