c++推箱子課程設(shè)計報告_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告書</b></p><p>  課程名稱: 軟件綜合 </p><p>  題 目:基于VC++6.0的“推箱子”游戲軟件的開發(fā)與測試</p><p>  系 名: 信息工程系 </p><p>  專業(yè)班級:

2、 </p><p>  姓 名: </p><p>  指導教師: </p><p>  2013 年 元月 18日</p><p><b>  課程設(shè)計任務(wù)書</b></p&

3、gt;<p>  學生姓名: 專業(yè)班級: 軟件2101 </p><p>  指導教師: 工作單位: 信息系計算機教研室</p><p>  設(shè)計題目: 基于VC++6.0的“推箱子”游戲軟件的開發(fā)與測試</p><p><b>  初始條件:</b></

4、p><p>  已完成c語言程序設(shè)計、軟件工程、數(shù)據(jù)庫概論或數(shù)據(jù)庫技術(shù)等課程的學習</p><p>  2. 系統(tǒng)環(huán)境:Intel 奔騰4以上處理器,1G以上內(nèi)存,40G以上硬盤,</p><p>  Windows編程環(huán)境,Visual C++ 6.0編程工具</p><p>  要求完成的主要任務(wù):(在規(guī)定的時間內(nèi)完成下列任務(wù))</p

5、><p> ?。òㄕn程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p><b>  主要任務(wù):</b></p><p>  系統(tǒng)完成用戶登錄及管理員增加、刪除、修改、查詢功能</p><p>  1. 按系統(tǒng)功能進行游戲背景區(qū)域(移動區(qū)域、圍墻)的設(shè)計與繪制:</p><p>  

6、2. 根據(jù)系統(tǒng)實現(xiàn)的功能,繪出功能圖、系統(tǒng)流程圖</p><p>  3. 模塊調(diào)試,運行結(jié)果正確,并經(jīng)教師檢查及答辯;</p><p>  設(shè)計報告撰寫格式要求:(課程設(shè)計報告按統(tǒng)一通用格式書寫)具體內(nèi)容如下:</p><p> ?、?設(shè)計任務(wù)與要求 ② 總體方案與說明</p><p> ?、?程序主要模塊的流程圖

7、 ④ 問題分析與解決方案的設(shè)計思想和改進設(shè)想</p><p> ?、?系統(tǒng)的調(diào)試記錄、調(diào)試報告(即在調(diào)試中遇到的主要問題、解決方法及改進設(shè)想)</p><p><b> ?、?小結(jié)與體會</b></p><p>  附錄:① 使用說明 ② 參考資料</p><p>  時間安排:2012年12月29

8、日---2013年元18日(共三周)</p><p>  指 導 教 師 簽 字: 2012年12月28日</p><p>  系 主 任 簽 字: 年 月 日</p><p><b>  目 錄</b></p><p><b>  1引言1

9、</b></p><p>  2項目需求分析1</p><p>  3系統(tǒng)概要設(shè)計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)鍵盤操作功能3</p><p>  3.3.3能夠把放置到位置的箱子進行變色顯示4</p><p>  3.3.4游戲勝負判斷功能4</p><p>  3.3.5支持關(guān)口選擇功能4</p><p>  3.4推箱子功能框架4</p>

11、<p>  3.5游戲界面設(shè)計5</p><p>  3.5.1游戲主界面5</p><p>  3.5.2游戲菜單與幫助結(jié)構(gòu)設(shè)計5</p><p>  3.5.3游戲中關(guān)卡選擇對話框設(shè)計6</p><p>  3.6游戲的界面實現(xiàn)6</p><p>  3.7關(guān)卡選擇對話框的實現(xiàn)7&

