📄 gamegame.java
字号:
DefUpdateKidnappers(DefKidnapper_t[] pKidnappers,
short nrOfKidnappers,
DefTheShot_t[] pEnemyShots,
short nrOfShots,
DefWorld_t pWorld,
DefPlayer_t pPlayer,
DefHuman_t[] pHumans,
short nrOfHumans,
byte nrOfKidnappings,
byte terrainHeight)
{
short ix;
byte Cnt = 0;
boolean isKilled;
isKilled = false;
for (ix = 0; ix < nrOfKidnappers; ix++)
{
if (pKidnappers[ix].enemy.Valid)
{
Cnt++;
pKidnappers[ix].enemy.FrameDelayCnt++;
if (pKidnappers[ix].enemy.FrameDelayCnt >= pKidnappers[ix].enemy.FrameDelay)
{
pKidnappers[ix].enemy.FrameDelayCnt = 0;
pKidnappers[ix].enemy.FrameIx = (byte)((pKidnappers[ix].enemy.FrameIx + 1) % pKidnappers[ix].enemy.pAnim.nrOfFrames);
pKidnappers[ix].enemy.reflectable.collidable.object.pAppearance = pKidnappers[ix].enemy.pAnim.pAppearance[pKidnappers[ix].enemy.FrameIx];
}
pKidnappers[ix].enemy.xpos = (short)(pKidnappers[ix].enemy.xpos + pKidnappers[ix].enemy.xspeed);
pKidnappers[ix].enemy.ypos = (short)(pKidnappers[ix].enemy.ypos + pKidnappers[ix].enemy.yspeed);
if (pKidnappers[ix].enemy.xpos < 0)
{
pKidnappers[ix].enemy.xpos = (short)(pKidnappers[ix].enemy.xpos + pWorld.width);
}
if (pKidnappers[ix].enemy.xpos >= pWorld.width)
{
pKidnappers[ix].enemy.xpos = (short)(pKidnappers[ix].enemy.xpos + (-pWorld.width));
}
switch (pKidnappers[ix].enemy.status)
{
case 8 :
pKidnappers[ix].enemy.xspeed = (short) (GARand() % ( 2 + 1));
pKidnappers[ix].enemy.yspeed = (short) (GARand() % ( 1 + 1));
pKidnappers[ix].enemy.status = 1 ;
break;
case 5 :
if (pKidnappers[ix].pHuman.status != 1 || (pKidnappers[ix].enemy.yspeed > -1 && pKidnappers[ix].enemy.yspeed < 1))
{
nrOfKidnappings--;
pKidnappers[ix].enemy.status = 1 ;
pKidnappers[ix].enemy.xspeed = (short) (GARand() % ( 2 + 1));
pKidnappers[ix].enemy.yspeed = (short) (-(GARand() % ( 1 + 1)));
pKidnappers[ix].enemy.status = 1 ;
}
else
if (pKidnappers[ix].enemy.xpos >= pKidnappers[ix].pHuman.reflectable.collidable.object.xpos - 2
&& pKidnappers[ix].enemy.xpos <= pKidnappers[ix].pHuman.reflectable.collidable.object.xpos + 2 && pKidnappers[ix].enemy.ypos > pWorld.height - 10)
{
pKidnappers[ix].enemy.status = 6 ;
pKidnappers[ix].enemy.xspeed = 0;
pKidnappers[ix].enemy.yspeed = - 1 ;
pKidnappers[ix].enemy.reflectable.radarAppearance = RA_Kidnapped;
}
else
if (pKidnappers[ix].enemy.ypos >= pWorld.height - 6)
{
pKidnappers[ix].enemy.status = 1 ;
pKidnappers[ix].enemy.yspeed = (short) (-(GARand() % ( 1 + 1)));
nrOfKidnappings--;
}
break;
case 6 :
pKidnappers[ix].enemy.reflectable.collidable.object.pAppearance = pKidnappers[ix].enemy.pAnim.pAppearance[2];
if (pKidnappers[ix].enemy.ypos <= 0)
{
if (DefTransformToSuperalien(pKidnappers[ix], ix))
{
Cnt--;
isKilled = true;
pKidnappers[ix].enemy.Valid = false;
}
}
else
{
if (pKidnappers[ix].enemy.yspeed == (- 1 ))
{
pKidnappers[ix].enemy.yspeed = 0;
}
else
{
pKidnappers[ix].enemy.yspeed = - 1 ;
}
}
break;
default:
if (GARand() % 100 > DefGlobalState_p.GameState.kidnapperShoot)
{
short[] xspeed = new short[1];
short[] yspeed = new short[1];
if (DefCalculateSpeeds(pKidnappers[ix].enemy.xpos,
pKidnappers[ix].enemy.ypos,
pPlayer.xpos, pPlayer.ypos, (short)30, xspeed, yspeed, (short)1 , (short)1 , (byte)1, pWorld))
{
DefEnemyFireShot(pEnemyShots, nrOfShots, pKidnappers[ix].enemy.xpos, pKidnappers[ix].enemy.ypos, xspeed[0], yspeed[0]);
}
}
else
if (GARand() % 100 > DefGlobalState_p.GameState.kidnapperKidnap
&& pKidnappers[ix].enemy.status != 5
&& pKidnappers[ix].enemy.status != 6 && nrOfKidnappings < 2 )
{
if (DefDoKidnapp(pKidnappers[ix], pHumans, nrOfHumans, pWorld))
{
nrOfKidnappings++;
}
}
}
if (isKilled == false)
{
if (pKidnappers[ix].enemy.ypos <= 0)
{
pKidnappers[ix].enemy.ypos = 0;
pKidnappers[ix].enemy.xspeed = (short) (GARand() % ( 2 + 1));
pKidnappers[ix].enemy.yspeed = (short) (GARand() % ( 1 + 1));
}
else if (pKidnappers[ix].enemy.ypos >= pWorld.height - 6 && pKidnappers[ix].enemy.status == 1 )
{
pKidnappers[ix].enemy.status = 1 ;
pKidnappers[ix].enemy.yspeed = (short) (-(GARand() % ( 1 + 1)));
}
else if (pKidnappers[ix].enemy.FrameIx == 0 && pKidnappers[ix].enemy.status == 1 )
{
pKidnappers[ix].enemy.xspeed = (short) (GARand() % ( 2 + 1));
pKidnappers[ix].enemy.yspeed = (short) (GARand() % ( 1 + 1));
}
pKidnappers[ix].enemy.reflectable.collidable.object.xpos = pKidnappers[ix].enemy.xpos;
pKidnappers[ix].enemy.reflectable.collidable.object.ypos = pKidnappers[ix].enemy.ypos;
}
}
}
return Cnt;
}
/**
*
*
*
* @param pBombers
* @param nrOfBombers
* @param pWorld
* @param pMines
* @param nrOfMines
* @param terrainHeight
*
* @returns
*/
byte
DefUpdateBombers(DefBomber_t[] pBombers,
short nrOfBombers,
DefWorld_t pWorld,
DefMine_t[] pMines,
short nrOfMines,
byte terrainHeight)
{
short ix;
byte Cnt = 0;
for (ix = 0; ix < nrOfBombers; ix++)
{
if (pBombers[ix].enemy.Valid)
{
Cnt++;
pBombers[ix].enemy.FrameDelayCnt++;
if (pBombers[ix].enemy.FrameDelayCnt >= pBombers[ix].enemy.FrameDelay)
{
pBombers[ix].enemy.FrameDelayCnt = 0;
pBombers[ix].enemy.FrameIx = (byte)((pBombers[ix].enemy.FrameIx + 1) % pBombers[ix].enemy.pAnim.nrOfFrames);
pBombers[ix].enemy.reflectable.collidable.object.pAppearance = pBombers[ix].enemy.pAnim.pAppearance[pBombers[ix].enemy.FrameIx];
}
if (GARand() % 100 > 94 )
{
DefDropMine(pBombers[ix].enemy.xpos, pBombers[ix].enemy.ypos, pMines, nrOfMines);
}
else
{
pBombers[ix].enemy.xpos++;
if (pBombers[ix].enemy.xpos < 0)
{
pBombers[ix].enemy.xpos = (short)(pBombers[ix].enemy.xpos + pWorld.width);
}
if (pBombers[ix].enemy.xpos >= pWorld.width)
{
pBombers[ix].enemy.xpos = (short)(pBombers[ix].enemy.xpos + (-pWorld.width));
}
if (pBombers[ix].stepper == pBombers[ix].stepBoundary)
{
pBombers[ix].stepBoundary = (short)(-pBombers[ix].stepBoundary);
}
if (pBombers[ix].stepBoundary > 0)
{
pBombers[ix].stepper++;
}
else
{
pBombers[ix].stepper--;
}
pBombers[ix].enemy.ypos = (short)(((terrainHeight - 5 ) / 2) + pBombers[ix].stepper);
pBombers[ix].enemy.reflectable.collidable.object.xpos = pBombers[ix].enemy.xpos;
pBombers[ix].enemy.reflectable.collidable.object.ypos = pBombers[ix].enemy.ypos;
}
}
}
return Cnt;
}
/**
* Updates the super aliens. Makes the aliens behave in different ways.
*
*/
byte
DefUpdateSuperAliens(DefSuperAlien_t[] pSuperAliens,
short nrOfSuperAliens,
DefTheShot_t[] pEnemyShots,
short nrOfShots,
DefWorld_t pWorld,
DefPlayer_t pPlayer,
byte terrainHeight)
{
short ix;
byte Cnt = 0;
for (ix = 0; ix < nrOfSuperAliens; ix++)
{
if (pSuperAliens[ix].enemy.Valid)
{
byte seekPercentage=0;
byte shootPercentage=0;
Cnt++;
pSuperAliens[ix].enemy.xpos = (short)(pSuperAliens[ix].enemy.xpos + pSuperAliens[ix].enemy.xspeed);
pSuperAliens[ix].enemy.ypos = (short)(pSuperAliens[ix].enemy.ypos + pSuperAliens[ix].enemy.yspeed);
if (pSuperAliens[ix].enemy.xpos < 0)
{
pSuperAliens[ix].enemy.xpos = (short)(pSuperAliens[ix].enemy.xpos + pWorld.width);
}
if (pSuperAliens[ix].enemy.xpos >= pWorld.width)
{
pSuperAliens[ix].enemy.xpos = (short)(pSuperAliens[ix].enemy.xpos + (-pWorld.width));
}
if (pSuperAliens[ix].enemy.status == 8 )
{
pSuperAliens[ix].enemy.xspeed = (short) (GARand() % ( 4 + 1) - 4 / 2);
pSuperAliens[ix].enemy.yspeed = (short) ((GARand() % ( 3 + 1)) / 2);
pSuperAliens[ix].enemy.status = 1 ;
}
else if (pSuperAliens[ix].enemy.status == 1 )
{
shootPercentage = 93 ;
seekPercentage = 93 ;
pSuperAliens[ix].madCounter++;
if (pSuperAliens[ix].madCounter > 200)
{
pSuperAliens[ix].enemy.status = 7 ;
}
}
else
{
shootPercentage = 89 ;
seekPercentage = 85 ;
}
if (GARand() % 100 > shootPercentage)
{
short[] xspeed = new short[1];
short[] yspeed = new short[1];
if (DefCalculateSpeeds(pSuperAliens[ix].enemy.xpos,
pSuperAliens[ix].enemy.ypos, pPlayer.xpos, pPlayer.ypos,
(short)30, xspeed, yspeed, (short)2 , (short)2 , (byte)2, pWorld))
{
DefEnemyFireShot(pEnemyShots, nrOfShots, pSuperAliens[ix].enemy.xpos, pSuperAliens[ix].enemy.ypos, xspeed[0], yspeed[0]);
}
}
else if (GARand() % 100 > seekPercentage)
{
short[] tmpX = new short[1];
short[] tmpY = new short[1];
tmpX[0] = pSuperAliens[ix].enemy.xspeed;
tmpY[0] = pSuperAliens[ix].enemy.yspeed;
if (DefCalculateSpeeds(pSuperAliens[ix].enemy.xpos, pSuperAliens[ix].enemy.ypos, pPlayer.xpos, pPlayer.ypos, (short)100, tmpX,
tmpY, (short)4 , (short)3 , (byte)4, pWorld) == false)
{
pSuperAliens[ix].enemy.xspeed = (short) ((GARand() % ( 4 + 1)) - 2);
pSuperAliens[ix].enemy.yspeed = (short) ((GARand() % ( 3 + 1)) / 2);
}
else {
pSuperAliens[ix].enemy.xspeed = tmpX[0];
pSuperAliens[ix].enemy.yspeed = tmpY[0];
}
}
if (pSuperAliens[ix].enemy.ypos <= 0)
{
pSuperAliens[ix].enemy.ypos = 0;
pSuperAliens[ix].enemy.xspeed = (short) ((GARand() % ( 4 + 1)) - 2);
pSuperAliens[ix].enemy.yspeed = (short) (GARand() % ( 3 + 1));
}
else if (pSuperAliens[ix].enemy.ypos >= terrainHeight - 6 )
{
pSuperAliens[ix].enemy.xspeed = (short) ((GARand() % ( 4 + 1)) - 2);
pSuperAliens[ix].enemy.yspeed = (short) -(GARand() % ( 3 + 1));
}
pSuperAliens[ix].enemy.reflectable.collidable.object.xpos = pSuperAliens[ix].enemy.xpos;
pSuperAliens[ix].enemy.reflectable.collidable.object.ypos = pSuperAliens[ix].enemy.ypos;
}
}
return Cnt;
}
/**
* Updates the scouts. Makes the scouts behave in different ways.
*
*/
byte
DefUpdateScouts(DefScout_t[] pScouts,
short nrOfScouts,
DefTheShot_t[] pEnemyShots,
short nrOfShots,
DefWorld_t pWorld,
DefPlayer_t pPlayer,
byte terrainHeight)
{
short ix;
byte Cnt = 0;
for (ix = 0; ix < nrOfScouts; ix++)
{
if (pScouts[ix].enemy.Valid)
{
Cnt++;
pScouts[ix].enemy.xpos = (short)(pScouts[ix].enemy.xpos + pScouts[ix].enemy.xspeed);
pScouts[ix].enemy.ypos = (short)(pScouts[ix].enemy.ypos + pScouts[ix].enemy.yspeed);
if (pScouts[ix].enemy.xpos < 0)
{
pScouts[ix].enemy.xpos = (short)(pScouts[ix].enemy.xpos + pWorld.width);
}
if (pScouts[ix].enemy.xpos >= pWorld.width)
{
pScouts[ix].enemy.xpos = (short)((pScouts[ix].enemy.xpos + (-pWorld.width)));
}
pScouts[ix].enemy.FrameDelayCnt++;
if (pScouts[ix].enemy.FrameDelayCnt >= pScouts[ix].enemy.FrameDelay)
{
pScouts[ix].enemy.FrameDelayCnt = 0;
pScouts[ix].enemy.FrameIx = (byte)((pScouts[ix].enemy.FrameIx + 1) % pScouts[ix].enemy.pAnim.nrOfFrames);
pScouts[ix].enemy.reflectable.collidable.object.pAppearance = pScouts[ix].enemy.pAnim.pAppearance[pScouts[ix].enemy.FrameIx];
}
if (pScouts[ix].enemy.status == 8 )
{
pScouts[ix].enemy.xspeed = (short) ((GARand() % ( 4 + 1)) - ( 4 / 2));
pScouts[ix].enemy.yspeed = (short) (((GARand() % ( 2 + 1)) - ( 2 / 2)) / 2);
pScouts[ix].enemy.status = 1 ;
}
else if (GARand() % 100 > DefGlobalState_p.GameState.scoutShoot)
{
short[] xspeed = new short[1];
short[] yspeed = new short[1];
if (DefCalculateSpeeds(pScouts[ix].enemy.xpos,
pScouts[ix].enemy.ypos,
pPlayer.xpos, pPlayer.ypos, (short)50, xspeed, yspeed, (short) 2 , (short) 2 , (byte)2, pWorld))
{
DefEnemyFireShot(pEnemyShots, nrOfShots, pScouts[ix].enemy.xpos, pScouts[ix].enemy.ypos, xspeed[0], yspeed[0]);
}
}
else if (GARand() % 100 > DefGlobalState_p.GameState.scoutSeek)
{
if (pPlayer.xspeed < 0)
{
short[] tmpX = new short[1];
short[] tmpY = new short[1];
tmpX[0] = pScouts[ix].enemy.xspeed;
tmpY[0] = pScouts[ix].enemy.yspeed;
if (DefCalculateSpeeds(pScouts[ix].enemy.xpos,
pScouts[ix].enemy.ypos,
(short) (pPlayer.xpos + 50),
pPlayer.ypos, (short)100, tmpX, tmpY, (short)4 , (short)2 , (byte)4, pWorld) == false)
{
pScouts[ix].enemy.xspeed = tmpX[0];
pScouts[ix].enemy.yspeed = (short) ((GARand() % ( 2 + 1) - 2 / 2) / 2);
}
else {
pScouts[ix].enemy.xspeed = tmpX[0];
pScouts[ix].enemy.yspeed = tmpY[0];
}
}
else
{
short[] tmpX = new short[1];
short[] tmpY = new short[1];
tmpX[0] = pScouts[ix].enemy.xspeed;
tmpY[0] = pScouts[ix].enemy.yspeed;
if (DefCalculateSpeeds(pScouts[ix].enemy.xpos,
pScouts[ix].enemy.ypos,
(short) (pPlayer.xpos + (-50)),
pPlayer.ypos, (short)100, tmpX, tmpY, (short)4 , (short)2 , (byte)4, pWorld) == false)
{
pScouts[ix].enemy.xspeed = tmpX[0];
pScouts[ix].enemy.yspeed = (short) ((GARand() % ( 2 + 1) - 2 / 2) / 2);
}
else {
pScouts[ix].enemy.xspeed = tmpX[0];
pScouts[ix].enemy.yspeed = tmpY[0];
}
}
}
if (pScouts[ix].enemy.ypos <= 0)
{
pScouts[ix].enemy.ypos = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -