基于DirectX的飛機大戰游戲(C版)的開發與設計(已處理)_第1頁
基于DirectX的飛機大戰游戲(C版)的開發與設計(已處理)_第2頁
基于DirectX的飛機大戰游戲(C版)的開發與設計(已處理)_第3頁
基于DirectX的飛機大戰游戲(C版)的開發與設計(已處理)_第4頁
基于DirectX的飛機大戰游戲(C版)的開發與設計(已處理)_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于DirectX的飛機大戰游戲(C+版)的開發與設計 畢業設計論文 題 目 基于DirectX的飛機大戰游戲C+版的開發與設計 英文題目 The development and Design of Aircraft war game Based on DirectX 學生姓名 學 號 09111629 指導教師職稱 副教授 專 業 軟件工程 東華理工大學軟件學院二零一三年三月 九日 摘 要 飛機游戲是一款風行全球的電視機游戲和掌上游戲機產品,曾幾何時,它創造了一個無法企及的游戲巔峰,也曾影響了一代產業鏈。雖然它輝煌的業績在歷史的渦輪中漸漸遠去,但這款游戲每每提及,總會令人愛不釋手,魂牽夢繞。

2、 這款游戲的名字叫做飛機大戰,它是運行于Windows操作系統下的一款2D游戲,以C/C+為開發語言,構建于Microsoft Foundation Class LibraryMFC框架體系中,其中調用了局部的Win32API函數接口,在Visual C+6.0環境下使用DirectXSDK軟件開發包來開發的一款多媒體游戲。 隨著硬件性能的不斷提高,游戲的日益普及,DirectX開發包的更新和完善,使開發者不在需要過多的關注不同的硬件設備。本論文著眼于DirectSound,DirectDraw的運用,開發出僅由于理論研究的二維平面射擊類游戲。 本文首先分析了電腦游戲的開展歷史,然后分析了制作

3、游戲的根本流程和游戲本身所要包含的哪幾種元素以及游戲應具備的游戲層次。根據2D游戲的特點和游戲的角色,以及給用戶呈現的游戲界面的特效,對2D圖形技術,Windows 圖形界面編程技術GDI,DirectDraw的顯卡接口和DirectSound聲卡接口以及MVC設計模式下的MFC框架等技術進行了比擬仔細的研究。通過自定義一個游戲類CGame,封裝了游戲元素的根本屬性和行為,這樣便于在用到游戲的行為操作是,只要輕松的產生CGame對象便可直接調用其方法,也有利于當升級為雙人游戲,網路版時,只需要在該類中添加相應的行為便可。當我們向用戶呈現游戲運行的界面時,通過Timer時鐘控件,映射到相應的處理

4、函數,使得游戲界面大約每2秒鐘刷新一下界面,這樣才能讓一張位圖背景圖片具有動態效果。當使用DirectSound聲卡接口時,我方和敵方相互射擊所發出的聲音,都是在時鐘映射函數調用時處理的。 關鍵詞:?C/C+; VC+/MFC; 飛機大戰游戲 ABSTRACT Airplane game is a popular global TV game and handheld game products, once upon a time, it creates a game out of reach peak, have influenced a generation of industrial c

5、hain. Although it brilliant performance in the history of turbine faded away, but the game is often mentioned, cuddly, always miss. The game's name is , it is running on Windows operating systems, a 2 d game, with C/C + + as development language, building on the Microsoft Foundation Class Librar

6、y MFC framework, which invokes the part Win32API function interface, in the Visual C + + 6.0 environment using DirectX software development kit SDK to develop a multimedia game. With the constant improvement of the hardware performance, the rising popularity of the game, DirectX development kit upda

7、te and perfect, make developers don't need too much attention to different hardware devices. The use of this thesis focus on DirectSound, DirectDraw, developed only due to the theoretical research of two-dimensional plane shooting game. This article first analyzes the development history of comp

8、uter games, and then analyze the basic process of making game and the game itself need to include what kind of elements and the game should have level. According to the characteristics of the 2 d game and game role, and to the user interface rendering effects, the technology of 2 d graphics, graphic

9、al interface Windows GDI programming technology, the graphics interface and DirectSound DirectDraw sound card interface and MFC framework of MVC design mode to compare the careful research. Through a custom game CGame class, encapsulates the basic attribute of game elements and behavior, so easy to