12、lt;/p><p><b>  4詳細設(shè)計10</b></p><p>  4.1地圖文件讀取模塊的設(shè)計與實現(xiàn)10</p><p>  4.2地圖繪制模塊的設(shè)計與實現(xiàn)10</p><p>  4.3鍵盤操作模塊的設(shè)計與實現(xiàn)12</p><p>  4.4游戲規(guī)則模塊設(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功能測試17</b></p><p>  6.1主菜單和

14、界面顯示功能測試17</p><p>  6.2鍵盤操作功能測試17</p><p>  6.3箱子放置到指定位置時變色顯示功能測試19</p><p>  6.4支持地圖擴展功能的演示20</p><p>  7特殊問題及解決方法21</p><p><b>  8設(shè)計小結(jié)21<

15、/b></p><p><b>  9參考文獻21</b></p><p><b>  引言</b></p><p>  最經(jīng)典的推箱子游戲,類似的游戲你一定早就玩過。要控制搬運工上下左右移動,來將箱子推到指定地點</p><p>  記得幾年前,《推箱子》在PC機上刮起了一股不小的益智類

16、游戲的旋風,現(xiàn)在許多資深玩家也都對《推箱子》贊不絕口,可見有深度的益智類游戲是非常受大家歡迎的?!⊥葡渥佑螒?981年由日本人今林宏行首創(chuàng),是在1982年12月由Thinking Rabbit 公司首次發(fā)行,名“倉庫番”。箱子只可以推, 不可以拉, 而且一次只能推動一個,勝利條件就是把所有的箱子都推到目的地。</p><p>  推箱子游戲是一種老少皆宜的益智游戲,既可以開發(fā)青少年學生的智力,又可以防止老年癡呆癥

17、,全家一起攻關(guān)還可以促進家庭和睦,何樂而不為?</p><p>  推箱子游戲是目前比較流行的游戲之一,很多操作系統(tǒng)或者流行軟件都會帶有這種游戲。它既能鍛煉思維的嚴密性,又有很多樂趣。我們團隊比較喜歡玩這個游戲,于是備采用c++編程語言進行實現(xiàn)。</p><p><b>  項目需求分析</b></p><p>  用戶可以進行開始游戲,退出游

18、戲,選關(guān),重新開始游戲等操作。有結(jié)束提示。</p><p>  作為一款極為經(jīng)典的游戲,推箱子吸引了一代代玩家樂此不疲,通過使用Visual C++6.0進行設(shè)計,將學習過的知識應(yīng)用到實際程序中,以便于為以后的進一步學習奠定基礎(chǔ)。</p><p>  推箱子游戲的設(shè)計目標完成一個比較簡單的游戲,使之能夠?qū)崿F(xiàn)推箱子游戲的基本功能,成為一個比較完整的游戲框架。在一個狹小的倉庫中,要求把木箱放到

19、指定的位置,稍不小心就會出現(xiàn)箱子無法移動或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務(wù)。</p><p>  在游戲主界面中,會出現(xiàn)一個小人、若干個箱子和箱子放置點。玩家需要利用方向鍵控制小人上下左右移動,并推動界面中的箱子到達指定的箱子放置點。</p><p><b>  系統(tǒng)概要設(shè)計 </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>  游戲需要一共主菜單讓玩家進行游戲設(shè)置,同時能夠把地圖文件中的信息轉(zhuǎn)換成為圖像顯示在游戲界面上。</p><p>  能夠?qū)崿F(xiàn)鍵盤操作功能</p><p>  能夠接受到鍵盤

22、駛?cè)氲姆较蜴I信息,并根據(jù)不同的方向鍵把游戲人物移動到相應(yīng)的位置。例如,當玩家單機方向鍵向上“上”時,如果向上的位置是可以移動的,那么就當把游戲人物向上西東一個方格。</p><p>  能夠把放置到位置的箱子進行變色顯示</p><p>  當玩家把箱子推到指定位置的格子時,需要把這個箱子進行變色,這樣就能明確的現(xiàn)實出該箱子已經(jīng)放置到指定位置。</p><p>&l

23、t;b>  游戲勝負判斷功能</b></p><p>  在游戲中,當玩家把所有的箱子都推到指定點時,玩家勝利通過當前游戲關(guān)口,進行下一關(guān)口的游戲。如果玩家無法將箱子全部推到指定位置時,玩家失敗,玩家可以選擇重新開始進行當前關(guān)口的游戲,還是退出游戲。</p><p><b>  支持關(guān)口選擇功能</b></p><p>  玩

24、家在游戲中可以自行選擇需要挑戰(zhàn)的關(guān)口。當玩家點擊菜單中的“關(guān)卡選擇”,并在對話框中輸入所需要挑戰(zhàn)的關(guān)口,設(shè)置完畢后點擊開始即可打開所需關(guān)口。</p><p><b>  推箱子功能框架</b></p><p><b>  圖3-3 功能框架</b></p><p>  初始化模塊。該模塊包括屏幕初始化和游戲第一關(guān)到第最后一

