西安科技大學(xué)軟件工程課程設(shè)計之增強版坦克大戰(zhàn)_第1頁
西安科技大學(xué)軟件工程課程設(shè)計之增強版坦克大戰(zhàn)_第2頁
西安科技大學(xué)軟件工程課程設(shè)計之增強版坦克大戰(zhàn)_第3頁
西安科技大學(xué)軟件工程課程設(shè)計之增強版坦克大戰(zhàn)_第4頁
西安科技大學(xué)軟件工程課程設(shè)計之增強版坦克大戰(zhàn)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、西安科技大學(xué)軟件工程課程設(shè)計報告題目: 增強版坦克大戰(zhàn)班級: 0904 學(xué)號: 姓名: 2012年7月目錄1 緒論41.1 選題目的及意義41.2 系統(tǒng)概述42 可行性研究報告52.1 系統(tǒng)分析52.1.1 系統(tǒng)流程圖52.1.2 數(shù)據(jù)流圖52.1.3數(shù)據(jù)字典82.2經(jīng)濟(jì)可行性82.3技術(shù)可行性82.4操作可行性93 需求規(guī)格說明書93.1 功能需求93.2 性能需求93.3 可靠性和可用性需求93.4 出錯處理需求93.5 接口需求103.5.1用戶接口需求103.5.2 軟件接口需求103.6 約束103.7 逆向需求113.8 將來可能提出的需求114 總體設(shè)計說明書114.1系統(tǒng)說明1

2、14.1.1系統(tǒng)流程圖114.1.2成本/效益分析124.1.3 實現(xiàn)系統(tǒng)的進(jìn)度計劃124.1.4 軟件結(jié)構(gòu)圖134.1.5 IPO表144.2用戶手冊164.3測試計劃164.4 實現(xiàn)計劃165 詳細(xì)設(shè)計說明書165.1界面設(shè)計165.2出錯信息處理175.3程序流程圖175.4程序復(fù)雜度186系統(tǒng)實現(xiàn)186.1 開發(fā)環(huán)境186.2 關(guān)鍵技術(shù)186.2.1 圖像透明顯示186.2.2碰撞檢測186.2.3實現(xiàn)子畫面動畫186.2.4 物理運動196.2.5 爆炸效果196.2.6簡單的AI206.2.7 子畫面創(chuàng)建子畫面216.2.8 滾動背景216.3 運行結(jié)果227測試分析報告23參考文

3、獻(xiàn)271 緒論1.1 選題目的及意義當(dāng)下的學(xué)生們都比較喜歡玩游戲,隨著玩游戲時間的增加,部分學(xué)生們便產(chǎn)生了自己編寫游戲的念頭。所謂萬丈高樓平地起,所以開發(fā)游戲要從基本技術(shù)開始練習(xí),由于2D游戲開發(fā)較易學(xué)習(xí)和掌握,本學(xué)期,我閱讀了一些關(guān)于2D游戲編程方面的書籍。學(xué)習(xí)了一些游戲編程的基本技術(shù),為了對所學(xué)內(nèi)容進(jìn)行實際練習(xí),增強游戲編程的能力與問題分析的能力。于是我決定開發(fā)一款2D游戲軟件。由于本人對當(dāng)年非?;馃岬募t白機上的經(jīng)典游戲比較著迷,比如坦克大戰(zhàn),沙羅曼蛇,采金子,1945等。所以我產(chǎn)生了重寫這些經(jīng)典游戲的想法。這些游戲都屬于2D游戲,而且涉及的基本游戲編程技術(shù)大都相同。比如游戲子畫面的管理,

4、背景的滾動,游戲事件處理,分層圖像繪制,簡單的人工智能使用等。而我這次開發(fā)的目的是練習(xí)相關(guān)技術(shù),所以選擇了重寫坦克大戰(zhàn)這款經(jīng)典的紅白機游戲,并對原版經(jīng)典游戲在界面上和操作上進(jìn)行了一定的改進(jìn)從而達(dá)到練習(xí)以上技術(shù)的目的。1.2 系統(tǒng)概述本系統(tǒng)屬于游戲娛樂類型。游戲中玩家控制一輛黃色坦克,通過方向鍵控制自己的坦克移動,其中玩家坦克可以進(jìn)行屏幕環(huán)繞。玩家通過空格鍵發(fā)射子彈。游戲過程中會在隨機位置生成敵方坦克,為了增加游戲難度我將敵方坦克發(fā)射的子彈設(shè)置為隨機模式,即在隨機的位置上產(chǎn)生子彈。當(dāng)玩家的被敵方坦克發(fā)生的子彈擊中,或者與敵方坦克相撞則玩家死亡游戲結(jié)束。當(dāng)玩家坦克發(fā)射的子彈擊中敵軍坦克則敵軍坦克爆

5、破。當(dāng)敵軍坦克相撞時則為二者交換速度。其中為了增加趣味性還增加了一些音樂效果,比如爆炸聲音,發(fā)生子彈的聲音等。2 可行性研究報告2.1 系統(tǒng)分析2.1.1 系統(tǒng)流程圖鍵盤輸入游戲引擎畫面更新顯示2.1.1系統(tǒng)流程圖2.1.2 數(shù)據(jù)流圖用戶顯示器1游戲引擎鍵盤消息圖像信息2.1.2.1頂層數(shù)據(jù)流圖流圖2.1.2.1分層數(shù)據(jù)流圖 L1控制信息1.2游戲循環(huán)管理背景信息圖像信息1.3游戲事件管理控制信息子畫面信息1.4子畫面管理1.1鍵盤消息管理按鍵信息按鍵信息按鍵信息1.5背景管理背景信息開始背景信息1.3.1游戲開始1.3.2游戲結(jié)束結(jié)束背景信息按鍵信息按鍵信息2.1.2.1分層數(shù)據(jù)流圖 L22

6、.1.2.1分層數(shù)據(jù)流圖 L21.4.2位置更新1.4.1碰撞檢測按鍵信息位置信息控制信息子畫面信息1.2.1子畫面更新1.2.3背景更新1.2.2開場圖像更新子畫面信息控制信息背景信息圖像信息圖像信息圖像信息2.1.2.1分層數(shù)據(jù)流圖 L22.1.3數(shù)據(jù)字典名字:子畫面信息別名:Sprite Information描述:與子畫面有關(guān)的相關(guān)參數(shù)集合定義:子畫面信息 =位置+邊界矩形+碰撞矩形+子畫面速度+Z軸順序位置 = X坐標(biāo)+Y坐標(biāo)邊界矩形 = 子畫面的左上X坐標(biāo)Y坐標(biāo)+子畫面的右下上X坐標(biāo)Y坐標(biāo)碰撞矩形 = 邊界矩形X坐標(biāo) = 整型數(shù)值Y坐標(biāo) = 整型數(shù)值子畫面速度 = 在X軸和Y軸上單

7、位時間移動的距離Z軸順序 = 繪制子畫面的先后順序,以無符號整型數(shù)值表示位置:子畫面管理名字:按鍵信息別名:虛擬鍵碼描述:標(biāo)識所按下的鍵盤按鍵定義:虛擬鍵碼 = VK+下劃線+英文單詞位置:按鍵處理名字:控制信息別名:Control information描述:布爾型數(shù)據(jù),用來標(biāo)識狀態(tài)定義:布爾型數(shù)據(jù)=true|false位置:游戲循環(huán)控制2.2經(jīng)濟(jì)可行性本系統(tǒng)設(shè)計的代碼量大約為2000行左右,由于開發(fā)本系統(tǒng)主要由我本人獨立完成,不涉及雇傭其它人員所需花費。而且該系統(tǒng)主要是面向課程設(shè)計,開發(fā)周期短,其中的開發(fā)消耗主要是本人日常起居所需的花費。因此據(jù)我的估計單行代碼的開發(fā)編寫費用為0.05元。(

8、計算方法為開發(fā)階段在校園內(nèi)的開銷除以代碼總行數(shù))。因此總的開發(fā)費用不會超過50元。由于校園中衣食住行等開銷相對較低加之本人平日以來勤儉節(jié)約所以經(jīng)濟(jì)上完全可行。2.3技術(shù)可行性開發(fā)本系統(tǒng)所基于的平臺為Windows XP,所使用的開發(fā)語言為C+,通過系統(tǒng)調(diào)用(Win32 API),實現(xiàn)主要的游戲功能。開發(fā)該系統(tǒng)涉及到的主要技術(shù)C+基礎(chǔ)語法知識,Win32 API的使用,鍵盤控制,游戲子畫面處理,碰撞檢測,音效播放,游戲背景處理,簡單的游戲AI,游戲流程控制等技術(shù)。由于本人在前期的自學(xué)中已經(jīng)熟練掌握這些基本技術(shù),而且經(jīng)過了一定的練習(xí)。所以從技術(shù)角度來講沒有任何問題。2.4操作可行性 本系統(tǒng)在使用過