10、use in the game operation, as long as easy to produce the CGame object can be directly to call its methods, but also to when upgraded to a double game, online version, just need to add the proper behavior in the class. When we present game operation interface to the user, by the Timer clock control

11、that is mapped to the corresponding processing function, makes the game about every 2 seconds refresh interface, in this way can we make a bitmap background picture with dynamic effect. When using DirectSound sound card interface, we and the noise made by enemy fire, are on the clock when processing

12、 the mapping function callKEYWORDS: C/C + +;VC + + MFC /; plane war game 目 錄摘 要ABSTRACT目 錄第1章 緒論11.1選題的目的和意義11.2論文結構安排1第2章 游戲的相關知識和系統開發平臺的闡述22.1游戲根本流程概述22.2游戲系統元素闡述32.3 游戲系統的層次52.4 開發環境和相關技術的概述52.4.1 開發環境:52.4.2 相關技術5第3章 游戲的分析和設計93.1游戲分析93.1.1 概述93.1.2 可行性分析103.2 游戲設計103.2.1游戲總體設計規劃103.2.2 游戲的對戰規那么1

13、1第4章 游戲的各模塊的詳細設計與實現114.1 游戲界面顯示模塊124.1.1 模塊描述124.1.2 模塊功能124.1.3 模塊實現124.2文字消息提示模塊144.2.1 模塊描述144.2.2 模塊功能144.2.3 模塊實現154.3子彈發射模塊164.3.1 模塊描述和功能164.3.2 模塊實現174.4鍵盤操作模塊184.4.1 模塊描述和功能184.4.2 模塊實現194.5全屏模塊194.5.1 模塊描述和功能194.5.2 模塊實現204.6游戲結束模塊214.6.1 模塊描述和功能214.6.2 模塊實現21第5章 論文總結225.1總結22致 謝23參考文獻24附錄

14、25第1章 緒論 過去,人們只要是借助電影,電視,音樂等方式來娛樂。而今天,隨著計算機技術多媒體技術的飛速開展,計算機硬件性能的不斷躍升,以游戲為代表的電子娛樂正成為主流娛樂方式。因為CPU以及顯卡等設備的高速開展,為人們開發出更加炫目多彩的游戲提供了可能。時代的開展,社會的進步,科學技術正以日新月異的速度飛速的向前開展。計算機技術的開展更是迅速而且廣泛。可以說,計算機已經涉及到現代絕大局部行業。目前紛繁復雜的游戲軟件比比皆是,無論在線的網路游戲還是桌面游戲,二維的還是三維立體空間的,多由單機版游戲孕育而來。學習簡單的單機版游戲的制作,有利于初學者了解到游戲制作的理念。目前不管是在國內還是世界

15、范圍內,游戲產業都如雨后的春筍,蓬勃開展,越來越多更具娛樂性的游戲產品被開發出來,這其中在眾多的游戲開發工具中,Microsoft的Visual C+ 系列被認為是當今世界最強大的游戲開發軟件之一。其代表作:魔獸爭霸系列、星際爭霸系列、帝國時代系列 等等等等,幾乎所有的大作都有VC的功績。因此掌握了VC的應用,不但是掌握了一種優秀的開發工具,對于今后參加大型團隊的游戲工程開發也具有一定的幫助。本設計通過開發一個單機版的基于DirectX的射擊類游戲,有一定的娛樂性很值得一試。通過制作這樣一個軟件,可以加深對游戲設計思想的了解,也可以進一步熟悉編程工具的應用,更可以給我們的生活帶來更多的趣味。通

16、過該設計,我將更好的了解windows消息機制,更深的體會到利用Visual C+/MFC開發windows程序的優越性。 第二章介紹游戲的相關知識和背景,以及開發環境的闡述,主要包括對電腦游戲制作的根本流程,游戲元素的分析以及游戲層次的簡要剖析。第三章游戲分析與設計,包括系可行性分析和游戲對戰規那么,介紹基于DirectX開發的多媒體游戲,第四章游戲各模塊的詳細設計與實現,主要包括了6個模塊:游戲操作界面顯示,文字消息提示模塊,子彈發射模塊,鍵盤操作,全屏以及游戲結束模塊。第五章論文的總結,以及相關技術的參考文獻。第2章 游戲的相關知識和系統開發平臺的闡述 一個游戲根本上是一個連續的循環,它

17、完成一系列的邏輯操作,并在屏幕上繪制圖像,具體流程如下: 初始化:在這一步中,游戲程序執行標準初始化操作,如內存分配、資源采集、從磁盤載入數據等等,這和其他Windows應用程序一樣。 進入游戲循環:在這一步中,游戲代碼將進入游戲主循環,此時各種游戲動作和情節開始運行,直到當接受到用戶退出游戲的命令。 獲取玩家的輸入信息: 在這一步中,游戲玩家的輸入信息被處理或緩存,以備下一步人工智能和游戲邏輯使用。 執行人工智能和游戲邏輯:這局部包括了游戲代碼的主體,諸如執行人工智能、物理系統和常規的游戲邏輯,其結果用于渲染下一幀圖像。 渲染下一幀圖像: 游戲的輸入和第四步中游戲人工智能和游戲邏輯執行的結果

18、,被用來產生游戲的下一幀。這個圖像通常放在不可見的緩存區內,因此玩家不會看到它逐漸被渲染的過程。隨后該圖像被迅速拷貝到顯示存儲器中并顯示出來。 同步顯示:通常由于游戲復雜程序不同,游戲在計算機上運行的速度會不一。使用定時器和等待函數確保游戲和最大幀同步,通常認為30FPS(幀/秒)是可以接受的最低速率,而大多數動作玩家將他們的圖形調整到不大于60FPS。 循環:返回到游戲的入口并重新執行上述全部步驟。 關閉:這一步游戲結束,表示將退出主程序或游戲循環,并回到操作系統。然而,在用戶進行結束之前,用戶必須釋放所有的資源并清理系統。 游戲根本流程簡圖如下: 圖-1 游戲根本流程圖 游戲元素是指各類游

19、戲的根本構成要素,該工程主要是側重射擊類游戲,那么其中主要包括4中元素: 1游戲界面:人物造型、戰斗場地、動畫效果等,當玩家在進行游戲時,界面的效果,風格將會在第一時間告訴給玩家,這是游戲的大致輪廓,其中主要包括以下2點:圖形技術:2D和3D圖形技術;游戲視角:第一人稱視角,第三人稱視角,俯視角。 2游戲創意:游戲的創作意義,新奇,驚人,震撼,實效,有較突出的獨立性。 3可玩性:有較強的可玩性,情緒 風格 精神這三個 方面 特征 。可玩性是玩家和樂趣之間的溝通橋梁,不僅表達在單機玩家和電腦對抗中,也表達在多人多角色的競爭中,良好的可玩性是游戲是否能夠占領市場的作用之一。 4游戲聲音:游戲聲音常

20、常用于渲染氣氛,襯托游戲的樂趣,使得游戲不顯得匱乏無力。用于給予聽覺上的反應,例如音效,背景音樂,對話等,高品質的音樂可以到達爭強游戲的表現力的效果。 2.3 游戲系統的層次 游戲系統可以分為三個層次:游戲層,引擎層,系統層,如下列圖所示: 圖-2游戲的層次圖2.4 開發環境和相關技術的概述2.4.1 開發環境: 操作系統:XP,Win7 程序語言:C+ 開發包: MFC ,DirectX(SDK)2.4.2 相關技術 C+ 語言特點 C+是一種從C語言面向過程的根底上派生出的具有面向對象特性的高級編程語言 具體來說C+語言是一種優秀的面向對象程序設計語言,它在C語言的根底上開展

21、而來,但它比C語言更容易為人們學習和掌握。C+以其獨特的語言機制在計算機科學的各個領域中得到了廣泛的應用。面向對象的設計思想是在原來結構化程序設計方法根底上的一個質的飛躍,C+完美地表達了面向對象的各種特性。 主要應用: 單片機、嵌入式。 游戲效勞器、游戲通信。串口通信、USB通信、驅動開發。 早期的鐵路、銀行、證券、內部信息系統等底層方面的開發。面向對象 面向對象是一種對現實世界理解和抽象的方法,通過面向對象的方式,將現實世界的物抽象成對象,現實世界中的關系抽象成類、繼承,幫助人們實現對現實世界的抽象與數字建模。通過面向對象的方法,更利于人理解的方式對于復雜系統的進行分析、設計與編程。同時,

22、面向對象能有效提高編程的效率,通過封裝技術,消息機制可以像搭積木的一樣快速開發出一個全新的系統。其中主要會涉及到“類、對象、 繼承、屬性、方法、靜態、重載、隱藏、重構、聲明、定義、初始化、賦值等,面向對象語言是以對象為中心以消息為驅動。簡單表示為:面向過程編程語言:程序算法+數據;面向對象編程語言:程序對象+消息。 面向對象的程序設計Object-Oriented Programming,簡記為OOP立意于創立軟件重用代碼,具備更好地模擬現實世界環境的能力,這使它被公認為是自上而下編程的優勝者。它通過給程序中參加擴展語句,把函數“封裝進編程所必需的“對象中。對象(Object)是問題域或實現域

23、中某些事物的一個抽象,它反映此事物在系統中需要保存的信息和發揮的作用;它是一組屬性和有權對這些屬性進行操作的一組效勞的封裝體。 關于對象要從兩方面理解:一方面指系統所要處理的現實世界中的對象;另一方面對象是計算機不直接處理的對象,而是處理相應的計算機表示,這種計算機表示也稱為對象。簡單的來說,一個人就是一個對象,一個尺子也可以說是個對象。當這些對象可以用數據直接表示時,我們就稱他為屬性,尺子的度量單位可以是厘米,公尺或英尺,這個度量單位就是尺子的屬性。 通過面向對象的方式,將現實世界的物抽象成對象,現實世界中的關系抽象成類、繼承,幫助人們實現對現實世界的抽象與數字建模。通過面向對象的方法,更利

24、于人理解的方式對于復雜系統的進行分析、設計與編程。 本質上來說,面向對象和面向過程的核心思想是一樣的,區別在于面向過程的重點在功能劃分,并耦合于函數原型;而面向對象的重點是功能+數據的劃分,并耦合于接口,接口就是對象的原型.要注意的接口是劃分的產物。如果連對象都沒劃分清楚,就開始設計接口,最后一定會做不少無用功,弄不好整個軟件被糟糕的接口綁架而走上歧途。對象的劃分比功能劃分要困難許多,因為功能之間的關系可以表示為堆棧模型,是樹狀結構(或DAG,遞歸另算,因為一般不會使用復雜遞歸),而數據之間的關系那么非常復雜,它有兩個方面:空間和值(相當于lvalue和rvalue,前者用于引用,后者用于計算

25、),數據的空間關系是一般圖結構,值關系那么是倒掛的樹狀結構,這也是為什么在自動化靜態分析中,數據分析比過程分析困難許多。而數據的兩重特性更加重了對象劃分的困難。這在設計模式里面可沒提到,因為那本書是先假設你已經劃分好了,然后根據劃分的關系給你提供了20多種模式讓你選擇。如果一上來就先考慮模式,那你就輸了。但是在某些顯而易見的局部設計中,快速選擇一種正確的模式,是條捷徑,這也是設計模式這本書的目的。正是因為對象劃分的困難,所以才有重構,因為人不可能總是走在正確的路上。重構實際上是一種把你往正確道路上引導的方法,使得軟件在演化的過程中不至于撞南墻也不回頭。但是實際的效果還是由人決定的,因為最終是人

26、來選擇往哪個方向去重構。 高效性 C+的程序執行效率高,主要用于底層方面的開發。C+通過指針能夠直接的對內存單元里的數據進行操作,不必通過變量名找到相應的數據地址,再對內存中的數據進行操作,節省了時間開銷,從而提高了程序運行的效率比。除此之外,C+語言還利用了引用、內聯函數與友元提高程序運行效率的機制。引用引入了對象的一個同義詞。定義引用的表示方法與定義指針相似,只是用&代替了*。引用(reference)是C+對C語言的重要擴充。內聯函數在C+類中,應用最廣的,應該是用來定義存取函數。我們定義的類中一般會把數據成員定義成私有的或者保護的,這樣,外界就不能直接讀寫我們類成員的數據了。對

27、于私有或者保護成員的讀寫就必須使用成員接口函數來進行。如果我們把這些讀寫成員函數定義成內聯函數的話,將會獲得比擬好的效率。友元是一種定義在類外部的普通函數,但他需要在類體內進行說明,為了和該類的成員函數加以區別,在說明時前面加以關鍵字friend。友元不是成員函數,但是他能夠訪問類中的私有成員。友元的作用在于提高程式的運行效率,但是,他破壞了類的封裝性和隱藏性,使得非成員函數能夠訪問類的私有成員。 共享性 C+引入了面向對象的設計思想:繼承,多態,封裝。C+語言利用靜態數據成員及成員函數節省內存開銷共享的機制。靜態成員的提出是為了解決數據共享的問題。實現共享有許多方法,如:設置全局性的變量或對

28、象是一種方法。但是,全局變量或對象是有局限性的。這一章里,我們主要講述類的靜態成員來實現數據的共享。重用性 C+語言利用繼承、模板與多態實現無限制重用已有程序代碼的機制。通過繼承機制,可以利用已有的數據類型來定義新的數據類型。所定義的新的數據類型不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。C+中的多態性具體表達在運行和編譯兩個方面。運行時多態是動態多態,其具體引用的對象在運行時才能確定。編譯時多態是靜態多態,在編譯時就可以確定對象使用的形式。在C+中模板是泛型編程的根底,模板可以實現類型的參數化

29、把類型定義為參數,從而實現了真正的代碼可重用性。C+中的模板可分為函數模板和類模板,而把函數模板的具體化稱為模板函數,把類模板的具體化成為模板類。支持泛型程序設計 泛型編程(Generic Programming)最初提出時的動機很簡單直接:創造一種語言機制,能夠幫助實現一個通用的標準容器庫。所謂通用的標準容器庫,就是要能夠做到,比方用一個List類存放所有可能類型的對象這樣的事;泛型編程讓你編寫完全一般化并可重復使用的算法,其效率與針對某特定的數據類型而設計的算法相同。泛型即是指具有在多種數據類型上皆可操作的含意,與模板有些相似。STL巨大,而且可以擴充,它包含很多計算機根本算法和數據結構,

30、而且將算法與數據結構完全別離,其中算法是泛型的,不與任何特定數據結構或對象類型系在一起。 MFC介紹 MFCMicrosoft Foundation Classes,是一個微軟公司提供的類庫(class libraries),以C+類的形式封裝了Windows的API,并且包含一個應用程序框架,以減少應用程序開發人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內建控件和組件的封裝類。MFC是WinAPI與C+的結合。API,即微軟提供的Windows下應用程序的編程語言接口,是一種軟件編程的標準,但不是一種程序開發語言本身,可以允許用戶使用各種各樣

31、的第三方如我是一方,微軟是一方,Borland就是第三方的編程語言來進行對Windows下應用程序的開發,使這些被開發出來的應用程序能在Windows下運行,比方VB、VC+、JAVA、Delhpi。編程語言函數本質上全部源于API,因此用它們開發出來的應用程序都能工作在Windows的消息機制和繪圖里,遵守Windows作為一個操作系統的內部實現,這其實也是一種必要。微軟如果不提供API,這個世上對Windows編程的工作就不會存在,微軟的產品就會迅速從時尚變成垃圾。上面說到MFC是微軟對API函數的專用C+封裝,這種結合一方面讓用戶使用微軟的專業C+ SDK來進行Windows下應用程序的

32、開發變得容易,因為MFC是對API的封裝,微軟做了大量的工作,隱藏了好多程序開發人員在Windows下用C+ & MFC編制軟件時的大量內節,如應用程序實現消息的處理、設備環境繪圖,這種結合是以方便為目的的,必定要付出一定代價這是微軟的一向作風,因此就造成了MFC對類封裝中的一定程度的的冗余和迂回,但這是可以接受的。MFC是微軟封裝了的API。什么意思呢?Windows作為一個提供功能強大的應用程序接口編程的操作系統,確實方便了許多程序員,傳統的win32開發(直接使用Windows的接口函數API)對于程序員來說非常的困難,因為,API函數實在太多了,而且名稱很亂,從零構架一個窗口動

33、輒就是上百行的代碼。MFC是面向對象程序設計與Application framework的完美結合,它將傳統的API進行了分類封裝,并且為你創立了程序的一般框架。 Visual C+ 6.0,簡稱VC或者VC6.0,是微軟推出的一款C+編譯器,將“高級語言翻譯為“機器語言(低級語言)的程序。Visual C+是一個功能強大的可視化的軟件開發平臺。自1993年Microsoft公司推出Visual C+1.0 后,隨著其新版本的不斷問世,Visual C+已成為專業程序員進行軟件開發的首選工具。雖然微軟公司推出了 Visual C+.NETVisual C+7.0,但它的應用有很大的局限性,只適

34、用于Windows 2000、Windows XP和Windows NT4.0。所以實際中,更多的是以Visual C+6.0為平臺。Visual C+6.0由Microsoft開發, 它不僅是一個C+ 編譯器,而且是一個基于Windows操作系統的可視化集集成開發環境(integrated development environment,IDE)。Visual C+6.0由許多組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導Class Wizard等開發工具。 這些組件通過一個名為Developer Studio的組件集成為和諧的開發環境。Visual C+6.0以擁有語法

35、高亮,自動編譯功能以及高級除錯功能而著稱。比方,它允許用戶進行遠程調試,單步執行等。還有允許用戶在調試期間重新編譯被修改的代碼,而不必重新啟動正在調試的程序。其編譯及創立預編譯頭文件stdafx.h、最小重建功能及累加連結link著稱。這些特征明顯縮短程序編輯、編譯及連結的時間花費,在大型軟件方案上尤其顯著。 關于DirectX DirectX,(Direct eXtension,簡稱DX)是由微軟公司創立的多媒體編程接口。由C+編程語言實現,遵循COM。Microsoft DirectX 是這樣一組技術:它們旨在使基于Windows 的計算機成為運行和顯示具有豐富多媒體元素(

36、例如全色圖形、視頻、3D 動畫和豐富音頻)的應用程序的理想平臺。DirectX 包括平安和性能更新程序,以及許多涵蓋所有技術的新功能。應用程序可以通過使用DirectX API 來訪問這些新功能。DirectX是由很多API組成的,按照性質分類,可以分為四大局部,顯示局部、聲音局部、輸入局部和網絡局部。(1)顯示局部擔任圖形處理的關鍵,分為DirectDraw(DDraw)和Direct3D(D3D),前者主要負責2D圖像加速。后者那么主要負責3D效果的顯示,比方CS中的場景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。 (2)聲音局部中最主要的API是Direct

37、Sound,除了播放聲音和處理混音之外,還加強了3d音效,并提供了錄音功能。我們前面所舉的聲卡兼容的例子,就是利用了DirectSound來解決的。(3)輸入局部DirectInput可以支持很多的游戲輸入設備,它能夠讓這些設備充分發揮最正確狀態和全部功能。除了鍵盤和鼠標之外還可以連接手柄、搖桿、模擬器等。(4)網絡局部DirectPlay主要就是為了具有網絡功能游戲而開發的,提供了多種連接方式,TCP/IP,IPX,Modem,串口等等,讓玩家可以用各種連網方式來進行對戰,此外也提供網絡對話功能及保密措施。 第3章 游戲的分析和設計3.1游戲分析3.1.1 概述 隨現今經濟及計算機多媒體技術

38、的飛速開展,計算機游戲日益受到人們的親睞,成為人們生活中重要的組成局部。目前紛繁復雜的計算機游戲,多由單機版游戲開展而來,學習簡單的單機版游戲制作,有益于加深對計算機游戲的制作理念的理解,也將有益于今后參加更加復雜的工程。 本游戲系統以Visual C+ 6.0作為系統應用程序開發工具,以MFC中單文檔應用程序為程序根底,開發實現的2D單機版射擊類游戲。3.1.2 可行性分析1技術可行性 本游戲以C/C+語言為根底,以Visual C+6.0(簡稱vc+)為開發平臺。通過微軟提供的MFC框架實現的基于DirectX的簡單的飛機射擊游戲。C+,是在C語言的根底上開展而來,C+保存了C語言的所有優

39、點,增加了面向對象的機制。C+面向對象編程語言具有如下4個根本特征:抽象,繼承,封裝,多態。MFC,微軟根底類Microsoft Foundation Classes,實際上是微軟提供的,用于在C+環境下編寫應用程序的一個框架和引擎,VC+是Windows下開發人員使用的專業程序C+ 開發包的SDKSDK,Standard SoftWare Develop Kit,專業軟件開發平臺,MFC就是掛在它之上的一個輔助軟件開發包,MFC作為與VC+血肉相連的局部注意C+和VC+的區別:C+是一種程序設計語言,是一種大家都成認的軟件編制的通用標準,而VC+只是一個編譯器。MFC是Win API與C+的

40、結合,API,即微軟提供的WINDOWS下應用程序的編程語言接口,是一種軟件編程的標準,但不是一種程序開發語言本身,可以允許用戶使用各種各樣的第三方。MFC是微軟對API函數的專用C+封裝,這種結合一方面讓用戶使用微軟的專業C+ SDK來進行Win下應用程序的開發變得容易,因為MFC是對API的封裝,微軟做了大量的工作,隱藏了好多程序開發人員在Win下用C+ & MFC編制軟件時的大量內節,如應用程序實現消息的處理,設備環境繪圖,這種結合使得應用程序開發人員開發更加方便了,產品的開發周期大大降低,效率提高了。 DirecX是微軟提供的多媒體編程接口 ,遵循COM技術,使得游戲的聲音特效

41、,顯示局部,輸入信息局部和網路局部的開發更加便捷。 2操作可行性分析 本游戲以傳統的C/S為體系結構,對用戶的計算機硬件沒有什么特別的要求,也不需要用戶具有較高的計算機水平。只需一臺安裝了XP/win7等操作環境,聲卡和顯卡功能正常。3.2 游戲設計3.2.1游戲總體設計規劃本游戲的整體結構如下: 圖-3本游戲的整體結正方:玩家。具有生命力(本游戲初始設為7),有火力(本游戲分為3中:單火力,雙火力,和強火力),每次被炸毀生命力就減1,直到玩家的生命力為0時,結束游戲.反方:電腦本身,即敵機。敵機的出現是隨機的,子彈的發射是按照一定的位置移動的,直到碰到游戲界面的末端。火力:火力的存在是單獨的

42、,其作用在于為玩家效勞的,當玩家的火力值大于5時,生命力和火力都會增強。火力的產生,初始值為0,表示單火力,之后沒添加一個火力,值增加1。背景:本游戲的背景設置是動態的,利用時鐘控件,實現通過移動位圖背景來映射飛機的前進飛行。3.2.2 游戲的對戰規那么 實現游戲的規那么,這個是游戲的根底,也是必修準確無誤實現的功能。本游戲的對戰規那么圖如下: 圖-4 本游戲的對戰規 第4章 游戲的各模塊的詳細設計與實現 系統功能模塊結構總圖如下: 圖-5 系統功能模塊結構總圖 4.1 游戲界面顯示模塊4.1.1 模塊描述 游戲界面是對游戲第一印象的構成局部,本游戲界面表現的是全屏,由于位圖本身的限制,我們不

43、可能總是畫那么多的位圖,也不可能利用放大縮小位圖的方法,這樣會產生嚴重的閃爍,但是可以利用空白的方法,獲取屏幕大小的函數獲得屏幕的分辨率大小,然后設法將位圖顯示到屏幕的中間。4.1.2 模塊功能 本模塊的功能就是要將各個游戲元素顯示出來,那么首先要獲取屏幕的寬度和高度,并且保存為全局變量,這樣方便以后在別的地方使用。接下來是顯示背景,背景的高度為2000像素,遠遠大于屏幕的像素,但是背景的寬度是有限的,我們必須確定位圖的起點:width-800/2,0。寬度一定:800,高度就是height。在具體實現上,我們依然利用透明背景位圖的顯示函數,但是顯示由于一些變量的關系,我們只能給背景數組賦值。

44、4.1.3 模塊實現 該模塊的算法描述: 首先建立基于單文檔的MFC應用程序,名字任取,如: FightingBetweenThePlanes。然后在類視圖中C*View中找到OnDraw成員函數, 該函數功能就是在MFC框架啟動后繪制應用程序的主界面,但凡最先呈現給用戶視圖,都是在本功能函數中實現,并且利用該函數的參數pDC,即上下文設備描述表,就相當于畫家的畫布,要繪制出漂亮的界面,總得先要張畫布吧。其次,通過先獲得屏幕窗口的矩形區域,經過計算獲取游戲界面顯示的屏幕區域.。接著通過pDC設備描述表選入一張背景圖片,再接著就是通過BiTBlt函數將這張背景圖片繪制到游戲主界面上。最后,就是通