25、關(guān)的初始化。屏幕初始化用于輸出操作信息,游戲每一關(guān)的初始化時構(gòu)建每一關(guān)的關(guān)卡。</p><p>  畫圖模塊。該模塊最要是被其他模塊調(diào)用,用于畫墻、在空地畫箱子、畫小人、和畫目的地。</p><p>  移動箱子模塊。該模塊用于移動箱子,包括目的地之間、空地之間和目的地與空地之間箱子的移動</p><p>  移動小人模塊。該模塊用于移動人物,包括目的地之間、空地之

26、間和目的地與空地之間人物的移動</p><p>  功能控制模塊。該模塊是幾個功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)功能和關(guān)卡重置功能。</p><p><b>  游戲界面設(shè)計</b></p><p><b>  游戲主界面</b></p><p>  推箱子游戲主界面設(shè)計如圖3-4所示&

27、lt;/p><p>  圖3-4 設(shè)計的游戲主界面</p><p>  游戲菜單與幫助結(jié)構(gòu)設(shè)計</p><p>  圖3-5 游戲菜單結(jié)構(gòu)</p><p>  圖3-6 幫助結(jié)構(gòu)設(shè)計</p><p>  游戲中關(guān)卡選擇對話框設(shè)計</p><p>  圖3-7 關(guān)卡選擇對話框</p>&

28、lt;p>  當玩家在對話框中輸入關(guān)口數(shù)字,并重新點擊開始游戲時,游戲會自動選擇對應(yīng)關(guān)口的地圖級別開始新游戲。</p><p><b>  游戲的界面實現(xiàn)</b></p><p>  在推箱子游戲中,通過如下幾步即可實現(xiàn)游戲的菜單</p><p>  在推箱子游戲工程的資源中添加一個菜單資源,其屬性如表3-1所示:</p>

29、<p><b>  表3-1 資源屬性</b></p><p>  1給每個菜單欄添加相應(yīng)函數(shù)到CboxManDlg類中。</p><p>  2菜單響應(yīng)函數(shù)的實現(xiàn),各類菜單調(diào)用響應(yīng),要運用到的代碼如下:</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() //重新開

34、始</p><p><b>  {</b></p><p>  GameStart();</p><p><b>  }</b></p><p>  關(guān)卡選擇對話框的實現(xiàn)</p><p>  推箱子游戲關(guān)口選擇對話框的實現(xiàn),分為如下幾步:</p><p&g

35、t;  創(chuàng)建一個對話框資源,并添加相應(yīng)的控件,如圖:</p><p>  圖3-8 關(guān)口選擇對話框資源</p><p>  在資源視窗中,Menu一項,雙擊IDR_MAINFRAME彈出菜單編輯框,添加一個“選關(guān)”選項,隨便修改一個ID</p><p>  “查看->建立類向?qū)А保–trl+W),第一個選項卡,找到“選關(guān)”選項的ID,選中COMMAND消息,點

36、右邊按鈕添加函數(shù)。</p><p>  圖3-9 添加函數(shù)圖1</p><p>  接下來資源視窗,Bitmap下插入Dialog對話框并編輯,添加一個編輯框,修改編輯框ID“查看->建立類向?qū)А?,添加新類,填好類名就會自動生?cpp文件和.h文件?;愡xCDialog,對話框ID選上面建好的對話框。OK</p><p>  圖3-10 添加函數(shù)圖2<

37、;/p><p>  為編輯框添加一個變量,用來存儲編輯框獲得的數(shù)據(jù)。選項卡Member Variables,類名選上面那個對話框的類名,選中編輯框的ID,增加變量</p><p>  圖3-11 變量設(shè)置</p><p> ?。?)要想在CBoxManDlg類中使用這個對話框類,必須包含頭文件:</p><p>  #include "

38、MapSelect.h"</p><p>  最后,選項卡關(guān)聯(lián)函數(shù)中調(diào)用這個對話框類: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>  詳細設(shè)計</b></p><p> 

41、 地圖文件讀取模塊的設(shè)計與實現(xiàn)</p><p>  地圖文件讀取模塊,主要負責將對地圖文件讀取,并把相應(yīng)的文件數(shù)據(jù)轉(zhuǎn)換成地圖顯示出來。其設(shè)計步驟如下:</p><p> ?。?)讀取當前文件夾中的地圖文件。</p><p> ?。?)判斷當前選擇關(guān)口是否在文件夾中存在。</p><p> ?。?)如果存在則把當前關(guān)口的地圖信息放置到地圖數(shù)組中

