在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Android 坦克大戰(zhàn)游戲設(shè)計解析六
Android 坦克大戰(zhàn)游戲設(shè)計解析八
Android 坦克大戰(zhàn)游戲設(shè)計解析一
Android 坦克大戰(zhàn)游戲設(shè)計解析五
Android 坦克大戰(zhàn)游戲設(shè)計解析六
Android 坦克大戰(zhàn)游戲設(shè)計解析七
Android 坦克大戰(zhàn)游戲設(shè)計解析二
Android 坦克大戰(zhàn)游戲設(shè)計解析三
Android 坦克大戰(zhàn)游戲設(shè)計解析四

Android 坦克大戰(zhàn)游戲設(shè)計解析六

本篇介紹坦克大戰(zhàn)游戲除坦克之外的幾個角色。

  1. Bullet 子彈類。坦克發(fā)射出的子彈在游戲中飛行
  2. Explosion 爆炸類。子彈擊中子彈,障礙物,或是坦克顯示爆炸
  3. Powerup 增強寶貝類。星星,加坦克,定時器等
  4. Score 分數(shù)類。擊中坦克或是攻取增強寶貝,加分顯示,分數(shù)有 100,200,300,400,500,擊中不同坦克分數(shù)不同。
    為直觀起見,參見下圖,紅圈里從上到下分別是 Bullet, Powerup, Explosion, Score.

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;
   }
  }
 }
}

在屏幕上顯示幾秒種后消失。