基于DirectX太空飛行射擊游戲設計與實現_第1頁
基于DirectX太空飛行射擊游戲設計與實現_第2頁
基于DirectX太空飛行射擊游戲設計與實現_第3頁
基于DirectX太空飛行射擊游戲設計與實現_第4頁
基于DirectX太空飛行射擊游戲設計與實現_第5頁
已閱讀5頁,還剩58頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 本科畢業設計(論文)題目名稱: 基于DirectX的太空飛行射擊游戲的設計與實現 學 院: 計算機科學技術學院 專業年級: 計算機科學與技術(工)12級 學生姓名: 楊睿智 班級學號: 計12-1班 33號 指導教師: 張鳳君 二一六 年 六 月 十四 日摘要飛行射擊游戲是一類風靡全球的益智小游戲,多次被移植到PC端和移動端,曾幾何時,它創造了一個無法企及的游戲巔峰,也曾影響力一代產業鏈。如今,雖然它已經不復當年的輝煌,但作為一個時代的經典,它永遠不會消失在歷史的長河中,在現在的智能機時代,它依舊散發著無窮的生命力。出現了雷霆戰機全民飛機大戰等優秀的飛行射擊類游戲。本課題是基于DirectX

2、的飛行射擊游戲,它是運行于Windows操作系統的一款2D游戲,以C+為開發語言,在Visual Studio 2008環境下使用DirectX軟件開發包來開發的一款多媒體游戲。通過調用DirectX API的顯示部分、輸入部分來開發太空飛行射擊游戲,從而加強游戲的圖像和聲音效果,使看似簡單的太空飛行射擊游戲畫面更具真實性和空間感。在該游戲中的顯示部分主要完成了游戲場景的載入和渲染;在交互部分完成了由鍵盤對游戲角色的操控,并通過顯示器進行圖形輸出反饋;在游戲邏輯方面,對游戲的開始和結束的條件做出判斷,完成碰撞檢測、角色升級、傷害計算、以及enemy AI等。本游戲通過調用DirectX API

3、實現以上功能,基本實現了簡單的2D游戲引擎功能.關鍵詞:2D游戲;DirectX;場景渲染:碰撞檢測 Abstract Flight shooting game is a kind of puzzle game popular around the world, has been ported to the PC and mobile sides, long ago, it created a game can not match the peak, also influence the generation chain. Now, although it has no longer its

4、former glory, but as a classic era, it will never disappear in the course of history, in the present era of intelligent machines, it still exudes boundless vitality. A "Thunder fighter" "Full name airplane Wars" and other excellent flight shooting game.This paper is based on Dire

5、ctX flight shooting game, which is running on the Windows operating system a 2D game in C + as a development language, using the DirectX Software Development Kit to develop a multimedia game in Visual Studio 2008 environment. DirectX API by calling the display section, an input section to develop sp

6、ace flight shooting game, thereby strengthening the game's graphics and effects, so seemingly simple space flight shooting game screen more authenticity and sense of space. In this game, the main part of the display to and rendering game scenes; interactive section completed by the keyboard to c

7、ontrol the game characters, and through the display graphics output feedback; in terms of game logic , conditions for the start and end of the game to make judgments, complete collision detection, character upgrades, damage calculation, and the enemy AI and so on. This game by calling the DirectX AP

8、I to achieve the above functions, the basic realization of a simple 2D game engine.Key Words:2D game;DirectX;Scene rendering;Collision testI目 錄第1章 概述11.1 飛行射擊游戲的開發背景11.2 2D太空飛行射擊小游戲開發的目的和意義11.3 飛行射擊游戲的發展及研究現狀21.4 系統描述5 1.4.1 開發環境及技術介紹5 1.4.2 飛行射擊游戲開發設想6第2章 方案論證72.1 可行性研究7 2.1.1 技術可行性7 2.1.2 經濟可行性7 2

9、.1.3 操作可行性7 2.1.4 法律可行性72.2 方案論證82.3 方案總結8第3章 需求分析93.1 功能行為需求描述9 3.1.1 太空飛行射擊游戲用例建模9 3.1.2 活動圖擴展15 3.1.3 功能模塊劃分173.2 性能需求183.3 運行需求183.4 設計約束18 3.4.1 硬件約束18 3.4.2 可移植性19第4章 概要設計204.1 系統總體設計20 4.1.1 游戲引擎結構設計20 4.1.2 邏輯結構設計214.2 功能模塊設計22 4.2.1 系統模塊架構22 4.2.2 系統體系結構建模224.3 關鍵算法23 4.3.1 碰撞檢測算法234.4 本章小結

10、26第5章 詳細設計275.1 游戲類的實現27 5.1.1 DX27 5.1.2 管理27 5.1.3 場景275.2 子系統描述27 5.2.1 DX模塊28 5.2.2 碰撞檢測模塊30 5.2.3 粒子系統模塊315.3 本章小結32第6章 軟件測試及結果分析336.1 性能測試336.2 邏輯測試346.3 功能測試346.4 本章小結35結 論36致 謝37參考文獻38附錄39I第1章 概述1.1 飛行射擊游戲的開發背景當今這個娛樂的年代,電腦游戲已經成為我們生活中補課或缺的一部分了,從最小的手機上的貪吃蛇小游戲,一直到到魔獸世界等經典網絡游戲,他們都給我們的生活帶來了樂趣,讓我們

11、能在忙碌的日常生活當中得到充分的放松。尤其是各種小游戲,以其簡單方便的操作,和變化多樣的性能更是廣受年輕人的喜愛。2015年全球網絡游戲市場規模將達到884億美元,同比增長9%。過去五年全球網游基本穩定在8%左右。相比于發展時間長,商業模式較為成熟的歐美市場,新興游戲市場發展速度更快,2015年中國游戲收入有望超越美國排名全球第一。作為發展最為快遞的新興游戲市場之一,2015年中國網游市場規模達到1361.8億元,同比增長24.41%,預期2016-2018年將逐漸趨于穩定。細分市場看,2015年端游仍然占據最主要地位,市場規模占比42.77%,移動游戲則增長速度最快,2016年有望趕超端游成

12、為占比最高的細分市場。1.2 2D太空飛行射擊小游戲開發的目的和意義 目前游戲產業已經成為中國如日中天的產業之一。中國的游戲產業經過二十余年的發展,正處在一個高速增長的時期,已經成為國際公認最具發展潛力的市場。在我國游戲市場的起步階段,我國游戲的自主研發能力較弱,市場主要以其他國家和地區的游戲為主。如今,隨著國家政策的大力扶持,我國游戲運營商改變了以代理外國游戲為主的運營方式,轉而開發自主產權的游戲。雖然我國自主開發能力提升很快,但在技術上仍然落后與歐美日韓等游戲行業成熟的國家休閑益智是開發單機小游戲的本源。同時,中國缺乏高質量的游戲開發者,特別是游戲設計者,這是中國游戲行業面臨的一大問題。如

13、果這一情況得不到改觀,我國游戲開發技術很難趕上其他游戲行業成熟的國家。相對于大型游戲,小游戲之所以能夠生存下來是因為其有大型游戲沒有的優勢,小游戲體積小,玩法比較簡單,對計算機等游戲平臺性能要求比較低。對于朝九晚五的大多數人來說,很難拿出一整塊時間玩游戲,他們需要一種時間靈活、輕松便捷的小游戲去放松心情,小游戲正符合他們的需求。針對以上契機和個人興趣,我決定開發一款2D飛行射擊小游戲。雖然只是模仿但也是成為一名游戲開發者的必經之路。本課題是一個基于2D縱向的飛行射擊游戲。1.3 飛行射擊游戲的發展及研究現狀在所有的游戲類型中,飛行射擊游戲,即STG,可以說是最古老,也是最深入人心的一種虛擬游戲

14、,同時也一直擁有著廣大的粉絲群體,從紅白機到PC再到手機,我們對飛行射擊游戲的喜愛一直沒有停止。在飛行射擊游戲中,我們往往操作著一架普普通通的飛機,在漫天密集的槍林彈雨中驚險地消滅敵人,充當世界的救世主;或者以宇宙為背景,駕駛著高科技戰機在太空中探險飛天自古以來就是人類的一大夢想,于是在虛擬游戲世界中這種元素就很自然的受到全世界玩家經久不衰的追捧。STG的發展同樣有一個漫長的歷程,這其中最讓人印象深刻的恐怕還是街機時代的飛機游戲帶給我們同年的快樂。作為80、90后的我們,一定不會忘記“小蜜蜂”、“沙羅曼蛇”、“打擊者1945”、“雷電”這些耳熟能詳的名字。電子游戲是我們這一代人童年最美好的回憶

15、,一個硬幣,一盤卡帶,曾開啟了多少小伙伴們“打飛機”的快樂生涯。即使那個時代的我們還根本不知道什么是STG。STG(Shooting Game),飛行射擊游戲,起源于上個世紀70年代的日本,而伴隨著電影星球大戰席卷全球的狂熱風暴,電子游戲的開山鼻祖Space Invaders(太空侵襲者)應運而生,這也就是我們最初知曉的那款著名的“小蜜蜂”?,F在看來單調的畫面和簡單的操作,卻讓那個時代的人們第一次體會到瞄準、射擊和躲避子彈的樂趣,電子游戲也正是在這一次獲得了前無古人的成功,而“打飛機”則成為了全世界街談巷玩的游戲。 圖1-1 太空侵襲者從80年代末到90年代初,STG如雨后春筍般涌現,一片百家

16、爭鳴的景象。那也是STG代表電子游戲的時代,創新繁花似錦,幾乎每款游戲都采用了新的技術,鮮艷的色彩、卷軸式的大場景、逐漸華麗的爆炸特效等等,都讓STG的游戲品質得到極大的提升。眾多作品中,沙羅曼蛇絕對稱得上經典之作。沙羅曼蛇是那個年代位數不多的橫版游戲,也是很多經歷過那個年代的玩家深刻的游戲記憶。精細的關卡布局,擊殺敵人后獲得可增強火力的能量膠囊,腦洞大開的BOSS設計,一系列的創新都讓人們體驗到了從未有過的興奮和過癮。很長一段時間,一提起飛行和射擊,很多人腦海中最先浮現的就是沙羅曼蛇。圖1-2 沙曼巴蛇圖1-3 沙曼巴蛇到了90年代初,隨著電子技術的進步,飛行射擊游戲在感官上也有了進一步的優

17、化,圖像和音樂音效也都更加出色。街機版迎來最后的革新,而家用游戲機也從FC紅白機跨越到PCE的時代。舊式STG從此達到頂峰,并且開始孕育新的蛻變。彩京系列打擊者1945的出現,實在給人耳目一新的感覺,精美的畫面在那個時代,足夠給人絕對的震撼,游戲中的坦克、飛機以及能變成人形的BOSS都讓人眼前一亮。憑借著多樣的戰機選擇和武器設定,特別是行云流水的操作感和高難度的躲避技巧,打擊者1945很快成為了風靡全球的街機游戲。圖1-4 打擊者1945同樣,當時與彩京一起瓜分STG市場的還有雷電系列。這款縱向卷軸的空戰射擊游戲擁有更多的飛機選擇,同時在游戲過程中你也會感覺更加爽快。圖1-5 雷電90年代中后

18、期,隨著電子技術的飛速發展和互聯網的初步應用,越來越多的其他類型游戲開始登上歷史舞臺,而STG的發展卻似乎陷入瓶頸。創新乏力,玩法單一,彈幕系的高難度讓很多普通玩家望而卻步,玩家的大量流失讓STG逐漸變成了只有發燒友才會去玩的游戲。隨著“打著飛機”長大的一群玩家漸漸長大成人,STG也繼續走向衰落,但恰恰是在這一時期,卻涌現出一批經典STG力作。怒首領蜂蟲姬等,從彈幕、難度、關卡設計、劇情、畫面等方面都做了革新,成為倍受STG玩家推崇的作品。也許STG再也不會回到巔峰,但是經典之所以稱之為經典,就是他們總會在不經意間從我們的腦海中輕輕閃過,并且不會被忘記。在手機游戲越發火熱的今天,我們驚喜的發現

19、,飛行射擊游戲似乎最適合在手機上把玩,手指在豎屏上滑動,任何時候,在指間就能完成所有操作。1.4 系統描述1.4.1 開發環境及技術介紹1.太空飛行射擊游戲開發環境介紹操作系統(OS):Microsoft Windows 7;開發語言:C+;開發環境:Microsoft Visual Studio 2008;使用庫:DirectX9.0c2.DirectX簡介DirectX(Direct eXtension,簡稱DX)是由微軟公司創建的使用C+語言按照COM的多媒體編程接口1。很多游戲的游戲開發如Microsoft Windows、Microsoft XBOX、Microsoft XBOX 3

20、60和Microsoft XBOX ON等都是用其開發的。并且他還能夠向程序人員提供一個統一的硬件驅動的標準,使游戲的開發環節不用為了每一個品牌的硬件去編寫不同的驅動,同時也是用戶的使用變得極其方便。DirectX之中包含了很多應用程序編程接口,按照它們的性質不同進行分類,可以分為四網絡、聲音、輸入和顯示四部分14。(1)顯示部分這是DirectX里對于圖形的處理的重要組成部分,是由DirectDraw與Direct3D兩個小部分組成的2。Direct3D的功能是3D效果的顯示,比如經典網游半條命中的場景和人物、魔獸爭霸3中的地圖各種單位等,都是使用了DirectX的Direct3D。Dire

21、ctDraw則主要承擔了2D圖像加速。它的功能范圍很廣泛,比如我們日常中播放mpg、瀏覽一些圖片或者玩一些小游戲的時候都是用了DDraw的支持。(2)聲音部分DirectSound是這個部分中的API的最重要的地方,它的主要功能是用來播放聲音,而且還有處理混音的功能,同時還會對3d音樂效果有加強的作用,并且還具有錄音的功能13。我們游戲里的聲音之所以可以對我們使用電腦的各種各樣的聲卡進行兼容有事因為DirectSound存在的原因。(3)輸入部分我們需要鼠標鍵盤等設備來進行游戲,而對于這些設備的功能進行兼容,并且是他們能夠達到工作的最佳狀態,DirectInput功不可沒15。而且不但是鼠標鍵

22、盤,它還支持連接手柄、搖桿、模擬器等。 (4)網絡部分網絡游戲是現在游戲的中流砥柱,提到網絡功能就不得不說DirectPlay,它為網游提供了TCP/IP,IPX,Modem和串口等多種連接方式,讓玩家們可以選擇不用的聯網方式來進行游戲,此外它還支持網絡的通話功能跟加密措施3。3.C+語言特點C+是一種從C語言的基礎上派生出的具有面向對象特性的高級編程語言 具體來說C+語言是一種優秀的面向對象程序設計語言,它在C語言的基礎上發展而來,但它比C語言更容易為人們學習和掌握。C+以其獨特的語言機制在計算機科學的各個領域中得到了廣泛的應用。面向對象的設計思想是在原來結構化程序設計方法基礎上的

23、一個質的飛躍,C+完美地體現了面向對象的各種特性。1.4.2 飛行射擊游戲開發設想本游戲開發的環境是Visual Studio 2008,本游戲開發使用的是C+語言,因此我在開發2D太空飛行射擊小游戲的時候采用面向對象的開發方法。初步設想構建5個部分,分別包括player部分、enemybullet部分、bullet部分、DxTest部分、ship部分。將各部分的功能方法封裝在8類中,并根據各部分之間的關系選擇各類中要調用的共有方法和變量,以便建立各部分之間的聯系。第2章 方案論證2.1 可行性研究可行性研究的目的簡單來說就是用最廉價的成本和最效率的速度來確定系統,并且是確定可以進行的??尚行?/p>

24、分析的目的不是解決問題,而是確定問題是否值得去解決,從以下四個方面考慮可行性:2.1.1 技術可行性 本次開發的太空飛行射擊游戲想達到2D游戲效果可以采用兩種圖像接口,一種是OpenGL,OpenGL生成二維、三維圖像均可,用簡單的圖形圖像比特繪制復雜的三維景象是其三維圖像生成的原理。OpenGL是一種可以在不同的平臺之間進行相互移植的接口,它與硬件無關。另一種接口便是DirectX,遵循COM,是由微軟公司創建的多媒體編程接口,所以它會在微軟所開發的平臺上功能會得到更多的展現,尤其是在2D開發方面9。與OpenGL相比,DirectX功能更加完善。2.1.2 經濟可行性 經濟可行性是指對組織

25、的經濟狀況和投資能力進行分析,對系統建設,運行和維護費用進行估算,對系統建成后可能取得的社會及經濟效益進行評估。 本游戲的開發有本人利用畢業設計的機會開發,開發費用可以忽略不計。 本游戲的開發需要資金少。由于基本引擎已經開發設計好,游戲開發運行后,可以輕松的進行各項信息的發布與管理,節省了人力,物力和財力,減少無意的錯誤,節省了大量的時間,更新效率也大幅度提高。本游戲小,且娛樂性高,具有一定市場占有率,因此,在經濟上是可行的。所帶來的效益遠遠大于游戲的開發成本。2.1.3 操作可行性本次課題是制作2D游戲,而且以雷電游戲作為借鑒。繼承了傳統飛行射擊類游戲的操作方法,通過鍵盤來操縱飛機,操作簡單

26、,容易上手。2.1.4 法律可行性在本次開發過程中,若開發的游戲進行發行,進行商業活動,則所選擇的開發環境的需要購買正版的商業版本,以免侵犯他人的知識產權。若本次開發僅供學習研究,則可以使用廠家提供的免費使用版本。在本次開發中,不得存在損害他人利益,損害集體或國家利益的行為。2.2 方案論證根據設計游戲的初始需求可以提出兩種開發方案:以C+為開發語言,圖形庫采用OpenGL,編譯環境使用Microsoft Visual studio 2012。開發語言采用C+,多媒體編程接口采用DX,編譯環境使用Microsoft Visual studio 2008。由于本人的學習,已基本掌握對Visual

27、 Visual studio 2008編輯器的使用,同時也對Windows API進行了學習,對使用C+進行編程相對來說比較擅長,而且由于在游戲開發中需要編寫腳本,同時C+語言在腳本編寫方面更有優勢。另外比起OpenGL,我們上文提到的DirectX是由微軟開發的,所以它與Windows平臺契合度更高,功能更完善。本次開發選擇制作類似雷電的小游戲,因游戲規模相對不大,對人力、物力、財力的要求是我可以達到的;另外,我開發游戲使用的編輯器Visual C+6.0使用的是免費版本,使用的DirectX SDK也是免費的版本,雖然免費版本功能有些不健全,但對于我開發的小游戲來說已經足夠了。以上敘述表明

28、我開發飛行射擊小游戲在經濟上是可行的。在操作可行性上,在保證對游戲的質量要求前提下,本游戲以直觀易懂,使用方便為目的開發了以下游戲操作:玩家通過鍵盤上下左右鍵控制飛機飛行,space鍵設計,以上操作使玩家可以直接上手操作本游戲,因此本游戲在操作上是可行的。本系統開發不會對外發行或進行商業操作,且使用的編輯器和DirectX SDK均是合法的免費試用版本,不會侵犯他人利益,不會出現侵權等問題,一切按照國家法律,因此具有法律可行性。綜上所述,從各方面的可行性進行考慮,本次開發方案采用方案2是最佳選擇。2.3 方案總結通過以上方案論證,我得出一套太空飛行射擊游戲的制作方案,操作系統采用Microso

29、ft Windows 7,開發環境選擇Microsoft Visual studio 2008,使用庫為DirectX9.0c。使用的開發語言為C+語言。第3章 需求分析3.1 功能行為需求描述3.1.1 太空飛行射擊游戲用例建模1.確定執行者整個“飛行射擊小游戲系統”只有一個執行者,即玩家,其活動如下:玩家:通過鍵盤上下左右鍵轉換Playerplane上下左右移動,通過空格鍵發射子 彈。在內部的子系統之間的用例中,還有一個子系統外的執行者,即游戲引擎。2.確定用例對整個游戲系統進行分析,總結出以下用例。(1)“太空飛行射擊游戲”中的用例在第一層,根據“太空飛行射擊游戲”的模塊功能,可選的用例

30、有:Player飛機功能Enemy敵機功能角色管理系統場景設置系統特效設置系統碰撞檢測系統(2)“Player飛機功能”中的用例在第二層,根據player功能的要求,可選的用例有:playerplane的移動playerplane射擊player狀態反饋(3)“Enemy敵機功能”中的用例在第二層,根據Enemy功能的要求,可選的用例有:enemy移動enemy射擊enemy狀態反饋(4)“角色控制系統”中的用例在第二層,根據角色管理系統的要求,可選的用例有:實體數量實體實例化實體生命值實體注銷(5)“場景設置系統”中的用例在第二層,根據場景設置系統的要求,可選的用例有:游戲背景(6)“特效控

31、制系統”中的用例在第二層,根據特效控制系統的要求,可選的用例有:爆炸特效(7)“碰撞檢測系統”中的用例在第二層,根據碰撞檢測系統的要求,可選的用例有:playerplane的碰撞強度enemyplane的碰撞強度子彈的碰撞檢測碰撞傷害記錄3.分層繪制用例圖(1)最高層用例圖“太空飛行射擊游戲綜合設計”用例: 圖3-1 太空飛行射擊游戲用例圖 (2)第二層用例圖“Player功能”用例圖3-2 Player用例圖“角色管理系統”用例圖3-3 角色管理用例圖“Enemy敵機功能”用例圖3-4 Enemy敵機用例圖“場景設置系統”用例圖3-5 場景設置用例圖“特效控制系統”用例圖3-6 特效控制用例

32、圖“碰撞檢測系統”用例圖3-7 碰撞檢測用例圖4.太空飛行射擊游戲綜合功能用例描述“太空飛行射擊游戲綜合功能”用例描述(1)“Player功能”用例用例名:Player功能執行者:玩家目的:本功能模塊主要負責Playerplane的所有功能的實現,包括移動、 射擊以及狀態反饋等。過程描述:進入游戲界面后,點擊開始鍵,進入游戲場景。屏幕上可以直觀顯示自己當前的狀態(例如自己的生命值和敵機的狀態)。根據當前狀態選擇飛機的移動方式。結束游戲。異常事件流處理:追蹤子彈未命中敵機,需重新射擊。(2)“Enemy功能”用例用例名:Enemy功能執行者:游戲引擎目的:本功能模塊主要負責Enemy敵機的所有功

33、能的實現,包括隨機移動、 射擊以及狀態反饋等。過程描述:進入游戲界面后,點擊開始鍵,進入游戲場景。從屏幕上顯示當前的狀態和玩家的狀態。根據當前狀態Enemyplane隨機移動。循環執行以上操作。結束游戲。異常事件流處理:隨機移動時,避免與其他障礙物相撞。(3)“角色管理系統”用例用例名:角色管理系統執行者:游戲引擎目的:角色管理系統主要根據游戲實體的數量來確定是否進行實體實例化,通過生命值監測來判斷是否對實體進行銷毀。過程描述:進入游戲界面后,點擊開始鍵,進入游戲場景。獲取實體的數量和實體的生命值。根據實體的數量實例化實體。根據實體的生命值銷毀實體。 循環執行以上操作。結束游戲。 異常事件流處

34、理:同類實體數量一定,所以實例化時以同類實體為準。(4)“場景設置系統”用例用例名:場景設置系統執行者:游戲引擎目的:本系統主要負責繪制背景,盡量使場景真實。過程描述:進入游戲界面后,點擊開始鍵,進入游戲場景。播放場景。循環執行以上操作。 結束游戲循環執行以上操作。異常事件流處理:(5)“特效設置系統”用例用例名:特效設置系統執行者:游戲引擎目的:本部分主要用粒子系統模擬現實場景,包括碰撞、爆炸、射擊等效果。過程描述:進入游戲界面后,點擊開始鍵,進入游戲場景。若有實體碰撞發生,則播放粒子效果,根據要描述效果的強弱,選擇粒子的播放時間和粒子的播放規模。若有射擊,則描述效果的強弱,選擇粒子的播放時

35、間和粒子的播放規模。 循環執行以上操作。結束游戲。 異常事件流處理:粒子的生命周期結束但卻未銷毀,所以導致系統變慢,因此提前設定好銷毀時間。(6)“碰撞檢測系統”用例用例名:碰撞檢測系統執行者:游戲引擎目的:本用例主要功能為檢測碰撞,通過對碰撞的檢測來計算實體的傷害值。過程描述:進入游戲界面后,點擊開始鍵,進入游戲場景。若有實體碰撞發生,則判斷碰撞的程度,記錄實體傷害值循環執行以上操作。結束游戲。 異常事件流處理:地面也許加入碰撞檢測,但地面在碰撞后不可以消失,所以地面不計傷害值。3.1.2 活動圖擴展 1.“太空飛行射擊游戲”操作活動圖圖3-8 操作活動圖 2.“太空飛行射擊游戲綜合功能”活

36、動圖圖3-9 綜合活動圖3.1.3 功能模塊劃分通過進行需求分析,場景生成、變換鏡頭、游戲操作、獲取信息和物理系統這五個部分是系統需要實現的。但是在我們的實際運作中,系統的架構和擴展能力也應該在我們的考慮之列。所以需要把游戲系統劃分為系統架構、粒子系統、模型、輔助和碰撞檢測這五個模塊。其中,場景生成的功能使用模型、粒子系統和碰撞檢測這幾個模塊來一起來完成。游戲的操作由系統架構模塊進行按鍵響應,具體的實現是由模型模塊來進行的5。碰撞檢測模塊可以完善游戲的物理系統。而且輔助模塊可以實現信息獲取。圖3-10 功能模塊劃分3.2 性能需求特別要注意的是游戲軟件在實時性方面有著非常高的要求,這也是它與其

37、它軟件不同的地方,除了要能夠穩定運行在特定各種的硬件環境和操作系統環境下,而且必須要保證運行時的流暢性。在我們游戲設計的時候,要特別注意功能實現與運行效率之間所存在的矛盾,如果功能太多而使游戲的運行不流暢的話反而使玩家達不到一個好的游戲體驗。從理論上來說,我們劃分了幾個階段來對游戲的流暢度進行了劃分,第一個階段是游戲程序的渲染幀率在60 幀/秒以上,這個階段的游戲能流暢運行;第二個階段是渲染幀率在3060 幀/秒之間,在這個范圍之內則認為游戲僅只是可以運行;第三個階段是幀率保持在 30 幀/秒以下,如果存在于這個范圍之內,那么我們就任務這個游戲就未達到運行需求,運行的不流暢將嚴重影響玩家體驗。

38、在這個太空飛行射擊小游戲中,物體的存在不是非常多,我們為了能夠保證游戲能夠流暢運行,所以要求幀率達到 60 幀/秒以上。3.3 運行需求運行本系統的最低硬件要求:Intel Pentium 4 1.5GHz CPU(及以上)3D顯示卡256M 內存20M 可用硬盤空間鍵盤、鼠標、音箱(可選)運行本系統的軟件要求:Microsoft Windows XP/Vista/2000/7Direct X 9.0C運行庫3.4 設計約束3.4.1 硬件約束運用DirectX加強2D太空飛行小游戲場景的畫面效果,我們不需要為了每一款硬件去編寫不同的驅動,使我們的用戶體驗也變得簡單方便。很早之前在骨灰級玩家在

39、DOS下玩游戲時,僅僅只是安裝在電腦上是不能玩的,還有好多準備工作需要做,他們必須要先對聲卡的品牌和型號進行設置,之后還要對存取模式、中斷、輸入與輸出進行設置,無論其中的那一項出現問題,那么游戲聲音就發不出來,這種繁瑣的操作不僅讓玩家傷透了腦筋,就連游戲開發者也非常頭痛,為了讓游戲的運行平臺更大眾化,開發者要在開始制作游戲的時候,收集到當今全部的聲卡硬件數據,然后針對不同的API來寫不同的驅動程序,對于大部分游戲公司來說,這么做是很難做到的,所以在當時很難出產多媒體游戲,但是有了DirectX之后就不一樣了,只要游戲開發的時候依照的是DirectX,不管顯卡、聲卡是什么型號,統統都能玩,而且還

40、能達到最好的效果4。當然,我們要使用支持DirectX的顯卡、聲卡驅動程序。3.4.2 可移植性 DirectX是由微軟公司創建的用C+語言進行實現的多媒體編程接口。被廣泛使用于Microsoft XBOX、Microsoft XBOX 360、Microsoft Windows和ONE電子游戲開發。所以基于DirectX所開發的2D太空飛行射擊小游戲只能應用在基于Windows的平臺。 第4章 概要設計設計軟件的結構并劃分出系統的物理元素是本階段首要任務,在定義軟件的任務之后就需要對總體的程序進行框架構造,即根據系統分析來確定使用什么模塊來完成這個系統,需要對這些系統和模塊進行有機的的結合,

41、并且保證每個模塊的功能得以實現。系統能夠實現所有要求的功能是系統設計的目的,同時還必須要達到高效性、可修改性、高可靠性,并能夠簡單的操作跟使用。4.1 系統總體設計4.1.1 游戲引擎結構設計一款成功的游戲必定在兩方面做得非常好:其一是游戲性,其二是引人注目的畫面??v觀整個游戲史,渲染技術和真實感圖形所帶來的影響首屈一指。繽紛的畫面使游戲能夠表達出更多令人沉醉的內容??删幊?GPU 誕生之后,多數計算機上都使用了3D 圖形技術,讓游戲中的虛擬世界變得越發的真實,這種逼真的代入感正是大部分玩家所追求的,也正是廣大游戲開發者們所希望看到的。游戲引擎作是制作一款理想中的游戲所必須的,它是制作整個游戲

42、的基礎。一切可以用來開發游戲的專用工具軟件被叫做游戲引擎,它的本身包含了了游戲開發所需要的所有應用編程接口函數,游戲的制作技術水平也是它決定的,驅動性、獨立性和完整性是所有游戲引擎都應擁有三個特點5。驅動性是游戲引擎的最大特點。游戲引擎并不專注于某個具體方面的應用,它所要達到的目的是是否能夠實現這個應用,讓這個實際的需求能夠用游戲引擎做出來。完整性是指引擎能夠為開發者提供一整套的游戲開發相關函數集,開發者能夠讓最初的開發計劃完美實現。獨立性是指游戲引擎中的物理學、網絡、圖形渲染等模塊在實際運用的時候應該是相互獨立的。因此,同一個游戲引擎可以應用于多個游戲項目的設計與開發,大大縮短了開發周期。在

43、結構上游戲引擎可分為系統層(System)、游戲介質層(Game Interface)、控制臺(Console)、圖形渲染內核(Renderer/Engine Core)、物理數學支持層(Support)、開發工具層(Tools/Data)。游戲引擎的結構設計是非常重要的,它與游戲開發的流暢性、效果,以及開發周期息息相關。圖4-1所示的便是具體的結構設計圖。圖4-1 游戲引擎結構設計圖4.1.2 邏輯結構設計完整的游戲應具有完整的游戲循環。我們應該制定合理的游戲規則,規定:玩家駕駛飛機不斷擊落來回游蕩攻擊的敵機,在攻擊方法上可以采用多種方法,并且每擊落一架敵機都可以獲得一定的分數,如果撞在山上

44、、地面或者敵機,則飛機發生爆炸,游戲結束6。 游戲開始否是否射擊是否是否擊中是銷毀敵機加分游戲結束圖4-2 游戲設計流程圖4.2 功能模塊設計4.2.1 系統模塊架構首先系統需要對Windows 程序框架進行創建,需要使用 Win Main 函數來調用 Setup 函數,D3D類是使用Setup函數構建的8。本函數在調用d3d:InitD3D函數來建立d3d 類的時候,使用WindowsSDK框架創建了窗口。通過檢測系統硬件設備的性能的指標在窗口中創建不同的DirectX程序實例。通過Setup 函數完成對CD3DInput 類的初始化,該類主要作用是操縱外設輸入硬件接口。在初始化過程中還需要

45、使用 CreateInput 調用 DirectX的輸入接口,來進行初始化鍵盤和鼠標輸入設備。并且Setup 函數還為其它模塊的調用提供了系統構架,對其它模塊的類提供了初始化1。系統完成初始化后,就要進入消息循環的階段。由 d3d:EnterMsgLoop函數來完成這一階段。隊列中的消息會由EnterMsgLoop 進行獲取及解析,并進入消息循環,幀渲染函數將會收到它用消息間隔時間生成的參數。在幀渲染函數中,第一個進入的是游戲的邏輯循環,即渲染需要前優先判斷游戲所處于的狀態,到底是游戲通關,游戲進行中,還是游戲失敗。如果是游戲進行狀態,則調用每個模塊框架更新功能模塊更新,然后調用渲染功能。如果

46、不是游戲狀態,則跳出邏輯循環,彈出相應的成功或失敗畫面。在完成渲染幀之后,Windows 框架需要調用 WndProc 對消息進行處理。在本游戲中,消息處理主要是對于鍵盤鼠標的按鍵進行響應。其中不但有普通的按鍵響,而且還添加了一種特殊的響應,那就是識別和響應連續按鍵輸入。在這種情況之下,如果用戶連續按同一鍵,如長按一個鍵則只算輸入一次,若該鍵彈起再按下則第二次輸入有效。4.2.2 系統體系結構建模系統體系結構,又被人們稱作架構,指可以預制和可重構的軟件框架結構。構建是一種可預制和可重用的軟件的部件,而體系結構的基本計算單元或數據存儲單元便是構建;連接件也是可預制和可重用的軟件部件。建立軟件體系

47、結構模型的方法和過程是系統體系結構建模。軟件體系機構模型會使人們從全局上把握整個軟件系統結構變得直觀容易。軟件體系結構建模是軟件體系結構應用的重要途徑,也是軟件體系結構研究的一個重要領域。對于本游戲,總體可以分為窗口管理器模塊,命令管理器模塊,主程序和類,DirectX圖形庫這幾個部分。在主程序和類中,功能模塊可以具體分為模型加載、實時地形、粒子系統、碰撞檢測、輔助功能這5個模塊。這些模塊可以執行模型的導入、實時地形的建立、粒子的創建與銷毀、模型之間的碰撞檢測和系統的輔助功能。其中輔助功能主要有特殊文字的導入,2D圖片的處理等功能。4.3 關鍵算法碰撞檢測(Collision Detectio

48、n)是一項幾乎在所有游戲中都要使用的技術。在一個虛擬的世界中,所有場景中的物體之間都存在物理作用,而這些作用都離不開碰撞檢測。在本文所研究的太空飛行射擊游戲制作中,飛機、子彈和地面三者之間的物理交互,也正是由碰撞檢測完成的。創建一個有效的碰撞檢測系統就像是在擺積木,我們需要將一個待檢測物體合理的劃分成塊,再按照一定邏輯將這些碰撞模塊組合起來。因此,碰撞檢測之中的關鍵問題便是如何進行相應的邏輯判定,以及如何設置包圍體。本節將從游戲中的這種關鍵算法入手,即碰撞檢測。文章對這種算法的深入剖析,這將有助于構成程序中的關鍵模塊,并能完成游戲體系設計。4.3.1 碰撞檢測算法 在2D游戲中,常用的碰撞檢測

49、算法有矩形檢測,圓形檢測,像素檢測等。矩形檢測一般情況下在數學運算中常用的直角坐標系X,Y(如圖4-3所示),X軸方向向右為正方向,Y軸方向向上為正方向。而電腦屏幕的坐標軸的原點卻是在屏幕的左上角,并且Y方向向下為正方向(如圖4-4所示)。Y 0 x y0 x圖4-3 常用坐標系圖 圖4-4 電腦屏幕坐標系矩形檢測就是利用所給圖片左上角的坐標,寬度,高度,進行一系列的運算,然后將新得到的坐標進行比較,判斷新得到的坐標是否重合12。此方法適用于地圖中的物體為規則圖形或近似為規則圖形,當然也可以用在碰撞精度要求不高的情況下。假設矩形A的參數是:左上角坐標為(x1,y1),寬度為w1,高度為h1;矩

50、形B的參數是:左上角坐標為(x2,y2),寬度為w2,高度為h2。(如圖4-5)BA (x1,y1) (x2,y2) h1 h2 w1 w2圖4-5 在檢測中,數學上可以處理成比較中心點的坐標在x和y方向上的距離和寬度的關系。即兩個矩形中心點在x方向的距離的絕對值小于等于矩形寬度和的二分之一,同時y方向上的距離的絕對值小于等于矩形高度的二分之一。(如圖4-6所示)。 (x1,y1)BA h1 (x2,y2) h2 w1 w2圖4-6具體的數學表達式為:X方向:(x1+w1/2)-(x2+w2/2)<(w1+w2)/2Y方向: (y1+h1/2)-(y2+h2/2)<(h1+h2)/

51、2實現原理:檢測兩個矩形坐標點是否重合。優點:運算速度快,效率高。缺點:碰撞精度不高,無法應用于不規則圖形。圓形檢測 圓形檢測就是判斷兩個圓形是否發生碰撞,也就是說判斷兩個圓的圓心距離和兩個圓的半徑之和之間的關系。 可以假設A的參數是:左上角坐標為(x1,y1),半徑為r1,B的參數是:左上角坐標為(x2,y2),半徑為r2。具體的數學表達式為:(x1-x2)2+(y1-y2)2<(r1+r2)2實現原理:檢測兩個圓心之間的距離是否小于兩個圓的半徑之和。優點:碰撞精度相對較高。 缺點:運算速度慢,效率低。像素檢測 像素檢測就是判斷兩個物體之間發生重合部分的像素值變化。即像素值為0時,表示

52、未發生碰撞,像素值不為0時,發生碰撞。而現今這種碰撞檢測算法多被采用封裝類??梢约僭O有物體A和物體B(如圖4-7所示),兩個物體目前的像素值為0,即未發生碰撞。然后將物體B向物體A移動,并且使他們發生碰撞,會出現兩種不同的深度(如圖4-8,4-9所示)。AB圖4-7AB圖4-8BA圖4-9從圖4-8和4-9可以看出,物體A和B發生了部分碰撞,也就是說兩個物體其他部分的像素值不變,碰撞部分的像素值發生變化。而綜合圖4-8和4-9碰撞產生的不同深度,將可以得到兩個不同的集合,然后將兩個集合中的像素值進行相減得到一個新的像素值。即1. 物體A和B的交集部分的像素值不同時為空,相減之后,如果結果不為空,則可以判定A和B有碰撞,如果結果為空,則可以判定沒有發生碰撞。2. 物體A和B的交集部分的像素值同時為空,這樣只有一種結果,即為空,這種情況通常認為A和B沒有發生碰撞。 綜上所述,可以根據交集部分的像素值是否為空來判斷兩不規則的形狀是否發生碰撞。 實現原理:檢測兩個物體相交部分的像素值,根據像素值的變化判斷兩個物體是否發生碰撞。優點:碰撞精度高。 缺點:運算效率低。4.4 本章小結 本章詳細闡述了太空飛行射擊游戲的設計問題。對軟件的設計做了總體的規劃。然后根據總體設計,把系統劃分為五個模塊。同時還介紹了游戲流程,編輯程序的邏輯結構。接著,詳細敘述了五個模塊,對每個模塊逐一設計。并從每

溫馨提示

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

評論

0/150

提交評論