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

📄 enemy.java

📁 实现了 移动 碰撞检测
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				}
			}
			break;
		case soldier_small4: //随机出现的敌人
		case soldier_big5:
			if (enemyState == STA_GO_RIGHT || enemyState == STA_GO_LEFT)
			{
				if (!isTrigger && isFisrt)
				{ //计算随机移动的时间
					this.randomTime = gameworld.randomNum(4) + 2;
					trigger(randomTime * 1000);
					isFisrt = false;
				} else
				{ //继续用上次的随机数记时
					trigger(randomTime * 1000);
				}
				if (isTrigger)
				{ //随机数时间已到
					isFisrt = true;
					tempState = enemyState; //保存原来的状态
					nextState = STA_FIRE; //开火
				}
			}
			if (enemyState == Enemy.STA_FIRE)
			{
				isFire = !isFire;
			}
			break;
		case plane6: //飞机
			if (enemyState == STA_GO_RIGHT)
			{
				if (!isTrigger)
				{
					trigger(200);
				} else
				{
					isTrigger = false;
					isFire = !isFire;
				}
			}
			break;
		case casern12:
			nextState = STA_FIRE;//攻击
			isFire = !isFire;
			break;
		case supersoj13://特种兵
			if (enemyState == STA_GO_RIGHT || enemyState == STA_GO_LEFT)
			{
				if (!isTrigger && isFisrt)
				{//计算随机移动的时间
					this.randomTime = gameworld.randomNum(3) + 1;
					trigger(randomTime * 1000);
					isFisrt = false;
				} else
				{//继续用上次的随机数记时
					trigger(randomTime * 1000);
				}
				if (isTrigger)
				{//随机数时间已到
					isFisrt = true;
					tempState = enemyState; //保存原来的状态
					nextState = 2; //攻击
					isFire = !isFire;
				}
			} else
			{
				isFire = !isFire;
				//快要被甩出屏幕时自动朝屏幕中心滚动
				if ((this.spriteX - 30) / 16 < gameworld.column)
				{
					changeState(Enemy.STA_ROLL_RIGHT);
				}
			}
			break;
		case bus14: //汽车
			if (!isTrigger)
			{
				trigger(randomTime * 100);
			} else
			{ //随机数时间已到
				isTrigger = false;
				changeState(STA_FIRE);
			}
			break;
		case ship28: //船
			if (enemyState == Enemy.STA_SPUER)//无敌状态
			{
				if (!isTrigger)
				{
					trigger(randomTime * 100);
				} else
				{ //随机数时间已到
					isTrigger = false;
					changeState(STA_GO_RIGHT);
				}
			}
			break;
		}

		boolean temp = playFrame(); //检测各个状态的动画是否完成以及状态之间的切换
		switch (enemyState)
		{
		case STA_DEAD: //死亡状态
			if (temp)
			{
				this.visible = false;
				if (spriteType == rest1 || spriteType == tank2
						|| spriteType == tower3 || spriteType == soldier_small4
						|| spriteType == soldier_big5 || spriteType == plane6
						|| spriteType == supersoj13 || spriteType == bus14
						|| spriteType == ship28)
				{
					gameworld.enemyCount--; //敌人总数减1
				}
			}
			break;
		case STA_TURN_HEAD:
			if (temp)
			{ //掉转炮头之后改变为攻击状态,战斗机也是一样
				changeState(Enemy.STA_FIRE);
			}
			break;
		default:
			if (temp)
			{
				changeState(nextState);
			}
		}
		lastTime = System.currentTimeMillis();
	}

	//根据精灵的类别绘制精灵
	public final void paint(Graphics g)
	{
		if (visible)
		{
			switch (spriteType)
			{//精灵类别
			case rest1:
			case soldier_small4://步兵
				switch (enemyState)
				{ //状态
				case STA_GO_RIGHT: //向右移动
					gameworld.drawFrame(gameworld.smallEnemyImage,
							currentFrame, spriteX + gameworld.offsetX, spriteY,
							25, 40, 1, g);
					break;
				case STA_GO_LEFT: //向左移动
					gameworld.drawFrame(gameworld.smallEnemyImage,
							currentFrame, spriteX + gameworld.offsetX, spriteY,
							25, 40, 0, g);
					break;
				case STA_DEAD: //死亡
					if (spriteType == soldier_small4)
					{ //行走的敌人
						gameworld.drawFrame(gameworld.smallEnemyImage,
								currentFrame, spriteX + gameworld.offsetX
										- addPosition, spriteY, 25, 40, 4, g);
					} else
					{ //静止的敌人
						gameworld.drawFrame(gameworld.smallEnemyImage,
								currentFrame, spriteX + gameworld.offsetX
										- addPosition, spriteY, 25, 40, 4, g);
					}
					break;
				case STA_FIRE: //攻击
					if (spriteType == soldier_small4)
					{//行走士兵的攻击
						gameworld.drawFrame(gameworld.smallEnemyImage,
								currentFrame, spriteX + gameworld.offsetX,
								spriteY, 25, 40, 2, g);
						if (isFire)
							gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
									+ gameworld.offsetX + 5, spriteY + 15, 16,
									16, 2, g);
						break;
					} else
					{ //静止士兵的攻击
						gameworld.drawFrame(gameworld.smallEnemyImage,
								currentFrame, spriteX + gameworld.offsetX,
								spriteY, 25, 40, 3, g);
						if (isFire)
						{
							gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
									+ gameworld.offsetX + 5, spriteY + 15, 16,
									16, 2, g);
						}
						break;
					}
				case STA_REST:
					gameworld.drawFrame(gameworld.smallEnemyImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 25, 40, 3, g);
					break;
				}
				break;
			case tank2: //坦克
				switch (enemyState)
				{
				case STA_DEAD: //爆炸
					gameworld.drawFrame(gameworld.tankImage, 0, spriteX
							+ gameworld.offsetX + 53, spriteY+5, 95, 63,
							currentFrame, g);
					break;
				case STA_FIRE: //攻击
					gameworld.drawFrame(gameworld.tankImage, 0, spriteX
							+ gameworld.offsetX + 50, spriteY+5, 95, 63, 0, g);
					break;
				case STA_FIRE_END: //攻击完成炮火动画
					gameworld.drawFrame(gameworld.tankImage, 0, spriteX
							+ gameworld.offsetX + 50, spriteY+5, 95, 63, 1, g);
					gameworld.drawFrame(gameworld.bombImage, currentFrame,
							spriteX + gameworld.offsetX + 75, spriteY - 5, 63,
							64, 0, g);
					break;

				default:
					gameworld.drawFrame(gameworld.tankImage, 0, spriteX
							+ gameworld.offsetX + 50, spriteY+5, 95, 63,
							currentFrame, g);
					break;
				}
				break;
			case tower3: //塔
				gameworld.drawFrame(gameworld.towerImage, 0, spriteX
						+ gameworld.offsetX, spriteY, 88, 120, 0, g);
				break;
			case soldier_big5: //手雷兵
				switch (enemyState)
				{ //状态
				case STA_DEAD: //死亡
					gameworld.drawFrame(gameworld.bigEnemyImage, currentFrame,
							spriteX + gameworld.offsetX - addPosition, spriteY,
							52, 55, 5, g);
					break;

				case STA_GO_RIGHT: //向右移动
					gameworld.drawFrame(gameworld.bigEnemyImage, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 52, 55, 1, g);
					break;
				case STA_GO_LEFT: //向左移动
					gameworld.drawFrame(gameworld.bigEnemyImage, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 52, 55, 0, g);
					break;
				case STA_FIRE: //扔雷
					gameworld.drawFrame(gameworld.bigEnemyImage, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 52, 55, 3, g);
					break;
				}
				break;
			case plane6: //飞机
				switch (enemyState)
				{
				case STA_DEAD: //爆炸
					gameworld.drawFrame(gameworld.bombImage, currentFrame,
							spriteX + gameworld.offsetX + 10, spriteY, 63, 64,
							0, g);
					break;
				case STA_GO_RIGHT:
					gameworld.drawFrame(gameworld.planeImage, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 92, 48, 0, g);
					if (isFire)
					{ //画出子弹
						gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
								+ gameworld.offsetX + 40, spriteY + 28, 16, 16,
								1, g);
					}
					break;
				}
				break;
			case Hp9: //掉落血瓶
				if (enemyState == STA_GO_RIGHT)
				{ //静止
					gameworld.drawFrame(gameworld.hpImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 12, 28, 0, g);
				} else
				{ //爆炸
					gameworld.drawFrame(gameworld.bombImage, currentFrame,
							spriteX + gameworld.offsetX - 25, spriteY - 20, 64,
							63, 0, g);
				}
				//System.out.println("Hp9 spriteX ="+spriteX+" spriteY ="+spriteY+" gameworld.offsetX ="+gameworld.offsetX);
				break;
			case smallstone10://小石头
				gameworld.drawFrame(gameworld.stoneImage, currentFrame, spriteX
						+ gameworld.offsetX, spriteY, 71, 32, 1, g);
				break;
			case bigstone11://大石头
				gameworld.drawFrame(gameworld.stoneImage, currentFrame, spriteX
						+ gameworld.offsetX, spriteY, 71, 32, 0, g);
				break;
			case casern12: //碉堡
				switch (enemyState)
				{
				case STA_FIRE: //攻击
					gameworld.drawFrame(gameworld.casernImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 91, 54, 0, g);
					gameworld.drawFrame(gameworld.casernImage, 1, spriteX
							+ gameworld.offsetX + 24, spriteY, 91, 54, 0, g);
					gameworld.drawFrame(gameworld.windowImage, 0, spriteX
							+ gameworld.offsetX + 50, spriteY + 18, 24, 24, 1,
							g);
					gameworld.drawFrame(gameworld.windowImage, 0, spriteX
							+ gameworld.offsetX + 82, spriteY + 18, 24, 24, 1,
							g);
					if (isFire)
					{
						gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
								+ gameworld.offsetX + 20, spriteY + 32, 16, 16,
								2, g);
					}
					break;
				default: //静止
					gameworld.drawFrame(gameworld.casernImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 91, 54, 0, g);
					gameworld.drawFrame(gameworld.casernImage, 1, spriteX
							+ gameworld.offsetX + 24, spriteY, 91, 54, 0, g);
					gameworld.drawFrame(gameworld.windowImage, 0, spriteX
							+ gameworld.offsetX + 50, spriteY + 18, 24, 24, 1,
							g);
					gameworld.drawFrame(gameworld.windowImage, 0, spriteX
							+ gameworld.offsetX + 82, spriteY + 18, 24, 24, 1,
							g);

					break;
				}
				break;
			case supersoj13: //特种兵
				switch (enemyState)
				{
				case STA_GO_RIGHT: //向右移动
					gameworld.drawFrame(gameworld.footmanImage3, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 52, 54, 0, g);
					break;
				case STA_DEAD: //死亡
					gameworld.drawFrame(gameworld.footmanImage3, 4, spriteX
							+ gameworld.offsetX, spriteY, 52, 54, currentFrame,
							g);
					break;
				case STA_FIRE: //攻击
					gameworld.drawFrame(gameworld.footmanImage3, 3, spriteX
							+ gameworld.offsetX, spriteY, 52, 54, 1, g);
					if (isFire)
					{
						gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
								+ gameworld.offsetX + 20, spriteY + 10, 16, 16,
								2, g);
					}
					break;
				case STA_GO_LEFT: //向左移动
					gameworld.drawFrame(gameworld.footmanImage3, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 52, 54, 1, g);
					break;
				case STA_ROLL_RIGHT: //向右翻滚
					gameworld.drawFrame(gameworld.footmanImage3, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 52, 54, 2, g);
					break;
				case STA_ROLL_LEFT: //向左翻滚
					gameworld.drawFrame(gameworld.footmanImage3, currentFrame,
							spriteX + gameworld.offsetX, spriteY, 52, 54, 3, g);
					break;

				}
				break;
			case bus14: //汽车
				switch (enemyState)
				{
				case STA_DEAD: //死亡
					gameworld.drawFrame(gameworld.busImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 125, 74,
							currentFrame, g);
					break;
				default: //攻击
					gameworld.drawFrame(gameworld.smallEnemyImage, 1, spriteX
							+ gameworld.offsetX + 100, spriteY + 15, 25, 40, 3,
							g);
					gameworld.drawFrame(gameworld.smallEnemyImage, 1, spriteX
							+ gameworld.offsetX + 70, spriteY + 15, 25, 40, 2,
							g);
					gameworld.drawFrame(gameworld.busImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 125, 74, seed % 2, g);
					if (isFire)
					{
						gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
								+ gameworld.offsetX + 32, spriteY + 28, 16, 16,
								2, g);
						gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
								+ gameworld.offsetX + 75, spriteY + 20, 16, 16,
								2, g);
						gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
								+ gameworld.offsetX + 105, spriteY + 20, 16,
								16, 2, g);
					}
					break;
				}
				break;

			case bomb15://敌人手雷
				switch (enemyState)
				{
				case STA_GO_LEFT://扔出手雷
					gameworld.drawFrame(gameworld.grenadeImage, currentFrame,
							spriteX + gameworld.offsetX, spriteY - 20, 30, 30,
							0, g);
				case STA_GO_RIGHT://扔出手雷
					gameworld.drawFrame(gameworld.grenadeImage, currentFrame,
							spriteX + gameworld.offsetX, spriteY - 20, 30, 30,
							1, g);
					break;
				case STA_DEAD://手雷爆炸
					gameworld.drawFrame(gameworld.bombImage, currentFrame,
							spriteX + gameworld.offsetX - 15,
							spriteY - 15 - 20, 63, 64, 0, g);
					break;
				}
				break;
			case Hp16://医疗箱
				gameworld.drawFrame(gameworld.hpImage, 0, spriteX
						+ gameworld.offsetX, spriteY, 12, 28, 0, g);
				//System.out.println("Hp16 spriteX ="+spriteX+" spriteY ="+spriteY+" gameworld.offsetX ="+gameworld.offsetX);
				break;
			case 21://掉落血瓶
			case 22:
				if (enemyState == STA_GO_RIGHT)
				{//静止
					gameworld.drawFrame(gameworld.hpImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 12, 28, 0, g);
				} else
				{//爆炸
					gameworld.drawFrame(gameworld.bombImage, 0, spriteX
							+ gameworld.offsetX - 25, spriteY - 15, 64, 63,
							currentFrame, g);
				}
				//                    System.out.println("HP21-22 spriteX ="+spriteX+" spriteY ="+spriteY+" gameworld.offsetX ="+gameworld.offsetX);
				break;
			case iteam23://物品掉落
				switch (itemType)
				{
				case 0: //空袭导弹
					gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 16, 16, 3, g);
					break;
				case 1: //子弹
				case 2:
					gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 16, 16, 4, g);
					break;
				}
				break;
			case bhouse24: //大房子
				gameworld.drawFrame(gameworld.houseImage2, 0, spriteX
						+ gameworld.offsetX, spriteY, 168, 87, 0, g);
				break;
			case grass26: //level2 草
				gameworld.drawFrame(gameworld.grassImage, 0, spriteX
						+ gameworld.offsetX, spriteY, 54, 32, seed, g);
				break;
			case coconut27: //level2 椰子树
				gameworld.drawFrame(gameworld.coconutImage, 0, spriteX
						+ gameworld.offsetX, spriteY, 74, 143, 0, g);
				break;
			case ship28://船
				switch (enemyState)
				{
				case STA_GO_RIGHT://展开
				case STA_HIDEING: //隐藏
					gameworld.drawFrame(gameworld.shipImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 95, 63, currentFrame,
							g);
					break;
				case STA_FIRE: //攻击
					gameworld.drawFrame(gameworld.shipImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 95, 63, 2, g);
					if (isFire)
					{
						gameworld.drawFrame(Gameworld.itemImage, 0, spriteX
								+ gameworld.offsetX + 21, spriteY + 30, 16, 16,
								2, g);
					}
					break;
				case STA_SPUER: //静止
					gameworld.drawFrame(gameworld.shipImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 95, 63, 0, g);

					break;
				case STA_DEAD: //爆炸
					gameworld.drawFrame(gameworld.shipImage, 0, spriteX
							+ gameworld.offsetX, spriteY, 95, 63, 3, g);
					break;
				}
				break;
//				
//			case 29: 
//				gameworld.drawFrame(gameworld.searchlightImage, 0, spriteX
//						+ gameworld.offsetX, spriteY, width, height, 0, g);
//				break;
//			case 30: 
//				gameworld.drawFrame(gameworld.potImage, 0, spriteX
//						+ gameworld.offsetX, spriteY, width, height, 0, g);
//				break;
			}		
		}
	}
}

⌨️ 快捷键说明

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