關於飛機射擊類遊戲的設計原理 (轉)
關於飛機射擊類遊戲的設計原理
作者:尹龍
水平有限,請別見怪:)
眾所周知,飛機射擊類遊戲幾乎是我們接觸到的第一類遊戲,不論是在街機中還是在計算機中,這一類遊戲都是非常容易上手和招人喜愛的。就算是在這個即時戰略遊戲、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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於遊戲打擊感的帖子[轉]遊戲
- 動作與射擊漫談:格鬥遊戲中的動作設計遊戲
- 遊戲策劃設計中關於遊戲節奏的控制(轉)遊戲
- [原始碼和文件分享]基於VC++的MFC類庫的飛機大戰遊戲的設計與實現原始碼C++遊戲
- 解謎遊戲謎題設計研究(二):機關類謎題設計遊戲
- Tobii眼動儀和玩射擊類遊戲簡直絕配遊戲
- 第一人稱射擊類遊戲(FPS)的發展起源遊戲
- 關於Servlet的原理以及常用類Servlet
- 設計、故事、運營、機制,關於遊戲的13本書遊戲
- 淺談“第一人稱射擊類”遊戲的起源和發展遊戲
- 入局即巔峰?休閒射擊類遊戲的困局、現局與來局遊戲
- 關於元件基類取值方法的設計,求教!元件
- SIMULIA的飛機通訊系統設計
- 觀點:關於遊戲系統的規劃、設計與實現。 (轉)遊戲
- 角色扮演遊戲引擎的設計原理與分析(轉)遊戲引擎
- 關於螢幕程式設計(轉)程式設計
- 關於VC中的DLL的程式設計 (轉)程式設計
- 關於 DDoS 攻擊事件的探討(轉)事件
- 遊戲設計的第一原理:獎勵,動機,行為遊戲設計
- 關於程式設計風格的討論 (轉)程式設計
- 關於設計自身遊戲作品的5點建議遊戲
- 獨立遊戲經驗帖:清版射擊《安妮》玩法和關卡開發回顧遊戲
- 大地圖、快節奏“動作+射擊”PVPVE,《鈴蘭計劃》的主機野心地圖
- 關於繼承內部類——java程式設計思想示例程式分析; (轉)繼承Java程式設計
- 趣味動態圖!機械原理與飛機是怎麼飛的
- 關於動態音樂設計的思考-Part 1-設計分類學
- 遊戲機制設計:生活邏輯轉化為遊戲邏輯的設計形式遊戲
- python 打飛機專案 ( 讓敵機發射子彈 )Python
- “降維打擊”的《飛機大廚Airplane Chefs》能帶領著Cooking遊戲起飛嗎?AI遊戲
- 關於設計模式的設計模式
- 關於教育機器人的模組式程式設計機器人程式設計
- 一個關於pynoi遊戲的C語言程式設計遊戲C語言程式設計
- 關於遊戲內建商店的4個設計建議遊戲
- 從學生到程式設計師(四) 關於非計算機專業 (轉)程式設計師計算機
- ·關於IFC檔案讀取類的設計的想法(LocalPlacement)
- 在手機上程式設計:自制的小飛可程式設計複數計算器(小飛計算器)程式設計
- 基於關卡設計維度的戰棋遊戲系統與關卡設計用例遊戲
- 關於一些類病毒隱藏技術的設想 (轉)