9、程中完全通過鍵盤操作。由于當(dāng)前很多2D游戲都是以此種模式進(jìn)行控制,所以萬家對此模式十分熟悉不存在適應(yīng)上的問題。加之本系統(tǒng)設(shè)計的鍵盤按鍵很少,所以記憶難度大大降低,極為容易上手。綜合以上因素得出此種操作模式完全行得通。因此操作可行。3 需求規(guī)格說明書 3.1 功能需求坦克大戰(zhàn)是一款經(jīng)典的游戲,游戲的過程是玩家可以通過鍵盤控制坦克的移動,并能夠發(fā)射子彈消滅屏幕上出現(xiàn)在隨機位置上的坦克,當(dāng)玩家的坦克與敵人的坦克或者是敵人坦克發(fā)出的子彈相撞則玩家輸?shù)粲螒颍螒蚪Y(jié)束。反之當(dāng)玩家消滅了所有敵人的坦克后則玩家獲勝。同時要求游戲中能對各個對象的碰撞做出正常的處理。還有使得游戲畫面較為流暢。 3.2 性能需求最

10、低磁盤容量: 1G CPU最低主頻: 64MHZ 最低主存容量: 128M 3.3 可靠性和可用性需求 游戲能夠正常地運行,并且正常的對畫面進(jìn)行處理。能夠正確地響應(yīng)鍵盤消息。并且對于屏幕中的畫面過多時可以流暢的顯示,并保證有一定的錯誤處理功能。3.4 出錯處理需求當(dāng)程序因為平臺原因初始化失敗以及相關(guān)API在其它的Windows平臺下無法使用導(dǎo)致程序無法正常運行時,應(yīng)給予玩家相關(guān)的提示,告知失敗的其原因是因為與游戲運行的平臺有關(guān)。3.5 接口需求3.5.1用戶接口需求響應(yīng)用戶的方向鍵按鍵,應(yīng)將方向鍵按鍵轉(zhuǎn)換為坦克在對應(yīng)方向上的行進(jìn)速度。響應(yīng)用戶的回車按鍵,以便正常開始游戲。3.5.2 軟件接口需

11、求圖形加載應(yīng)將位圖正常加載并保存位圖句柄Create(LPTSTR szFileName)szFileName 為位圖文件名圖形繪制模塊應(yīng)根據(jù)傳送的圖形信息將圖形繪制在屏幕上,格式為:Draw(HDC hDC, int x, int y,BOOL trans,COLORREF crTransColor)hDC 設(shè)備環(huán)境句柄,x,y為圖像橫坐標(biāo)和縱坐標(biāo),trans是否繪制透明圖形crTransColor指定透明顏色子畫面添加應(yīng)將子畫面正確添加到子畫面列表中AddSprite(Sprite* pSprite)pSprite 為子畫面對象指針碰撞檢測 應(yīng)對當(dāng)前的子畫面與子畫面列表中的子畫面逐個進(jìn)行碰

12、撞檢測CheckSpriteCollision(Sprite* pTestSprite)Sprite* pTestSprite 要檢測的子畫面指針子畫面信息控制應(yīng)根據(jù)子畫面類中的子畫面信息正確的改變子畫面的位置等信息。3.6 約束程序需要在windows平臺下才可正常運行。3.7 逆向需求該程序?qū)儆诩冩I盤操控,因此游戲無需對非鍵盤事件做出響應(yīng)。3.8 將來可能提出的需求 1.敵軍坦克具有更高的智能。 2.炫目的游戲效果。 3.游戲桿控制接口。 4.網(wǎng)絡(luò)聯(lián)機游戲功能。 5.多人游戲玩家交互功能。4 總體設(shè)計說明書4.1系統(tǒng)說明 在前期分析過程中所得到的結(jié)果為較合理方案,因此得出如下結(jié)果。4.1.

