📄 enemy.java
字号:
}
}
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 + -