42、。</p><p>  其實現(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)卡編號變成[X]</p><p>  FILE *pFile=fopen("./Debug/map.txt","rb");//打開地圖文件</p><p>  if (pFile==NULL)return;//判斷打開是否失敗</p><p>  char cTmp[20];//創(chuàng)建

44、臨時字符數(shù)組</p><p>  fgets(cTmp,20,pFile);//讀取一行到數(shù)組中</p><p>  while (strncmp(cTmp,str,3)!=0)//讀取與當前關(guān)口編號相同的地圖</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è)計與實現(xiàn)</p><p>  地圖繪制模塊主要將地圖數(shù)組中的數(shù)據(jù)繪制成地圖圖像。其設(shè)計分為如下幾步。</p><p>  格局要求,實

47、現(xiàn)不同類型格子的繪制函數(shù)。地圖數(shù)組及地圖文件中各字符代表的意思如表4-1所示:</p><p>  表4-1 地圖數(shù)組及地圖字符代表的意思</p><p>  (2)讀取地圖數(shù)據(jù),根據(jù)不同的數(shù)據(jù)調(diào)用不同的繪圖函數(shù)。</p><p>  地圖繪制,模塊的實現(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ù)進行繪圖</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繪制目標</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 繪制箱子與目標重合</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: //繪制人和目標重合</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>  鍵盤操作模塊的設(shè)計與實現(xiàn)</p><p>  鍵盤操作模塊主要負責接收玩家鍵盤輸入并進行箱子移動等處理,其設(shè)計比較簡單,只需要通過如下幾步即可實現(xiàn)。</p><p>  通過截獲當前窗口中鍵盤按下消息來判斷玩家按下的按鍵。</p><p>  根據(jù)

57、玩家按下的按鍵把人的相關(guān)坐標進行加減。例如:當玩家按下方向鍵“右”時,把人的X坐標增加,反之,把人的X坐標減少。</p><p>  把增加后的數(shù)據(jù)與地圖數(shù)組中的數(shù)據(jù)進行比較,只要不是地圖邊框就可以移動,如果是箱子就還需要將箱子的坐標進行移動。</p><p>  但是要注意,要判斷箱子移動后的坐標是否可以移動。</p><p>  鍵盤操作模塊的實現(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ù)按下的按鍵進行判斷</p><p>  Invalidate(FALSE);</p><p>  if (isFinish()) //調(diào)用規(guī)則模塊函數(shù),判斷是否勝利</p><p><b>  {</b></p><p&

60、gt;  AfxMessageBox("恭喜你!過關(guān)?。。?quot;);</p><p>  g_level=g_level+1; //勝利后將當前關(guān)口加1</p><p>  if (g_level>g_maxlevel)</p><p><b>  {</b></p><p>  g_level

61、=1; //如果大于最大關(guān)口編號,重新開始</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è)計與實現(xiàn)</p><p>  游戲規(guī)則模塊,主要負責游戲規(guī)則的判斷。其設(shè)計方法需要在每次玩家移動人物后,對當前地圖數(shù)組進行判斷。如果當前地圖中存在單獨的“目標區(qū)域”或者“人物站在目標上”兩種情況,就說明玩

63、家未過關(guān),放置就死過關(guān)。</p><p>  游戲規(guī)則模塊的實現(xiàn),代碼如下:</p><p>  BOOL CBoxManDlg::isFinish() //判斷是否過關(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;//有目標區(qū)域或人物站在目標區(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)試功能較為強大的編譯器之一。調(diào)試程序是每個初學者必須經(jīng)歷的過程,只有

67、不斷發(fā)現(xiàn)自己的錯誤,才能減少編程錯誤,提高編程能力。當然我們不建議一遇到錯誤就調(diào)試,我希望大家先用眼睛看,把常見的錯誤都改正后,最后不行再調(diào)試,這樣編程能力才會進步。要做到十分鐘上百行無錯代碼的能力,不下苦功是練不成的。</p><p>  常用的調(diào)試快捷鍵有:</p><p>  F10 單步運行,不進入函數(shù)。</p><p>  F11 單步運行,進入函數(shù)。如果

68、是自定義函數(shù),則進入自定義函數(shù)。如果是系統(tǒng)函數(shù),如scanf,printf,return 等等,則進入?yún)R編,當然這不是我們期望的。</p><p>  單步運行的同時,左下方會自動顯示當前被改變值的變量,右下方則可以輸入自定義變量。一般F10,F11結(jié)合使用。</p><p>  F9 設(shè)置斷點。光標所在行設(shè)置斷點。</p><p>  F5 運行到斷點處暫停。&l