13、1系統(tǒng)流程圖鍵盤輸入游戲引擎畫面更新顯示4.2.(1)系統(tǒng)流程圖 4.1.2成本/效益分析 由代碼行技術(shù)估算。因為經(jīng)我的分析單行代碼的開發(fā)編寫費用為0.05元。代碼總行數(shù)大約為2000行,因此總的開發(fā)費用不會超過50元。本項目面向課程設(shè)計,不涉及任何經(jīng)濟(jì)收益問題。 4.1.3 實現(xiàn)系統(tǒng)的進(jìn)度計劃第一工作日:可行性研究,并編寫相關(guān)文檔。第二工作日:總體設(shè)計,并編寫相關(guān)文檔。第三工作日:詳細(xì)設(shè)計。第四工作日:系統(tǒng)實現(xiàn)第五工作日:系統(tǒng)實現(xiàn)。第六工作日:系統(tǒng)測試。第七工作日:系統(tǒng)測試。4.1.4 軟件結(jié)構(gòu)圖游戲開始游戲結(jié)束游戲引擎子畫面管理事件管理游戲循環(huán)管理鍵盤事件游戲事件位置更新碰撞檢測游戲循環(huán)管

14、理子畫面更新背景更新開場畫面更新4.1.5 IPO表IPO表系統(tǒng): 坦克游戲 作者: 模塊: 鍵盤事件 日期: 2012-7-6編號:6被調(diào)用: 事件管理 調(diào)用: 輸入: 事件信息 輸出:轉(zhuǎn)換后的數(shù)值信息處理: 將鍵盤消息轉(zhuǎn)換為物體運動的速度IPO表系統(tǒng): 坦克游戲 作者: 模塊: 碰撞檢測 日期: 2012-7-6編號:5被調(diào)用: 子畫面管理 調(diào)用: 輸入: 子畫面位置 輸出:是否碰撞的信息處理: 檢測子畫面是否發(fā)生碰撞IPO表系統(tǒng): 坦克游戲 作者: 模塊: 位置更新 日期: 2012-7-6編號:4被調(diào)用: 子畫面管理 調(diào)用:輸入: 子畫面位置速度 輸出:子畫面新位置處理:變更位置IPO

15、表系統(tǒng): 坦克游戲 作者: 模塊: 游戲循環(huán)控制 日期: 2012-7-6編號:3被調(diào)用: 游戲引擎 調(diào)用: 子畫面,背景,開場圖像更新繪制輸入: 圖像信息 輸出:圖像處理: 不斷的繪制圖像信息IPO表系統(tǒng):坦克游戲 作者: 模塊:事件管理 日期: 2012-7-6編號:2被調(diào)用: 游戲引擎 調(diào)用:鍵盤事件, 游戲事件輸入:按鍵消息 輸出:整型數(shù)值處理: 對不同的按鍵進(jìn)行不同的處理IPO表系統(tǒng):坦克游戲 作者: 模塊: 子畫面管理 日期:2012-7-6編號:1被調(diào)用: 游戲引擎 調(diào)用:位置更新,碰撞檢測輸入: 位圖信息,子畫面坐標(biāo)信息 輸出: 新的子畫面坐標(biāo)處理: 對子畫面的坐標(biāo)進(jìn)行修改IP

16、O表系統(tǒng): 坦克游戲 作者: 模塊: 游戲開始 日期: 2012-7-5編號:8被調(diào)用: 游戲事件 調(diào)用: 輸入: 位圖句柄 輸出:處理: 完成游戲初始化工作IPO表系統(tǒng): 坦克游戲 作者: 模塊: 游戲事件 日期: 2012-7-5編號:7被調(diào)用: 事件管理 調(diào)用: 輸入:回車鍵 輸出:提示圖像處理: 對游戲事件產(chǎn)生的結(jié)果以圖形化的方式響應(yīng)IPO表系統(tǒng): 坦克游戲 作者: 模塊: 子畫面更新 日期: 2012-7-5編號:10被調(diào)用: 游戲循環(huán)管理 調(diào)用: 子畫面,背景,開場圖像更新繪制輸入: 圖像信息 輸出:圖像處理: 不斷的繪子畫面,實現(xiàn)動態(tài)效果。IPO表系統(tǒng): 坦克游戲 作者: 模塊:

