六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

對于飛機射擊類游戲的設計原理

[摘要]眾所周知,飛機射擊類游戲幾乎是我們接觸到的第一類計算機游戲,不論是在街機中還是在計算機中,這一類游戲都是非常容易上手和招人喜愛的。就算是在這個即時戰略游戲、3D第一視角游戲等盛行的年代,閑暇是玩玩打飛機的游戲也是很愜意的。 在這幾天里學完了有關 DirectX 方面的知識后,就上手編了一下飛機...
  眾所周知,飛機射擊類游戲幾乎是我們接觸到的第一類計算機游戲,不論是在街機中還是在計算機中,這一類游戲都是非常容易上手和招人喜愛的。就算是在這個即時戰略游戲、3D第一視角游戲等盛行的年代,閑暇是玩玩打飛機的游戲也是很愜意的。

  在這幾天里學完了有關 DirectX 方面的知識后,就上手編了一下飛機射擊的游戲?雌饋砗孟蠛軓碗s,其實只不過是些數據結構的集合而已,還是比較容易實現的。

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

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

  很顯然,用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 AddBullet(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的映射,就可以產生一幅背景圖了。如果想產生立體感,或者背景中的單位有遮蓋現象,可以通過

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

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


主站蜘蛛池模板: 色吧在线视频 | 日本一区二区三区在线 视频观看免费 | 日本不卡一区二区三区视频 | 午夜性刺激在线观看视频 | 四虎永久免费地址在线网站 | 手机福利视频一区二区 | 青青草原伊人网 | 天天综合色天天综合网 | 午夜国产福利 | 欧美综合图区亚洲综合图区 | 最新中文字幕免费视频 | 日韩精品一区二区三区中文版 | 日韩免费在线观看视频 | 中文字幕一区波多野结衣 | 天堂在线网 | 色综合久久夜色精品国产 | 手机看片日韩欧美 | 日本五级床片午夜视频 | 青娱乐极品视频在线观看 | 欧美亚洲h在线一区二区 | 日韩一二区 | 天天干在线免费视频 | 青草久久精品亚洲综合专区 | 色天使在线观看 | 四虎影院在线播放 | 天堂网视频在线 | 色狠台湾色综合网站 | 香港毛片免费看 | 欧美专区在线 | 婷婷免费在线 | 四虎新地址 | 爽爽影院在线看 | 日本不卡在线视频高清免费 | 天堂资源中文在线 | 一区二区三区精品视频 | 伊人久久网站 | 天堂日本岛a | 日本高清视频在线免费观看 | 四虎成人影院 | 欧洲美女高清一级毛片 | 欧美亚洲一区 |