69、t;/p><p>  為了更快運行到我們關(guān)心的地方,避免F10一步一步的運行浪費時間。 F9,F5一般結(jié)合使用,到我們關(guān)注的地方后,我們可以繼續(xù)F10。</p><p>  設(shè)斷點的另外一大好處,是在遞歸程序中設(shè)置斷點,可以很快運行到下一層中。</p><p>  寫程序要養(yǎng)成良好代碼風格,沒有人會喜歡看別人錯誤的代碼,尤其是那些沒有分行縮進,一律左對齊的代碼。養(yǎng)成分行

70、縮進的風格在檢查括號匹配的時候,也非常方便。</p><p>  運行時錯誤:一運行就彈出窗口,或在某些輸入數(shù)據(jù)的情況下,彈出“內(nèi)存出錯警告”的窗口。多數(shù)是由于指針訪問非法空間造成的,比如未動態(tài)開辟就訪問,釋放后再次訪問或釋放等等。數(shù)組下標越界,開辟極大空間等也有可能導致此類錯誤。解決方法,可以通過單步運行F10或運行到斷點處F5,確定出錯行,然后仔細檢查代碼,加以修正</p><p>&

71、lt;b>  調(diào)試快捷鍵</b></p><p><b>  F5:  開始調(diào)試</b></p><p>  Shift+F5: 停止調(diào)試</p><p>  F10:   調(diào)試到下一句,這里是單步跟蹤  </p><p>  F11:   調(diào)

72、試到下一句,跟進函數(shù)內(nèi)部</p><p>  Shift+F11:  從當前函數(shù)中跳出</p><p>  Ctrl+F10:  調(diào)試到光標所在位置</p><p>  F9:       設(shè)置(取消)斷點</p><p>  Alt+F9:&

73、#160;   高級斷點設(shè)置</p><p><b>  跟蹤調(diào)試</b></p><p>  1、 盡量使用快捷鍵時行調(diào)試</p><p><b>  2、 觀察調(diào)試信息</b></p><p><b>  3、 高級中斷設(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工具欄窗口①:在任意工具欄的位置,單擊鼠標右

75、鍵,勾選Debug項  ②:Tools---->Customize--àToolbars--àDebug--àclose  引申:工具欄和工具條的區(qū)別?  一個工具欄可以放置多個工具條。2.斷點調(diào)試F9:設(shè)置或去除斷點。如果當前行未設(shè)置斷點,按F9可在當前行設(shè)置斷點,如果當前行已設(shè)置斷點,按F9則為去除斷點設(shè)置。Alt+F9:調(diào)出斷點設(shè)置窗口  在

76、這個窗口里可以設(shè)置斷點,去除所有已經(jīng)設(shè)置的斷點或者單個斷點,也可以轉(zhuǎn)到已設(shè)置的斷點處,通過按鈕Edit Code,可以設(shè)置需要被計算的表達式,可以設(shè)置,監(jiān)視(Watch)數(shù)組或結(jié)構(gòu)體元素的個數(shù),可以在窗口過程函數(shù)中設(shè)置斷點,可以為任何一個想要監(jiān)視(Watch)的消息(Message)設(shè)置一個斷點。3.開始調(diào)試①:Build--Start Debug--Go②:F5注:F5有兩層含義。對于非調(diào)試階段,按F5用于開始調(diào)試。對于調(diào)試階

77、段(已經(jīng)進入調(diào)試階段),按F5用于運行程序到下一個斷點處4.停止調(diào)試一旦按F5之后進入調(diào)試階</p><p><b>  功能測試</b></p><p>  主菜單和界面顯示功能測試</p><p>  這個演示主要是測試游戲的菜單和界面顯示是否成功,其步驟如下。</p><p>  運行推箱子程序.exe文件,如

78、圖6-1所示</p><p><b>  圖6-1 運行文件</b></p><p>  程序啟動后,其菜單及界面如圖6-2所示</p><p><b>  圖6-2 界面效果</b></p><p><b>  鍵盤操作功能測試</b></p><p>

79、;  鍵盤操作功能的演示,演示步驟如下:</p><p>  游戲開始后人物的位置,如圖6-3所示</p><p><b>  圖6-3</b></p><p>  按下鍵盤上的“下”方向按鍵。</p><p>  查看任務(wù)是否向下移動,如圖5-4:</p><p><b>  圖6-4