17、 游戲結(jié)束 日期: 2012-7-5編號:9被調(diào)用: 游戲事件 調(diào)用: 輸入: 各種資源句柄 輸出:圖像處理: 完成對各種資源的釋放,并給予一定提示。IPO表系統(tǒng): 坦克游戲 作者: 模塊: 開場圖像更新 日期: 2012-7-5編號:12被調(diào)用: 游戲循環(huán)控制 調(diào)用: 輸入: 開場圖像信息 輸出:圖像處理: 不斷的繪制圖像信息,實現(xiàn)開場動畫。IPO表系統(tǒng): 坦克游戲 作者: 模塊: 背景更新 日期: 2012-7-5編號:11被調(diào)用: 游戲循環(huán)控制 調(diào)用: 輸入: 背景信息 輸出:背景圖像處理: 不斷的繪制背景,實現(xiàn)一定效果。4.2用戶手冊 方向鍵控制坦克的移動上:向上移動下:向下移動左:向

18、左移動右:向右移動ESC:推出游戲Enter:游戲開始Space(空格鍵):發(fā)射子彈 4.3測試計劃對系統(tǒng)進(jìn)行白盒測試與黑盒測試。并進(jìn)行模塊測試與系統(tǒng)測試。 4.4 實現(xiàn)計劃第一工作日:可行性研究,并編寫相關(guān)文檔。第二工作日:總體設(shè)計,并編寫相關(guān)文檔。第三工作日:詳細(xì)設(shè)計。第四工作日:系統(tǒng)實現(xiàn)第五工作日:系統(tǒng)實現(xiàn)。第六工作日:系統(tǒng)測試。第七工作日:系統(tǒng)測試。5 詳細(xì)設(shè)計說明書 5.1界面設(shè)計本游戲分為三個界面:游戲開始界面,游戲進(jìn)行界面、游戲結(jié)束界面;在界面更新上為每秒25貞從而達(dá)到較為流暢的效果。 5.2出錯信息處理YN碰撞結(jié)束檢測按鍵ESC方向鍵空格碰撞檢測開始背景初始化,子畫面初始化。生

19、成敵軍坦克信息繪制敵軍坦克圖像玩家圖像背景圖象玩家錯誤,在開始界面時不滿足輸入規(guī)則發(fā)生錯誤,按Enter鍵開始游戲,其它無效;運行時錯誤,游戲界面交互時,由于本游戲較穩(wěn)定,基本不會崩潰,而且有各種游戲提示。 5.3程序流程圖繪制敵軍坦克圖像5.4程序復(fù)雜度復(fù)雜度 = E-N+2 = 17 - 11 + 2 = 86系統(tǒng)實現(xiàn)6.1 開發(fā)環(huán)境 Windows XP sp3 CPU Intel B940 2.00GHZ VC+ 6.0 SP6 圖像編輯器,MSPAINT6.2 關(guān)鍵技術(shù) 6.2.1 圖像透明顯示 使位圖可以透明顯示主要使用的是TransparentBlt函數(shù),通過設(shè)置函數(shù)中的參數(shù) “

20、透明色” 來實現(xiàn)透明效果。 6.2.2碰撞檢測對子畫面設(shè)置一個矩形區(qū)域,通過判斷矩形區(qū)域是否重疊來判斷子畫面是否發(fā)生碰撞。 6.2.3實現(xiàn)子畫面動畫動畫子畫面需要包括1. 總貞數(shù)2. 當(dāng)前貞3. 貞延遲4. 貞觸發(fā)器實現(xiàn)動畫效果即制作一張聯(lián)系圖片然后逐個顯示每個圖片,這樣在一定的速度下就產(chǎn)生了動畫效果。6.2.4 物理運動 勻速運動:物體運動時候?qū)τ?D上的物體而言,其速度為X軸分量與Y軸分量的和速度。勻速運動各分量時刻不變,2D上的勻速運動在每次更新畫面時,利用物體速度分量Vx,Vy的值來計算下次物體出現(xiàn)的位置,產(chǎn)生移動效果。計算公式如下:下一刻X 位置 = 現(xiàn)在 X 位置 + X軸速度分量

