關於飛機射擊類遊戲的設計原理 (轉)

worldblog發表於2007-12-04
關於飛機射擊類遊戲的設計原理 (轉)[@more@]

關於飛機射擊類遊戲的設計原理

作者:尹龍

水平有限,請別見怪:)

  眾所周知,飛機射擊類遊戲幾乎是我們接觸到的第一類遊戲,不論是在街機中還是在計算機中,這一類遊戲都是非常容易上手和招人喜愛的。就算是在這個即時戰略遊戲、3D第一視角遊戲等盛行的年代,閒暇是玩玩打飛機的遊戲也是很愜意的。

  在這幾天裡學完了有關 方面的知識後,就上手編了一下飛機射擊的遊戲。看起來好象很複雜,其實只不過是些資料結構的集合而已,還是比較容易實現的。

  關於 DirectDraw 方面的,我就不想介紹了,因為任何一個人照本書看幾天就可以編出象樣的示範了,無非是在申請的2~3個表面上輪換貼圖而已, 的 似乎已經讓我們不需要花什麼精力就可以實現非常平滑的動畫了。

  下面簡單介紹一下設計方法,關鍵是的飛機和敵人的飛機的控制,以及它們的子彈的控制。

  很顯然,用2個就可以實現它們的控制了。分別是PLAYER的飛機(可以是2架)、敵人的飛機。

  PLAYER的飛機類:

 

class CPlayer
{
private:
  CPoint ptPos;  //飛機座標
  struct bullet *stBullet; //飛機所發出的所有子彈的連結串列

  struct display PlaneDisplay; //即有關飛機的點陣圖資訊指標、飛機有效區域等資訊

private:
  FreshBullet();  //定時重新整理子彈連結串列,除去已經爆炸或消失的子彈

public:
  int nOil;  //飛機油料
  int nSpeed;  //飛機速度
  int nDisplayState; //顯示方式,如果被擊中,就轉向爆炸狀態,以便
  //飛機顯示函式顯示爆炸效果,比如,正常是1,
  //消失是0,而爆炸就是-15。這樣,顯示函式可以
  //單純的按照這個植,在SUFFACE中計算圖象位置
  //直接顯示就可以了,每次+1,這樣-15加了15次就
  //變成0了,動畫也顯示了,飛機也消失了,不需要
  //其他處理。這樣的方法也可以用在子彈的處理上,

public:
  CPoint GetPos();  //獲取飛機的座標
  void SetPos(CPoint);  //社頂設定飛機座標
  void Adullet(struct bullet*); //給飛機加入子彈,只要每隔設定的 TickTime
  //就加入一次,就可以形成連續的發彈效果

  void RunBullet();  //每隔設定的 TickTime,按Bullet的屬性
  //Bullet的座標,就可以形成複雜的子彈效果

struct bullet* IsAttack(CPoint); //獲取當前座標是否有子彈,並返回子彈指標

  //這是為了判斷敵機是否被擊中所設計的函式

  //敵機只要將自己的座標放入CPoint中,就可以

  //知道是否被擊中,並且用指標設定子彈的狀態
}

子彈的STRUCT
struct bullet
{
  struct bullet* next; //指向下一個子彈
  int nStyle;  //子彈的種類
  int nSpeed;  //子彈的速度
  int nDirection;  //子彈的方向
  int nDisplayState;  //顯示方式,如果擊中目標,就轉向爆炸狀態,以便
  //Runbullet函式顯示爆炸效果,同上邊的飛機處理方法一樣
}

敵機的類和PLAYER的飛機類差不多,去掉油料等的屬性,多加入一個MotionStyle屬性,控制飛機的

飛行方式和方式,如直線、斜線、曲線、SIN方式、跟蹤方式等。再加入一個Run()方法,利用

MotionStyle在每個TickTime時,決定飛機座標的變換方法,這樣就可以很直觀的控制飛機的飛行和攻擊。

在判斷雙方是否被攻擊時,只要先用PLAYER物件的IsAttack,將所有敵機物件的座標放入其中,就可以

獲取所有被PLAYER擊中的飛機,反過來用所有敵機的物件IsAttack,將PLAYER飛機的座標放入其中,

就可以知道PLAYER是否被擊中。

 

至於是否被擊中,可以單純的用矩形來判斷,完美的方法當然是用Rgn(區域)來判斷,將飛機的輪廓變

成區域就可以了。

 

至於背景的設計就更簡單了,只要用一個二維陣列,每個陣列單位中存放著點陣圖的代號,透過一個代號與

點陣圖RECT的對映,就可以產生一幅背景圖了。如果想產生立體感,或者背景中的單位有遮蓋現象,可以透過

設定優先順序的方法,將優先順序底的先畫,然後畫優先順序高的,自然就可以產生立體效果了。更簡單的方法就是

直接按從上往下(假設背景立體感是向上的)的順序貼圖,就可以了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987833/,如需轉載,請註明出處,否則將追究法律責任。

相關文章