本篇介紹坦克大戰(zhàn)游戲除坦克之外的幾個角色。
http://wiki.jikexueyuan.com/project/android-game-design/images/16.jpg" alt="pic" />
子彈類,屏幕中所有顯示子彈從一個子彈池 BULLET_POOL 中取出,子彈有方向,速度,及強度等屬性,高強度的子彈可以擊破石塊。 它每個游戲幀所要完成的操作如下。
/**
* Operation be done in each tick.
*/
public void tick(){
if (!isVisible() || direction==BattleField.NONE)
return;
// Move the bullet.
move(dx, dy);
int x = getRefPixelX();
int y = getRefPixelY();
PlayerTank playerTank=(PlayerTank)Tank.getTank(0);
//outside the battle field, hitting the border
if (x <= 0 || x >= battleField.getWidth() || y <= 0
|| y >= battleField.getHeight()) {
//this is to avoid explosition outside the battlefield.
if(x<=0) x=0;
if(x >= battleField.getWidth()) x= battleField.getWidth();
if(y<=0) y=0;
if(y>= battleField.getHeight())y=battleField.getHeight();
setPosition(x,y);
explode();
return;
}
// See if it hit a tank.
if (friendly) {
// See if it hit an enemy tank.
for (int i = 1; i < Tank.POOL_SIZE; i++) {
EnemyTank enemy = (EnemyTank)Tank.getTank(i);
if (enemy!=null && enemy.isVisible() &&
collidesWith(enemy, false)) {
enemy.explode();
explode();
return;
}
}
} else {
// See if it hit player tank.
if (collidesWith(playerTank, false)) {
playerTank.explode();
explode();
return;
}
}
//check to see if hit player's home
if(Powerup.isHittingHome(this)){
//TODO: Game Over
explode();
return;
}
// See if it hit a wall.
if (battleField.hitWall(x, y, strength)) {
explode();
return;
}
// See if it hit another bullet.
for (int i = 0; i < POOL_SIZE; i++) {
Bullet anotherBullet=BULLET_POOL;
if(this!=anotherBullet && anotherBullet.isVisible()){
if (collidesWith(anotherBullet, false)) {
explode();
BULLET_POOL.explode();
return;
}
}
}
}
要判斷是否擊中墻壁,對方坦克,或是對方子彈,是否擊中“家”,如果有,則爆炸,如都沒有,則同方向前行一步。 爆炸類,子彈擊中障礙物(墻,子彈,坦克)時顯示爆炸動畫效果。它有兩種一個是大爆炸,一個是小爆炸。 它每個游戲幀所要完成的操作比較簡單,每步顯示一個動畫幀,直到顯示完。
/**
* Operation be done in each tick.
*/
public void tick() {
if (!isVisible())
return;
nextFrame();
if (getFrame() == 0){
setVisible(false);
}
}
增強寶貝類,有多種,無敵,加坦克,地雷,定時器等。不同的增強寶貝可以使玩家獲得不同的能力,玩過坦克大戰(zhàn)游戲的人都比較熟悉。
在游戲進行中, 會不時或者當玩家打中紅色坦克時,會有游戲中隨機出現(xiàn)不同增強寶貝。
它每個游戲幀所要完成的操作如下:
如果玩家得到“無敵”增強功能時,“無敵”具有一定的時效性,需要判斷無敵是否過時,其它時候則讓該增強寶貝有閃爍效果,引起玩家注意。
/**
* Operation be done in each tick.
*/
public void tick(){
if(type==NOTHING || !isVisible()) return;
long tickTime = System.currentTimeMillis();
long refreshPeriod=MILLIS_PER_TICK;
//invulnerable powerup is controlled by the player tank.
if(type!=INVULNERABLE &&type!=HOME && type!=HOME_DESTROYED){
if(tickTime-startTime>livePeriod){
setFrame(NOTHING);
setVisible(false);
return;
}
}else{
refreshPeriod=MILLIS_PER_TICK/10;
}
if(timeTaken>=refreshPeriod){
showNextFrame=!showNextFrame;
if(type==INVULNERABLE){
if(showNextFrame){
setFrame(0);
}else{
setFrame(1);
}
}else if(type==HOME || type==HOME_DESTROYED){
setFrame(type);
}else{
if(showNextFrame){
setFrame(type);
}else{
setFrame(NOTHING);
}
}
timeTaken = System.currentTimeMillis() - tickTime;
} else{
timeTaken+=1;
}
}
最后一個是分數(shù)類,比較簡單,它每個游戲幀所要完成的操作如下
/**
* Operation be done in each tick.
*/
public void tick(){
if(isVisible()){
long tickTime = System.currentTimeMillis();
if(startTime>0){
if(tickTime-startTime>livePeriod){
setVisible(false);
startTime=0;
return;
}
}
}
}
在屏幕上顯示幾秒種后消失。