21、下一刻Y 位置 = 現(xiàn)在 Y 位置 + Y軸速度分量加速運動:表達(dá)式 V = Vo + AtVx1 = Vxo + Ax (x方向加速度)Vy1 = Vyo + Ay(y方向加速度)在求出物體下一刻的移動速度后,便可依此再去推算出加入加速度后,物體下一刻所在位置的公式為:Sx1 = Sxo + Vx1 Sy1 = Syo + Vy16.2.5 爆炸效果爆炸子畫面必須循環(huán)顯示其動畫貞,然后立即消失。需要解決的問題是:可以在游戲代碼中刪除一個子畫面,即所需要實現(xiàn)的內(nèi)容是允許子畫面在一個周期中實現(xiàn)動畫,然后消失。通過增加新變量 BOOL m_bDying; BOOL m_bOneCyle;。來進(jìn)行判

22、斷是否該刪除圖像。m_bDying 成員變量確定一個子畫面是否被標(biāo)記為將要刪除。換句話說,普通子畫面的m_bDying設(shè)置為false ,將要刪除的設(shè)置為true. 使用該變量的優(yōu)點是它允許只需要將這個變量設(shè)置為true即可隨時刪除一個字畫面。 6.2.6簡單的AI漫游AI是指模擬游戲?qū)ο蟮囊苿樱从螒驅(qū)ο笞鞒鲈谔摂M的世界中如何漫游的決定。例如游戲中敵軍追逐玩家。實現(xiàn)漫游AI很容易,它通常需要根據(jù)一個對象的位置來改變另一個對象的速度或位置。對象漫游移動還會受到隨機模式或 預(yù)定模式的影響。存在三種基本的漫游AI:追逐 逃避 和 有模式漫游AI1追逐AI :一個對象跟蹤并追逐另一個或多個游戲?qū)ο蟆?/p>

23、例:If(iXAlian > iXShip)iXAlien-;else if(iXAlien < iXShip)iXAlien+;if(iYAlien > iYShip)iYAlien-;else if(iYAlien < iYShip)iYAlien+;缺點:致使敵軍過于強大可以輕易追上玩家 所以添加一些隨機因素 這些隨即因素可以自行更改If(rand()%3 )= 0)If(iXAlian > iXShip)iXAlien-;else if(iXAlien < iXShip)iXAlien+;if(iYAlien > iYShip)iYAlien-

24、;else if(iYAlien < iYShip)iYAlien+;2逃避算法與追逐思路一致3 有模式移動通過一組預(yù)定義的移動的漫游AI模式通常為一個預(yù)定義的行為如 int iZigZag22 = 3,2,-3,2; iXAlien+= iZigZagiPatternStep0; iYAlien+= iZigZagiPatternStep1;對象以之字形移動.行為AI:預(yù)先設(shè)定一組行為當(dāng)產(chǎn)生某種行為時執(zhí)行相應(yīng)的動作。int iBehavior = abs(rand()%100);if(iBehavior < 50)/ 追逐else if(iBehavior<90)/ 以某種

25、模式移動else/ 隨機移動6.2.7 子畫面創(chuàng)建子畫面坦克子畫面發(fā)射導(dǎo)彈就屬于此問題。子畫面動作用來通知游戲引擎必須對一個子畫 采取某種特定的動作SA_ADDSPRITE動作只是導(dǎo)致在應(yīng)用動作的Sprite對象上調(diào)用一個特殊方法。這個方法名為AddSprite()Virtual Sprite *AddSprite();調(diào)用該方法向游戲引擎添加一個新的子畫面。該方法返回新創(chuàng)建的子畫面的指針。新子畫面的具體情況完全取決于各個不同的游戲。此方法是給給電腦子畫面添加子畫面用的。而玩家子畫面要創(chuàng)建子畫面在按鍵盤時就可以創(chuàng)建了?;惖脑摲椒ㄖ皇欠祷匾粋€NULL 子畫面指針。意思說更多功能由派生留給派生的