80、</b></p><p>  箱子放置到指定位置時變色顯示功能測試</p><p>  將箱子放置到指定位置時,箱子會變色的功能,具體步驟如下</p><p>  推箱子游戲已經(jīng)開始,如圖6-5所示</p><p><b>  圖6-5</b></p><p>  推動箱子到指定位置后

81、,顯示如圖5-6所示</p><p><b>  圖6-6</b></p><p>  支持地圖擴展功能的演示</p><p>  推箱子游戲是否支持地圖擴展功能,步驟如下:</p><p>  查看第一關(guān)地圖文件,其內(nèi)容如下:</p><p>  與游戲顯示的地圖對照</p>&l

82、t;p>  圖6-7 第一關(guān)地圖文件 圖6-8 修改后的地圖文件</p><p>  重新進行第一關(guān)游戲,地圖顯示</p><p><b>  圖6-9</b></p><p>  特殊問題及解決方法 </p><p><b>  1、 問題1</b></p><

83、p><b>  問題描述</b></p><p>  記錄所有走過的步數(shù)總是不成功</p><p><b>  解決方案</b></p><p><b>  設(shè)置變量sum </b></p><p><b>  解決結(jié)果</b></p>

84、<p>  可以記錄所有走過的步數(shù),當游戲重新開始的時候本關(guān)的步數(shù)清零。</p><p><b>  2、問題2 </b></p><p><b>  問題描述</b></p><p>  在初始化地圖函數(shù)時,由于每加載地圖均要將目的地存儲于 POINT DE[]中,由于人物移動過程中當人物占領(lǐng)目的地時,目的地

85、POINT DE[]存儲內(nèi)容也會隨之改變,事實上DE里面的值是不會變的</p><p><b>  解決方案</b></p><p>  對POINT DE[]的值只初始化一次,記在選關(guān)按鈕按下時,或游戲結(jié)束時才初始化,當人物移動時,當加載目的地圖片時,不再對 POINT DE[]進行賦值。</p><p><b>  解決結(jié)果<

86、;/b></p><p>  目的地的圖片正常顯示,成功判斷當前關(guān)是否成功</p><p><b>  設(shè)計小結(jié)</b></p><p>  從工程實踐開始前兩周,原計劃使用MFC開發(fā)程序,因為較WIN32應(yīng)用程序熟悉,但是后來考慮到運用WIN32應(yīng)用程序能使得開發(fā)更為靈活,且文件不至于冗余。剛剛使用WIN32應(yīng)用程序開發(fā)的時候,對整個開

87、發(fā)框架和消息機制的不熟悉,走了很多彎路,花了不少時間實踐,從最初的需求分析設(shè)計,概要設(shè)計,我們小組都會集中實驗室進行詳細的探討,雖然在探討過程中不免會有不同意見,但是都能很好的協(xié)商,調(diào)節(jié)過來,本次實踐不僅在編程知識上有了更深的理解,也加深了我們對團隊合作的重要性的認識。</p><p>  雖然本款游戲與傳統(tǒng)上的推箱子游戲大同小異,但是我們盡了自己最大的努力去完善和修正它,小組成員都盡力扮演好自己的角色,對自己的

88、分工也是按時按量的完成。為了此次項目能按時按量的完成,我們在明確自己的方向后,不斷地在百度,谷歌,圖書館尋求為我們的答案。本次實踐,我們的美工也是異常幸苦,為了滿足我們程序主題的要求,不斷地更新圖片,有時候也會連續(xù)制作圖片達3,4個小時。雖然這次的游戲沒有預想中的那么好,但是通過本次學習,下個作品將會更加出彩。</p><p>  編程工作不是那么容易的,有時候為了找一個小小的錯誤,會耗上我們一整下午的時間,我們

89、需要一點一點的排除,不停地分析和排除可能出錯的原因,所以編程是需要很大的勇氣和耐心。有人說這是在浪費我們的時間,其實事實上當你自己獨立的解決完一個問題后,你會有很大的收獲??梢哉f,結(jié)果固然重要,但在解決問題的過程中,我們學會了如何分析和解決問題不是更有意義嗎?!</p><p><b>  參考文獻</b></p><p>  [1] 王慧芳,畢建權(quán). 軟件工程<

溫馨提示

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

評論

0/150

提交評論