45、過自定義的類CGame類,該類封裝了游戲相應的行為和屬性,這樣便可以通過該類的成員函數SetTransparentBitmap在主界面上顯示我方飛機位圖,火力位圖,以及游戲結束后的界面等。 該模塊的算法流程圖如下: 圖-6 該模塊算法流程圖 該模塊的關鍵實現編碼如下: GetWindowRect&WindowRect;/ 獲得屏幕窗口的矩形區域 /將背景圖片對象選入設備描述表 Dc.SelectObjectbackmap; /繪制兩張位圖,并使它們連接 pDC-BitBltwidth-800/2,0,8000,height,&Dc,0,goup-2000,SRCCOPY; pD

46、C-BitBltwidth-800/2,0,8000,height,&Dc,0,goup,SRCCOPY; /顯示我方飛機 /.SafeHdc,game.plane,width-800/2+game.xStart*50+20, game.yStart*height/600*50, 0,0, game.cTransparentColor; /顯示火力位圖 /.SafeHdc,game.bmfire,width-800/2+game.pointfire.x*50+20, game.pointfire.y*height/600*50, 0,0, game.cTransparentColor;

47、 game.GameOverpDC,rect; /游戲結束 該模塊的效果圖如下: 圖-7 本游戲主界面的效果圖4.2.1 模塊描述 游戲中的消息提示功能可以方便玩家與游戲更好的交互,及時了解游戲的更新狀態。并且提示其他輔助功能的操作快捷方式,增加游戲界面顯示的友好性。4.2.2 模塊功能 此模塊的功能是在游戲界面中顯示對應的文字提示消息,方便玩家按照提示操作游戲界面,豐富游戲界面元素。 4.2.3 模塊實現 首先我將文字消息顯示功能封裝在CGame類中,將消息提示作為游戲類的一個屬性行為,命名為ShowMessageCDC*pDC,int width,int height,提供三個參數,pDC

48、為消息提示的設備描述表,其余兩個是提示顯示的位置。然后創立字體大小和顏色。最后就是顯示提示消息到游戲主界面上。 該模塊的算法流程圖如下: 圖-8 文字提示模塊的算法流程圖 該模塊的關鍵編碼如下: font.CreatePointFont250,"Comic Sans MS"/創立字體并設置大小pDC-SetTextColorRGB244,10,0;/設置字體顏色 pDC-TextOutwidth-800/2+100,height-50,"暫停:F3退出:Esc重玩:F1"/輸出提示消息4.3.1 模塊描述和功能 子彈發射是射擊類游戲必要的游戲元素之一,由

49、于游戲角色分為玩家和敵方,所以該模塊也要分為玩家一方發射子彈和敵方發射子彈,并包括了敵方子彈移動實現。該模塊的要分別實現玩家和敵方各自的射擊功能,當子彈發射時同時出現聲音特效,當擊中目標時要顯示飛機炸毀的效果圖。4.3.2 模塊實現 該模塊分為兩局部:一是:我方戰機子彈發射子單元模塊。二是:敵方戰機發射子彈的子單元模塊。他們都要考慮到子彈發射方向和出現的開始位置。其中我方戰機子單元模塊還要考慮到隨著火力的增強,子彈的出現位置也就要變化。 該模塊的算法流程圖如下: 圖-9 子彈發射模塊的算法流程圖 玩家發射子彈關鍵編碼如下: /我方戰機發射 / 一線火力,即初始化火力,方向為飛機正上方,向上移動 iffire0ifbackxStarti3 /如果有敵機 backxStarti7; /敵機被炸位圖 / 兩線火力 iffire1 backxStart-iyStart-i7; /左上角 /右上角 ifbackxStart+iyStart-i3 backxStart+iyStart-i7; else backxStart+iyStart-i2; /其他 三線火力 iffire1 /正前方 ifbackxStart+iyStart-i3 backxStart+iyStart-i7; else backxStart+iyStart-i2; 敵方戰機發射子彈關鍵編碼如下: /敵機發射子

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論