26、類去完成。因此需要派生類來完成該方法并重寫。SA_ADDSPRITE 動作和AddSprite() 方法在游戲引擎 UpdateSprite()方法中輸入圖片,UpdateSprite()必須檢查SA_ADDSPRITE子畫面動作是否存在.若設(shè)置了此動作則在子畫面上調(diào)用AddSprite()方法。并將返回值傳給游戲引擎的AddSprite()方法,然后將子畫面插入子畫面列表中。因此開篇所需要的功能就可以實現(xiàn)了。6.2.8 滾動背景滾動背景的工作原理: 橫向和縱向的滾動其實就是圖像的環(huán)繞。所以圖像的兩側(cè)必須進(jìn)行良好的設(shè)計,以便完美結(jié)合在一起。視口的理解:好像望遠(yuǎn)鏡提供了一個太空的視圖,視口也提供

27、了背景圖像的一個視圖。所以滾動背景可以理解為移動視口。背景可以任意大,視口提供了查看大背景的一個特定的部分的方法。6.3 運行結(jié)果7測試分析報告功能描述測試坦克的移動用例目的功能是否相應(yīng)實現(xiàn)前提條件游戲已開始輸入/動作期望輸出/相應(yīng)實際情況按方向鍵""鍵向右移動與期望結(jié)果一致按方向鍵""鍵向左移動與期望結(jié)果一致按方向鍵""鍵向上移動與期望結(jié)果一致按方向鍵""鍵向下移動與期望結(jié)果一致除了空格鍵、Enter鍵和Esc鍵外的數(shù)字鍵和字母鍵屏幕無反應(yīng)與期望結(jié)果一致黑盒測試白盒測試:鍵盤控制 相關(guān)代碼if(GetAsyncK

28、eyState(VK_LEFT) < 0).else if(GetAsyncKeyState(VK_RIGHT) < 0).else if(GetAsyncKeyState(VK_UP) < 0).else if(GetAsyncKeyState(VK_DOWN) < 0)else. 采用語句覆蓋測試測試用例為 方向按鍵 :上 下 左 右 位置更新模塊 相關(guān)代碼if (m_baBoundsAction = 1) / 環(huán)繞動作 ,即從上到下,從左到右環(huán)繞if (ptNewPosition.x + ptSpriteSize.x) < m_rcBounds.left).

29、else if (ptNewPosition.x > m_rcBounds.right).if (ptNewPosition.y + ptSpriteSize.y) < m_rcBounds.top).else if (ptNewPosition.y > m_rcBounds.bottom).else if (m_baBoundsAction = 2) / 反彈動作if (ptNewPosition.x < m_rcBounds.left) /已經(jīng)超出左邊界/ 子畫面的最右邊已經(jīng)超出了右邊界 + ptSpriteSize.xelse if (ptNewPosition.

30、x+ ptSpriteSize.x) > m_rcBounds.right) / 上邊界if (ptNewPosition.y < m_rcBounds.top)/下邊界 + ptSpriteSize.yelse if (ptNewPosition.y+ ptSpriteSize.y ) > m_rcBounds.bottom)if (bBounce)else if (m_baBoundsAction = 3) /碰到邊界需要撤銷該子畫面if (ptNewPosition.x) < m_rcBounds.left |ptNewPosition.x + ptSpriteS

31、ize.x > m_rcBounds.right |(ptNewPosition.y ) < m_rcBounds.top |ptNewPosition.y + ptSpriteSize.y > m_rcBounds.bottom)/ptNewPosition.y + ptSpriteSize.yreturn 0x0001L;測試用例m_baBoundsAction = 1 ptNewPosition.x + ptSpriteSize.x < m_rcBounds.left m_baBoundsAction = 1 ptNewPosition.x > m_rcBo

32、unds.right m_baBoundsAction = 1 ptNewPosition.x + ptSpriteSize.x> m_rcBounds.left m_baBoundsAction = 1 ptNewPosition.x <m_rcBounds.right m_baBoundsAction = 2 ptNewPosition.x < m_rcBounds.lefptNewPosition.x+ ptSpriteSize.x > m_rcBounds.right ptNewPosition.y < m_rcBounds.top ptNewPosition.y+ ptSpriteSize.y > m_rcBounds.bottomm_baBoundsAction = 2 ptNewPosition.x > m_rcBounds.lefptNewPosition.x+ ptSpriteSize.x < m_rcBou

溫馨提示

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

最新文檔

評論

0/150

提交評論