版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告書(shū)</b></p><p> 課程名稱(chēng): 軟件綜合 </p><p> 題 目:基于VC++6.0的“推箱子”游戲軟件的開(kāi)發(fā)與測(cè)試</p><p> 系 名: 信息工程系 </p><p> 專(zhuān)業(yè)班級(jí):
2、 </p><p> 姓 名: </p><p> 指導(dǎo)教師: </p><p> 2013 年 元月 18日</p><p><b> 課程設(shè)計(jì)任務(wù)書(shū)</b></p&
3、gt;<p> 學(xué)生姓名: 專(zhuān)業(yè)班級(jí): 軟件2101 </p><p> 指導(dǎo)教師: 工作單位: 信息系計(jì)算機(jī)教研室</p><p> 設(shè)計(jì)題目: 基于VC++6.0的“推箱子”游戲軟件的開(kāi)發(fā)與測(cè)試</p><p><b> 初始條件:</b></
4、p><p> 已完成c語(yǔ)言程序設(shè)計(jì)、軟件工程、數(shù)據(jù)庫(kù)概論或數(shù)據(jù)庫(kù)技術(shù)等課程的學(xué)習(xí)</p><p> 2. 系統(tǒng)環(huán)境:Intel 奔騰4以上處理器,1G以上內(nèi)存,40G以上硬盤(pán),</p><p> Windows編程環(huán)境,Visual C++ 6.0編程工具</p><p> 要求完成的主要任務(wù):(在規(guī)定的時(shí)間內(nèi)完成下列任務(wù))</p
5、><p> (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求)</p><p><b> 主要任務(wù):</b></p><p> 系統(tǒng)完成用戶(hù)登錄及管理員增加、刪除、修改、查詢(xún)功能</p><p> 1. 按系統(tǒng)功能進(jìn)行游戲背景區(qū)域(移動(dòng)區(qū)域、圍墻)的設(shè)計(jì)與繪制:</p><p>
6、2. 根據(jù)系統(tǒng)實(shí)現(xiàn)的功能,繪出功能圖、系統(tǒng)流程圖</p><p> 3. 模塊調(diào)試,運(yùn)行結(jié)果正確,并經(jīng)教師檢查及答辯;</p><p> 設(shè)計(jì)報(bào)告撰寫(xiě)格式要求:(課程設(shè)計(jì)報(bào)告按統(tǒng)一通用格式書(shū)寫(xiě))具體內(nèi)容如下:</p><p> ?、?設(shè)計(jì)任務(wù)與要求 ② 總體方案與說(shuō)明</p><p> ?、?程序主要模塊的流程圖
7、 ④ 問(wèn)題分析與解決方案的設(shè)計(jì)思想和改進(jìn)設(shè)想</p><p> ?、?系統(tǒng)的調(diào)試記錄、調(diào)試報(bào)告(即在調(diào)試中遇到的主要問(wèn)題、解決方法及改進(jìn)設(shè)想)</p><p><b> ?、?小結(jié)與體會(huì)</b></p><p> 附錄:① 使用說(shuō)明 ② 參考資料</p><p> 時(shí)間安排:2012年12月29
8、日---2013年元18日(共三周)</p><p> 指 導(dǎo) 教 師 簽 字: 2012年12月28日</p><p> 系 主 任 簽 字: 年 月 日</p><p><b> 目 錄</b></p><p><b> 1引言1
9、</b></p><p> 2項(xiàng)目需求分析1</p><p> 3系統(tǒng)概要設(shè)計(jì)1</p><p> 3.1功能控制模塊1</p><p> 3.2系統(tǒng)流程圖2</p><p> 3.3推箱子游戲具有的功能3</p><p> 3.3.1能夠顯示主菜單
10、和界面3</p><p> 3.3.2能夠?qū)崿F(xiàn)鍵盤(pán)操作功能3</p><p> 3.3.3能夠把放置到位置的箱子進(jìn)行變色顯示4</p><p> 3.3.4游戲勝負(fù)判斷功能4</p><p> 3.3.5支持關(guān)口選擇功能4</p><p> 3.4推箱子功能框架4</p>
11、<p> 3.5游戲界面設(shè)計(jì)5</p><p> 3.5.1游戲主界面5</p><p> 3.5.2游戲菜單與幫助結(jié)構(gòu)設(shè)計(jì)5</p><p> 3.5.3游戲中關(guān)卡選擇對(duì)話框設(shè)計(jì)6</p><p> 3.6游戲的界面實(shí)現(xiàn)6</p><p> 3.7關(guān)卡選擇對(duì)話框的實(shí)現(xiàn)7&
12、lt;/p><p><b> 4詳細(xì)設(shè)計(jì)10</b></p><p> 4.1地圖文件讀取模塊的設(shè)計(jì)與實(shí)現(xiàn)10</p><p> 4.2地圖繪制模塊的設(shè)計(jì)與實(shí)現(xiàn)10</p><p> 4.3鍵盤(pán)操作模塊的設(shè)計(jì)與實(shí)現(xiàn)12</p><p> 4.4游戲規(guī)則模塊設(shè)計(jì)與實(shí)現(xiàn)12&
13、lt;/p><p> 5VC調(diào)試方法介紹14</p><p> 5.1調(diào)試快捷鍵14</p><p> 5.2跟蹤調(diào)試14</p><p> 5.3異常調(diào)試15</p><p><b> 6功能測(cè)試17</b></p><p> 6.1主菜單和
14、界面顯示功能測(cè)試17</p><p> 6.2鍵盤(pán)操作功能測(cè)試17</p><p> 6.3箱子放置到指定位置時(shí)變色顯示功能測(cè)試19</p><p> 6.4支持地圖擴(kuò)展功能的演示20</p><p> 7特殊問(wèn)題及解決方法21</p><p><b> 8設(shè)計(jì)小結(jié)21<
15、/b></p><p><b> 9參考文獻(xiàn)21</b></p><p><b> 引言</b></p><p> 最經(jīng)典的推箱子游戲,類(lèi)似的游戲你一定早就玩過(guò)。要控制搬運(yùn)工上下左右移動(dòng),來(lái)將箱子推到指定地點(diǎn)</p><p> 記得幾年前,《推箱子》在PC機(jī)上刮起了一股不小的益智類(lèi)
16、游戲的旋風(fēng),現(xiàn)在許多資深玩家也都對(duì)《推箱子》贊不絕口,可見(jiàn)有深度的益智類(lèi)游戲是非常受大家歡迎的?!⊥葡渥佑螒?981年由日本人今林宏行首創(chuàng),是在1982年12月由Thinking Rabbit 公司首次發(fā)行,名“倉(cāng)庫(kù)番”。箱子只可以推, 不可以拉, 而且一次只能推動(dòng)一個(gè),勝利條件就是把所有的箱子都推到目的地。</p><p> 推箱子游戲是一種老少皆宜的益智游戲,既可以開(kāi)發(fā)青少年學(xué)生的智力,又可以防止老年癡呆癥
17、,全家一起攻關(guān)還可以促進(jìn)家庭和睦,何樂(lè)而不為?</p><p> 推箱子游戲是目前比較流行的游戲之一,很多操作系統(tǒng)或者流行軟件都會(huì)帶有這種游戲。它既能鍛煉思維的嚴(yán)密性,又有很多樂(lè)趣。我們團(tuán)隊(duì)比較喜歡玩這個(gè)游戲,于是備采用c++編程語(yǔ)言進(jìn)行實(shí)現(xiàn)。</p><p><b> 項(xiàng)目需求分析</b></p><p> 用戶(hù)可以進(jìn)行開(kāi)始游戲,退出游
18、戲,選關(guān),重新開(kāi)始游戲等操作。有結(jié)束提示。</p><p> 作為一款極為經(jīng)典的游戲,推箱子吸引了一代代玩家樂(lè)此不疲,通過(guò)使用Visual C++6.0進(jìn)行設(shè)計(jì),將學(xué)習(xí)過(guò)的知識(shí)應(yīng)用到實(shí)際程序中,以便于為以后的進(jìn)一步學(xué)習(xí)奠定基礎(chǔ)。</p><p> 推箱子游戲的設(shè)計(jì)目標(biāo)完成一個(gè)比較簡(jiǎn)單的游戲,使之能夠?qū)崿F(xiàn)推箱子游戲的基本功能,成為一個(gè)比較完整的游戲框架。在一個(gè)狹小的倉(cāng)庫(kù)中,要求把木箱放到
19、指定的位置,稍不小心就會(huì)出現(xiàn)箱子無(wú)法移動(dòng)或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動(dòng)的次序和位置,才能順利的完成任務(wù)。</p><p> 在游戲主界面中,會(huì)出現(xiàn)一個(gè)小人、若干個(gè)箱子和箱子放置點(diǎn)。玩家需要利用方向鍵控制小人上下左右移動(dòng),并推動(dòng)界面中的箱子到達(dá)指定的箱子放置點(diǎn)。</p><p><b> 系統(tǒng)概要設(shè)計(jì) </b></p&g
20、t;<p><b> 功能控制模塊</b></p><p> 系統(tǒng)功能如圖3-1所示。</p><p><b> 圖3-1 功能模塊</b></p><p><b> 系統(tǒng)流程圖</b></p><p> 系統(tǒng)流程如圖3-2所示。</p>
21、<p> 圖3-2 系統(tǒng)流程圖</p><p> 推箱子游戲具有的功能</p><p> 能夠顯示主菜單和界面</p><p> 游戲需要一共主菜單讓玩家進(jìn)行游戲設(shè)置,同時(shí)能夠把地圖文件中的信息轉(zhuǎn)換成為圖像顯示在游戲界面上。</p><p> 能夠?qū)崿F(xiàn)鍵盤(pán)操作功能</p><p> 能夠接受到鍵盤(pán)
22、駛?cè)氲姆较蜴I信息,并根據(jù)不同的方向鍵把游戲人物移動(dòng)到相應(yīng)的位置。例如,當(dāng)玩家單機(jī)方向鍵向上“上”時(shí),如果向上的位置是可以移動(dòng)的,那么就當(dāng)把游戲人物向上西東一個(gè)方格。</p><p> 能夠把放置到位置的箱子進(jìn)行變色顯示</p><p> 當(dāng)玩家把箱子推到指定位置的格子時(shí),需要把這個(gè)箱子進(jìn)行變色,這樣就能明確的現(xiàn)實(shí)出該箱子已經(jīng)放置到指定位置。</p><p>&l
23、t;b> 游戲勝負(fù)判斷功能</b></p><p> 在游戲中,當(dāng)玩家把所有的箱子都推到指定點(diǎn)時(shí),玩家勝利通過(guò)當(dāng)前游戲關(guān)口,進(jìn)行下一關(guān)口的游戲。如果玩家無(wú)法將箱子全部推到指定位置時(shí),玩家失敗,玩家可以選擇重新開(kāi)始進(jìn)行當(dāng)前關(guān)口的游戲,還是退出游戲。</p><p><b> 支持關(guān)口選擇功能</b></p><p> 玩
24、家在游戲中可以自行選擇需要挑戰(zhàn)的關(guān)口。當(dāng)玩家點(diǎn)擊菜單中的“關(guān)卡選擇”,并在對(duì)話框中輸入所需要挑戰(zhàn)的關(guān)口,設(shè)置完畢后點(diǎn)擊開(kāi)始即可打開(kāi)所需關(guān)口。</p><p><b> 推箱子功能框架</b></p><p><b> 圖3-3 功能框架</b></p><p> 初始化模塊。該模塊包括屏幕初始化和游戲第一關(guān)到第最后一
25、關(guān)的初始化。屏幕初始化用于輸出操作信息,游戲每一關(guān)的初始化時(shí)構(gòu)建每一關(guān)的關(guān)卡。</p><p> 畫(huà)圖模塊。該模塊最要是被其他模塊調(diào)用,用于畫(huà)墻、在空地畫(huà)箱子、畫(huà)小人、和畫(huà)目的地。</p><p> 移動(dòng)箱子模塊。該模塊用于移動(dòng)箱子,包括目的地之間、空地之間和目的地與空地之間箱子的移動(dòng)</p><p> 移動(dòng)小人模塊。該模塊用于移動(dòng)人物,包括目的地之間、空地之
26、間和目的地與空地之間人物的移動(dòng)</p><p> 功能控制模塊。該模塊是幾個(gè)功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)功能和關(guān)卡重置功能。</p><p><b> 游戲界面設(shè)計(jì)</b></p><p><b> 游戲主界面</b></p><p> 推箱子游戲主界面設(shè)計(jì)如圖3-4所示&
27、lt;/p><p> 圖3-4 設(shè)計(jì)的游戲主界面</p><p> 游戲菜單與幫助結(jié)構(gòu)設(shè)計(jì)</p><p> 圖3-5 游戲菜單結(jié)構(gòu)</p><p> 圖3-6 幫助結(jié)構(gòu)設(shè)計(jì)</p><p> 游戲中關(guān)卡選擇對(duì)話框設(shè)計(jì)</p><p> 圖3-7 關(guān)卡選擇對(duì)話框</p>&
28、lt;p> 當(dāng)玩家在對(duì)話框中輸入關(guān)口數(shù)字,并重新點(diǎn)擊開(kāi)始游戲時(shí),游戲會(huì)自動(dòng)選擇對(duì)應(yīng)關(guān)口的地圖級(jí)別開(kāi)始新游戲。</p><p><b> 游戲的界面實(shí)現(xiàn)</b></p><p> 在推箱子游戲中,通過(guò)如下幾步即可實(shí)現(xiàn)游戲的菜單</p><p> 在推箱子游戲工程的資源中添加一個(gè)菜單資源,其屬性如表3-1所示:</p>
29、<p><b> 表3-1 資源屬性</b></p><p> 1給每個(gè)菜單欄添加相應(yīng)函數(shù)到CboxManDlg類(lèi)中。</p><p> 2菜單響應(yīng)函數(shù)的實(shí)現(xiàn),各類(lèi)菜單調(diào)用響應(yīng),要運(yùn)用到的代碼如下:</p><p> void CBoxManDlg::OnExit() //退出游戲響應(yīng)</p><p&g
30、t;<b> {</b></p><p> int i=MessageBox("退出游戲","提示",MB_OKCANCEL);</p><p><b> switch(i)</b></p><p><b> { </b></p><
31、p><b> case 1:</b></p><p> CDialog::OnCancel();</p><p><b> break;</b></p><p><b> case 2: </b></p><p><b> break;</b&g
32、t;</p><p><b> }</b></p><p><b> }</b></p><p> void CBoxManDlg::OnSelect() //關(guān)卡選擇</p><p><b> {</b></p><p> CSelect
33、sel;</p><p> sel.DoModal();</p><p> g_level=sel.m_level;;</p><p> GameStart();</p><p><b> }</b></p><p> void CBoxManDlg::OnRestart() //重新開(kāi)
34、始</p><p><b> {</b></p><p> GameStart();</p><p><b> }</b></p><p> 關(guān)卡選擇對(duì)話框的實(shí)現(xiàn)</p><p> 推箱子游戲關(guān)口選擇對(duì)話框的實(shí)現(xiàn),分為如下幾步:</p><p&g
35、t; 創(chuàng)建一個(gè)對(duì)話框資源,并添加相應(yīng)的控件,如圖:</p><p> 圖3-8 關(guān)口選擇對(duì)話框資源</p><p> 在資源視窗中,Menu一項(xiàng),雙擊IDR_MAINFRAME彈出菜單編輯框,添加一個(gè)“選關(guān)”選項(xiàng),隨便修改一個(gè)ID</p><p> “查看->建立類(lèi)向?qū)А保–trl+W),第一個(gè)選項(xiàng)卡,找到“選關(guān)”選項(xiàng)的ID,選中COMMAND消息,點(diǎn)
36、右邊按鈕添加函數(shù)。</p><p> 圖3-9 添加函數(shù)圖1</p><p> 接下來(lái)資源視窗,Bitmap下插入Dialog對(duì)話框并編輯,添加一個(gè)編輯框,修改編輯框ID“查看->建立類(lèi)向?qū)А?,添加新?lèi),填好類(lèi)名就會(huì)自動(dòng)生成.cpp文件和.h文件。基類(lèi)選CDialog,對(duì)話框ID選上面建好的對(duì)話框。OK</p><p> 圖3-10 添加函數(shù)圖2<
37、;/p><p> 為編輯框添加一個(gè)變量,用來(lái)存儲(chǔ)編輯框獲得的數(shù)據(jù)。選項(xiàng)卡Member Variables,類(lèi)名選上面那個(gè)對(duì)話框的類(lèi)名,選中編輯框的ID,增加變量</p><p> 圖3-11 變量設(shè)置</p><p> (6)要想在CBoxManDlg類(lèi)中使用這個(gè)對(duì)話框類(lèi),必須包含頭文件:</p><p> #include "
38、MapSelect.h"</p><p> 最后,選項(xiàng)卡關(guān)聯(lián)函數(shù)中調(diào)用這個(gè)對(duì)話框類(lèi):void CBoxManDlg::OnSelect() //關(guān)卡選擇</p><p><b> {</b></p><p> // TODO: Add your command handler code here</p><
39、p> CSelect sel;</p><p> sel.DoModal();</p><p> g_level=sel.m_level;</p><p> // CString str;</p><p> // str.Format("%d",g_level);</p><p&
40、gt; // MessageBox(str);</p><p> GameStart();</p><p><b> }</b></p><p><b> 選關(guān)功能完成</b></p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p>
41、 地圖文件讀取模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 地圖文件讀取模塊,主要負(fù)責(zé)將對(duì)地圖文件讀取,并把相應(yīng)的文件數(shù)據(jù)轉(zhuǎn)換成地圖顯示出來(lái)。其設(shè)計(jì)步驟如下:</p><p> ?。?)讀取當(dāng)前文件夾中的地圖文件。</p><p> ?。?)判斷當(dāng)前選擇關(guān)口是否在文件夾中存在。</p><p> (3)如果存在則把當(dāng)前關(guān)口的地圖信息放置到地圖數(shù)組中
42、。</p><p> 其實(shí)現(xiàn)代碼如下所示:</p><p> void CBoxManDlg::loadMap(int num)</p><p><b> {</b></p><p> CString str;</p><p> str.Format("[%d]",n
43、um); //格式化字符串,即將關(guān)卡編號(hào)變成[X]</p><p> FILE *pFile=fopen("./Debug/map.txt","rb");//打開(kāi)地圖文件</p><p> if (pFile==NULL)return;//判斷打開(kāi)是否失敗</p><p> char cTmp[20];//創(chuàng)建
44、臨時(shí)字符數(shù)組</p><p> fgets(cTmp,20,pFile);//讀取一行到數(shù)組中</p><p> while (strncmp(cTmp,str,3)!=0)//讀取與當(dāng)前關(guān)口編號(hào)相同的地圖</p><p><b> {</b></p><p> fgets(cTmp,20,pFile);&l
45、t;/p><p><b> }</b></p><p> for (int i=0;i<14;i++)//讀取地圖數(shù)據(jù)到地圖數(shù)組</p><p><b> {</b></p><p> fgets(m_cMap[i],20,pFile);</p><p><
46、b> }</b></p><p> fclose(pFile);</p><p><b> }</b></p><p> 地圖繪制模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 地圖繪制模塊主要將地圖數(shù)組中的數(shù)據(jù)繪制成地圖圖像。其設(shè)計(jì)分為如下幾步。</p><p> 格局要求,實(shí)
47、現(xiàn)不同類(lèi)型格子的繪制函數(shù)。地圖數(shù)組及地圖文件中各字符代表的意思如表4-1所示:</p><p> 表4-1 地圖數(shù)組及地圖字符代表的意思</p><p> (2)讀取地圖數(shù)據(jù),根據(jù)不同的數(shù)據(jù)調(diào)用不同的繪圖函數(shù)。</p><p> 地圖繪制,模塊的實(shí)現(xiàn)代碼如下:</p><p> void CBoxManDlg::drawMap(CDC
48、 *pDC) //繪地圖接口函數(shù)</p><p><b> {</b></p><p> int i,j,x,y;</p><p> for (i=0;i<14;i++) //遍歷行</p><p><b> {</b></p><p> for (
49、j=0;j<16;j++) //遍歷列</p><p><b> {</b></p><p><b> x=j*29;</b></p><p><b> y=i*29;</b></p><p> switch (m_cMap[i][j]) //根據(jù)數(shù)組中的數(shù)
50、據(jù)進(jìn)行繪圖</p><p><b> {</b></p><p> case MAP_BACK: //0繪制背景</p><p> drawBack(x,y,pDC);</p><p><b> break;</b></p><p> case MAP_WHIT
51、EWALL: //1繪制地圖邊框</p><p> drawWhiteWall(x,y,pDC);</p><p><b> break;</b></p><p> case MAP_BLUEWALL: //2繪制地板</p><p> drawBlueWall(x,y,pDC);</p>
52、<p><b> break;</b></p><p> case MAP_BALL: //3繪制目標(biāo)</p><p> drawBall(x,y,pDC);</p><p><b> break;</b></p><p> case MAP_BOX:/
53、/4繪制箱子</p><p> drawBox(x,y,pDC);</p><p><b> break;</b></p><p> case MAP_REDBOX: //5 繪制箱子與目標(biāo)重合</p><p> drawRedBox(x,y,pDC);</p><p><
54、;b> break;</b></p><p> case MAP_MAN://6繪制人</p><p> drawMan(x,y,pDC);</p><p><b> break;</b></p><p> case MAP_MANBALL: //繪制人和目標(biāo)重合</p&
55、gt;<p> drawManBall(x,y,pDC);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p
56、><p><b> }</b></p><p> 鍵盤(pán)操作模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 鍵盤(pán)操作模塊主要負(fù)責(zé)接收玩家鍵盤(pán)輸入并進(jìn)行箱子移動(dòng)等處理,其設(shè)計(jì)比較簡(jiǎn)單,只需要通過(guò)如下幾步即可實(shí)現(xiàn)。</p><p> 通過(guò)截獲當(dāng)前窗口中鍵盤(pán)按下消息來(lái)判斷玩家按下的按鍵。</p><p> 根據(jù)
57、玩家按下的按鍵把人的相關(guān)坐標(biāo)進(jìn)行加減。例如:當(dāng)玩家按下方向鍵“右”時(shí),把人的X坐標(biāo)增加,反之,把人的X坐標(biāo)減少。</p><p> 把增加后的數(shù)據(jù)與地圖數(shù)組中的數(shù)據(jù)進(jìn)行比較,只要不是地圖邊框就可以移動(dòng),如果是箱子就還需要將箱子的坐標(biāo)進(jìn)行移動(dòng)。</p><p> 但是要注意,要判斷箱子移動(dòng)后的坐標(biāo)是否可以移動(dòng)。</p><p> 鍵盤(pán)操作模塊的實(shí)現(xiàn),主要代碼如下
58、:</p><p> BOOL CBoxManDlg::PreTranslateMessage(MSG* pMsg) </p><p><b> {</b></p><p> if (pMsg->message==WM_KEYDOWN)</p><p><b> {</b></p
59、><p> updateMap(pMsg->wParam); //根據(jù)按下的按鍵進(jìn)行判斷</p><p> Invalidate(FALSE);</p><p> if (isFinish()) //調(diào)用規(guī)則模塊函數(shù),判斷是否勝利</p><p><b> {</b></p><p&
60、gt; AfxMessageBox("恭喜你!過(guò)關(guān)?。。?quot;);</p><p> g_level=g_level+1; //勝利后將當(dāng)前關(guān)口加1</p><p> if (g_level>g_maxlevel)</p><p><b> {</b></p><p> g_level
61、=1; //如果大于最大關(guān)口編號(hào),重新開(kāi)始</p><p><b> }</b></p><p> GameStart();</p><p><b> }</b></p><p><b> }</b></p><p> return CD
62、ialog::PreTranslateMessage(pMsg);</p><p><b> }</b></p><p> 游戲規(guī)則模塊設(shè)計(jì)與實(shí)現(xiàn)</p><p> 游戲規(guī)則模塊,主要負(fù)責(zé)游戲規(guī)則的判斷。其設(shè)計(jì)方法需要在每次玩家移動(dòng)人物后,對(duì)當(dāng)前地圖數(shù)組進(jìn)行判斷。如果當(dāng)前地圖中存在單獨(dú)的“目標(biāo)區(qū)域”或者“人物站在目標(biāo)上”兩種情況,就說(shuō)明玩
63、家未過(guò)關(guān),放置就死過(guò)關(guān)。</p><p> 游戲規(guī)則模塊的實(shí)現(xiàn),代碼如下:</p><p> BOOL CBoxManDlg::isFinish() //判斷是否過(guò)關(guān)</p><p><b> {</b></p><p> for (int i=0;i<14;i++) //遍歷所有列</p&g
64、t;<p><b> {</b></p><p> for (int j=0;j<16;j++)//遍歷所有行</p><p><b> {</b></p><p> if (m_cMap[i][j]==MAP_BALL || m_cMap[i][j]==MAP_MANBALL)</p&
65、gt;<p><b> {</b></p><p> return FALSE;//有目標(biāo)區(qū)域或人物站在目標(biāo)區(qū)域上</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
66、</p><p> return TRUE;//游戲結(jié)束</p><p><b> }</b></p><p><b> VC調(diào)試方法介紹</b></p><p> Visual C/C++ 是眾多C/C++編譯器中,調(diào)試功能較為強(qiáng)大的編譯器之一。調(diào)試程序是每個(gè)初學(xué)者必須經(jīng)歷的過(guò)程,只有
67、不斷發(fā)現(xiàn)自己的錯(cuò)誤,才能減少編程錯(cuò)誤,提高編程能力。當(dāng)然我們不建議一遇到錯(cuò)誤就調(diào)試,我希望大家先用眼睛看,把常見(jiàn)的錯(cuò)誤都改正后,最后不行再調(diào)試,這樣編程能力才會(huì)進(jìn)步。要做到十分鐘上百行無(wú)錯(cuò)代碼的能力,不下苦功是練不成的。</p><p> 常用的調(diào)試快捷鍵有:</p><p> F10 單步運(yùn)行,不進(jìn)入函數(shù)。</p><p> F11 單步運(yùn)行,進(jìn)入函數(shù)。如果
68、是自定義函數(shù),則進(jìn)入自定義函數(shù)。如果是系統(tǒng)函數(shù),如scanf,printf,return 等等,則進(jìn)入?yún)R編,當(dāng)然這不是我們期望的。</p><p> 單步運(yùn)行的同時(shí),左下方會(huì)自動(dòng)顯示當(dāng)前被改變值的變量,右下方則可以輸入自定義變量。一般F10,F11結(jié)合使用。</p><p> F9 設(shè)置斷點(diǎn)。光標(biāo)所在行設(shè)置斷點(diǎn)。</p><p> F5 運(yùn)行到斷點(diǎn)處暫停。&l
69、t;/p><p> 為了更快運(yùn)行到我們關(guān)心的地方,避免F10一步一步的運(yùn)行浪費(fèi)時(shí)間。 F9,F5一般結(jié)合使用,到我們關(guān)注的地方后,我們可以繼續(xù)F10。</p><p> 設(shè)斷點(diǎn)的另外一大好處,是在遞歸程序中設(shè)置斷點(diǎn),可以很快運(yùn)行到下一層中。</p><p> 寫(xiě)程序要養(yǎng)成良好代碼風(fēng)格,沒(méi)有人會(huì)喜歡看別人錯(cuò)誤的代碼,尤其是那些沒(méi)有分行縮進(jìn),一律左對(duì)齊的代碼。養(yǎng)成分行
70、縮進(jìn)的風(fēng)格在檢查括號(hào)匹配的時(shí)候,也非常方便。</p><p> 運(yùn)行時(shí)錯(cuò)誤:一運(yùn)行就彈出窗口,或在某些輸入數(shù)據(jù)的情況下,彈出“內(nèi)存出錯(cuò)警告”的窗口。多數(shù)是由于指針訪問(wèn)非法空間造成的,比如未動(dòng)態(tài)開(kāi)辟就訪問(wèn),釋放后再次訪問(wèn)或釋放等等。數(shù)組下標(biāo)越界,開(kāi)辟極大空間等也有可能導(dǎo)致此類(lèi)錯(cuò)誤。解決方法,可以通過(guò)單步運(yùn)行F10或運(yùn)行到斷點(diǎn)處F5,確定出錯(cuò)行,然后仔細(xì)檢查代碼,加以修正</p><p>&
71、lt;b> 調(diào)試快捷鍵</b></p><p><b> F5: 開(kāi)始調(diào)試</b></p><p> Shift+F5: 停止調(diào)試</p><p> F10: 調(diào)試到下一句,這里是單步跟蹤 </p><p> F11: 調(diào)
72、試到下一句,跟進(jìn)函數(shù)內(nèi)部</p><p> Shift+F11: 從當(dāng)前函數(shù)中跳出</p><p> Ctrl+F10: 調(diào)試到光標(biāo)所在位置</p><p> F9: 設(shè)置(取消)斷點(diǎn)</p><p> Alt+F9:&
73、#160; 高級(jí)斷點(diǎn)設(shè)置</p><p><b> 跟蹤調(diào)試</b></p><p> 1、 盡量使用快捷鍵時(shí)行調(diào)試</p><p><b> 2、 觀察調(diào)試信息</b></p><p><b> 3、 高級(jí)中斷設(shè)置&
74、lt;/b></p><p><b> 異常調(diào)試</b></p><p> 重試->取消->調(diào)試</p><p> 函數(shù)堆棧,用variables或者call stack 窗口</p><p> VC6.0Debug調(diào)試總結(jié)1. 如何顯示Debug工具欄窗口①:在任意工具欄的位置,單擊鼠標(biāo)右
75、鍵,勾選Debug項(xiàng) ②:Tools---->Customize--àToolbars--àDebug--àclose 引申:工具欄和工具條的區(qū)別? 一個(gè)工具欄可以放置多個(gè)工具條。2.?dāng)帱c(diǎn)調(diào)試F9:設(shè)置或去除斷點(diǎn)。如果當(dāng)前行未設(shè)置斷點(diǎn),按F9可在當(dāng)前行設(shè)置斷點(diǎn),如果當(dāng)前行已設(shè)置斷點(diǎn),按F9則為去除斷點(diǎn)設(shè)置。Alt+F9:調(diào)出斷點(diǎn)設(shè)置窗口 在
76、這個(gè)窗口里可以設(shè)置斷點(diǎn),去除所有已經(jīng)設(shè)置的斷點(diǎn)或者單個(gè)斷點(diǎn),也可以轉(zhuǎn)到已設(shè)置的斷點(diǎn)處,通過(guò)按鈕Edit Code,可以設(shè)置需要被計(jì)算的表達(dá)式,可以設(shè)置,監(jiān)視(Watch)數(shù)組或結(jié)構(gòu)體元素的個(gè)數(shù),可以在窗口過(guò)程函數(shù)中設(shè)置斷點(diǎn),可以為任何一個(gè)想要監(jiān)視(Watch)的消息(Message)設(shè)置一個(gè)斷點(diǎn)。3.開(kāi)始調(diào)試①:Build--Start Debug--Go②:F5注:F5有兩層含義。對(duì)于非調(diào)試階段,按F5用于開(kāi)始調(diào)試。對(duì)于調(diào)試階
77、段(已經(jīng)進(jìn)入調(diào)試階段),按F5用于運(yùn)行程序到下一個(gè)斷點(diǎn)處4.停止調(diào)試一旦按F5之后進(jìn)入調(diào)試階</p><p><b> 功能測(cè)試</b></p><p> 主菜單和界面顯示功能測(cè)試</p><p> 這個(gè)演示主要是測(cè)試游戲的菜單和界面顯示是否成功,其步驟如下。</p><p> 運(yùn)行推箱子程序.exe文件,如
78、圖6-1所示</p><p><b> 圖6-1 運(yùn)行文件</b></p><p> 程序啟動(dòng)后,其菜單及界面如圖6-2所示</p><p><b> 圖6-2 界面效果</b></p><p><b> 鍵盤(pán)操作功能測(cè)試</b></p><p>
79、; 鍵盤(pán)操作功能的演示,演示步驟如下:</p><p> 游戲開(kāi)始后人物的位置,如圖6-3所示</p><p><b> 圖6-3</b></p><p> 按下鍵盤(pán)上的“下”方向按鍵。</p><p> 查看任務(wù)是否向下移動(dòng),如圖5-4:</p><p><b> 圖6-4
80、</b></p><p> 箱子放置到指定位置時(shí)變色顯示功能測(cè)試</p><p> 將箱子放置到指定位置時(shí),箱子會(huì)變色的功能,具體步驟如下</p><p> 推箱子游戲已經(jīng)開(kāi)始,如圖6-5所示</p><p><b> 圖6-5</b></p><p> 推動(dòng)箱子到指定位置后
81、,顯示如圖5-6所示</p><p><b> 圖6-6</b></p><p> 支持地圖擴(kuò)展功能的演示</p><p> 推箱子游戲是否支持地圖擴(kuò)展功能,步驟如下:</p><p> 查看第一關(guān)地圖文件,其內(nèi)容如下:</p><p> 與游戲顯示的地圖對(duì)照</p>&l
82、t;p> 圖6-7 第一關(guān)地圖文件 圖6-8 修改后的地圖文件</p><p> 重新進(jìn)行第一關(guān)游戲,地圖顯示</p><p><b> 圖6-9</b></p><p> 特殊問(wèn)題及解決方法 </p><p><b> 1、 問(wèn)題1</b></p><
83、p><b> 問(wèn)題描述</b></p><p> 記錄所有走過(guò)的步數(shù)總是不成功</p><p><b> 解決方案</b></p><p><b> 設(shè)置變量sum </b></p><p><b> 解決結(jié)果</b></p>
84、<p> 可以記錄所有走過(guò)的步數(shù),當(dāng)游戲重新開(kāi)始的時(shí)候本關(guān)的步數(shù)清零。</p><p><b> 2、問(wèn)題2 </b></p><p><b> 問(wèn)題描述</b></p><p> 在初始化地圖函數(shù)時(shí),由于每加載地圖均要將目的地存儲(chǔ)于 POINT DE[]中,由于人物移動(dòng)過(guò)程中當(dāng)人物占領(lǐng)目的地時(shí),目的地
85、POINT DE[]存儲(chǔ)內(nèi)容也會(huì)隨之改變,事實(shí)上DE里面的值是不會(huì)變的</p><p><b> 解決方案</b></p><p> 對(duì)POINT DE[]的值只初始化一次,記在選關(guān)按鈕按下時(shí),或游戲結(jié)束時(shí)才初始化,當(dāng)人物移動(dòng)時(shí),當(dāng)加載目的地圖片時(shí),不再對(duì) POINT DE[]進(jìn)行賦值。</p><p><b> 解決結(jié)果<
86、;/b></p><p> 目的地的圖片正常顯示,成功判斷當(dāng)前關(guān)是否成功</p><p><b> 設(shè)計(jì)小結(jié)</b></p><p> 從工程實(shí)踐開(kāi)始前兩周,原計(jì)劃使用MFC開(kāi)發(fā)程序,因?yàn)檩^WIN32應(yīng)用程序熟悉,但是后來(lái)考慮到運(yùn)用WIN32應(yīng)用程序能使得開(kāi)發(fā)更為靈活,且文件不至于冗余。剛剛使用WIN32應(yīng)用程序開(kāi)發(fā)的時(shí)候,對(duì)整個(gè)開(kāi)
87、發(fā)框架和消息機(jī)制的不熟悉,走了很多彎路,花了不少時(shí)間實(shí)踐,從最初的需求分析設(shè)計(jì),概要設(shè)計(jì),我們小組都會(huì)集中實(shí)驗(yàn)室進(jìn)行詳細(xì)的探討,雖然在探討過(guò)程中不免會(huì)有不同意見(jiàn),但是都能很好的協(xié)商,調(diào)節(jié)過(guò)來(lái),本次實(shí)踐不僅在編程知識(shí)上有了更深的理解,也加深了我們對(duì)團(tuán)隊(duì)合作的重要性的認(rèn)識(shí)。</p><p> 雖然本款游戲與傳統(tǒng)上的推箱子游戲大同小異,但是我們盡了自己最大的努力去完善和修正它,小組成員都盡力扮演好自己的角色,對(duì)自己的
88、分工也是按時(shí)按量的完成。為了此次項(xiàng)目能按時(shí)按量的完成,我們?cè)诿鞔_自己的方向后,不斷地在百度,谷歌,圖書(shū)館尋求為我們的答案。本次實(shí)踐,我們的美工也是異常幸苦,為了滿(mǎn)足我們程序主題的要求,不斷地更新圖片,有時(shí)候也會(huì)連續(xù)制作圖片達(dá)3,4個(gè)小時(shí)。雖然這次的游戲沒(méi)有預(yù)想中的那么好,但是通過(guò)本次學(xué)習(xí),下個(gè)作品將會(huì)更加出彩。</p><p> 編程工作不是那么容易的,有時(shí)候?yàn)榱苏乙粋€(gè)小小的錯(cuò)誤,會(huì)耗上我們一整下午的時(shí)間,我們
89、需要一點(diǎn)一點(diǎn)的排除,不停地分析和排除可能出錯(cuò)的原因,所以編程是需要很大的勇氣和耐心。有人說(shuō)這是在浪費(fèi)我們的時(shí)間,其實(shí)事實(shí)上當(dāng)你自己獨(dú)立的解決完一個(gè)問(wèn)題后,你會(huì)有很大的收獲。可以說(shuō),結(jié)果固然重要,但在解決問(wèn)題的過(guò)程中,我們學(xué)會(huì)了如何分析和解決問(wèn)題不是更有意義嗎?!</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 王慧芳,畢建權(quán). 軟件工程<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 推箱子c課程設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì)--推箱子游戲
- c語(yǔ)言課程設(shè)計(jì)--推箱子游戲
- 《c語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)推箱子
- 推箱子游戲課程設(shè)計(jì)
- 推箱子游戲課程設(shè)計(jì)
- c++課程設(shè)計(jì)報(bào)告
- c++掃雷課程設(shè)計(jì)報(bào)告
- javame課程設(shè)計(jì)-- 手機(jī)推箱子游戲
- 匯編語(yǔ)言推箱子課程設(shè)計(jì)
- c++面向?qū)ο笳n程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)報(bào)告--幸運(yùn)52
- c++課程設(shè)計(jì)報(bào)告--幻方
- c++課程設(shè)計(jì)報(bào)告--坦克游戲
- c++課程設(shè)計(jì)——日期類(lèi)設(shè)計(jì)報(bào)告
- c++程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- c++醫(yī)院選址問(wèn)題-課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)報(bào)告--猜數(shù)游戲
- 顯示年歷c++課程設(shè)計(jì)報(bào)告資料
- c++課程設(shè)計(jì)報(bào)告-- 學(xué)籍管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論