2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  VC課程設計報告</b></p><p><b>  設計題目:貪吃蛇</b></p><p><b>  目錄</b></p><p>  第一章 引言- 1 -</p><p>  1.1關于題目- 1 -</p><p

2、>  1.1.1題目要求- 1 -</p><p>  1.1.2選題背景- 1 -</p><p>  1.2關于編譯軟件- 1 -</p><p>  1.3關于兼容性- 1 -</p><p>  第二章 概要設計- 2 -</p><p>  2.1軟件主要功能設計- 2 -</p>

3、;<p>  2.1.1程序結構- 2 -</p><p>  2.1.2程序流程- 2 -</p><p>  第三章 軟件實現(xiàn)- 4 -</p><p>  3.1變量函數(shù)及資源的聲明- 4 -</p><p>  3.1.1函數(shù)聲明- 4 -</p><p>  3.1.2變量聲明- 4

4、 -</p><p>  3.1.3資源- 5 -</p><p>  3.2主要功能的實現(xiàn)- 5 -</p><p>  3.2.1游戲界面- 5 -</p><p>  3.2.2初始化食物- 6 -</p><p>  3.2.3開始游戲- 7 -</p><p>  3.2.4

5、英雄榜- 9 -</p><p>  3.2.5游戲設置- 9 -</p><p>  第四章 結果與討論- 10 -</p><p>  4.1程序運行- 10 -</p><p>  4.2錯誤調(diào)試與分析- 12 -</p><p><b>  第一章 引言</b></p>

6、;<p><b>  1.1關于題目</b></p><p><b>  1.1.1題目要求</b></p><p>  利用Microsoft Visual C++制作一個貪吃蛇的小游戲,要求:</p><p>  應用MFC單文檔制作</p><p>  能夠記錄游戲時間,游戲成績

7、</p><p>  可暫停/繼續(xù)并在玩家不愿游戲時停止游戲</p><p>  蛇的身體能夠隨著蛇的長度變色</p><p><b>  能夠顯示英雄榜</b></p><p><b>  有背景音樂和音效</b></p><p><b>  1.1.2選題背景&

8、lt;/b></p><p>  貪吃蛇是家喻戶曉的益智類小游戲,選擇這個題目一是為了將自己的所學知識加以運用,二是一直以來貪吃蛇這個游戲就深深地吸引著我,它的制作方法對于以前的我而言都是很神秘的。我希望通過自己的所學知識把它剖析開來,真真正正的了解它的本質(zhì)和精髓。雖然我的編程能力不是很強,但是我有信心,在這次學習中我將從實踐和實際的項目中提高自己的編程能力。因此我選定了這個題目。</p>&

9、lt;p><b>  1.2關于編譯軟件</b></p><p>  本程序采用Microsoft Visual C++6.0的英文版本進行編譯。VisualC++6.0是Microsoft公司推出的基于Windows操作系統(tǒng)的可視化C++編程工具,盡管Microsoft公司推出了.NET平臺的集成開發(fā)環(huán)境,但由于其良好的界面和可操作性,加上支持標準C/C++規(guī)范,但仍有相當多的編程人

10、員使用VisualC++6.0進行應用系統(tǒng)的開發(fā)。</p><p><b>  1.3關于兼容性</b></p><p>  本程序經(jīng)過調(diào)試,可以在XP系統(tǒng)下編譯運行,也可以在Vista下運行,界面稍有不同,但不影響運行結果。</p><p><b>  第二章 概要設計</b></p><p> 

11、 2.1軟件主要功能設計</p><p><b>  2.1.1程序結構</b></p><p>  根據(jù)分析,貪吃蛇這個程序一共要實現(xiàn)如下幾個功能,包括游戲方面開始游戲、暫停游戲以及停止游戲,音樂音效的添加與控制,游戲幫助提示與英雄榜的顯示等等。具體的程序結構如下面的圖1-1所示。</p><p>  圖2-1 貪吃蛇結構圖</p>

12、;<p><b>  2.1.2程序流程</b></p><p>  根據(jù)分析后的貪吃蛇結構設計出相應的貪吃蛇流程。貪吃蛇的內(nèi)容主要包括: 游戲開始,隨機出現(xiàn)食物;按下ToolBar中的暫停按鈕或Space鍵可以實現(xiàn)暫停功能;按下幫助鍵或ToolBar中的“?”鍵可獲得游戲幫助說明;可播放背景音樂和音效并可通過菜單以及ToolBar控制其播放或停止等等。</p>

13、<p>  圖2-2 貪吃蛇流程圖</p><p><b>  第三章 軟件實現(xiàn)</b></p><p>  3.1變量函數(shù)及資源的聲明</p><p>  根據(jù)程序的結構,將貪吃蛇需要實現(xiàn)的功能細化成為相應的函數(shù)。</p><p><b>  3.1.1函數(shù)聲明</b></p>

14、;<p>  void CYuShuoView::OnDraw(CDC* pDC) </p><p>  //在OnDraw函數(shù)中繪制游戲背景、游戲文字以及控制蛇的樣式顏色。</p><p>  void CYuShuoView::YsInitFood() //初始化貪吃蛇的食物,使其隨機生成</p><p>  vo

15、id CYuShuoView::YsInitGame() //初始化貪吃蛇游戲參數(shù)</p><p>  void CYuShuoView::YsReDisplay(CPoint ysPoint) //重繪游戲窗口</p><p>  void CYuShuoView::OnYsBegin() //開始游戲(菜單響應消息)

16、</p><p>  void CYuShuoView::OnYsPause() //暫停游戲(菜單響應消息)</p><p>  void CYuShuoView::OnYsStop() //停止游戲(菜單響應消息)</p><p>  void CYuShuoView::OnYsExit()

17、 //退出游戲(菜單響應消息)</p><p>  void CYuShuoView::OnYsEffect() //控制游戲音效</p><p>  void CYuShuoView::OnYsMusicbkg() //控制游戲背景音樂</p><p>  void CYuShu

18、oView::OnYsLevel1() //控制游戲等級為初級</p><p>  void CYuShuoView::OnYsLevel2() //控制游戲等級為中級</p><p>  void CYuShuoView::OnYsLevel3() //控制游戲等級為高級</p>&l

19、t;p>  void CYuShuoView::OnYsHelpgame() //游戲幫助</p><p>  void CYuShuoView::OnYsBest() //英雄榜的顯示</p><p><b>  3.1.2變量聲明</b></p><p>  CArray<

20、;CPoint,CPoint> m_ysBody; //定義點數(shù)組作為蛇的身體</p><p>  CPoint m_ysFood; //食物出現(xiàn)的點</p><p>  int m_ysTime; //顯示時間</p>

21、<p>  int m_ysTime1; //滿10則進一位使時間增加1秒</p><p>  int m_ysDirect; //方向控制變量</p><p>  int m_ysScore;

22、 //玩家成績變量</p><p>  int m_yspausectrl; //暫??刂谱兞?lt;/p><p>  int m_yslevelctrl; //等級控制變量</p><p>  CString m_ysPlayer;

23、 //玩家姓名</p><p>  int m_yseffectctrl; //音效控制變量</p><p>  int m_ysmusicctrl; //背景音樂控制變量</p><p><b>  3.1

24、.3資源</b></p><p><b>  1、對話框</b></p><p>  IDD_YS_HELPGAME //游戲幫助說明</p><p>  IDD_YS_BEST //英雄榜</p><p>

25、;  IDD_YS_RETRY //停止游戲確認</p><p>  IDD_ABOUTBOX //關于游戲版本</p><p><b>  2、音樂</b></p><p>  IDR_YS_BKGMUSIC

26、 //游戲背景音樂</p><p>  IDR_YS_EAT //貪吃蛇吃到食物的音樂</p><p>  IDR_YS_LOWSCORE //游戲結束后得低分音樂</p><p>  IDR_YS_HIGHSCORE

27、 //游戲結束后得高分音樂</p><p><b>  3、位圖</b></p><p>  IDB_YS_BITMAP //游戲背景圖</p><p><b>  4、菜單/工具欄</b></p><p>  IDR_MAINF

28、RAME //系統(tǒng)自帶菜單</p><p>  IDR_YS_TOOLBAR //自己創(chuàng)建的工具條</p><p><b>  頭文件</b></p><p>  mmsystem.h //播

29、放音樂的相應文件 </p><p>  fstream.h //文件流文件 </p><p>  3.2主要功能的實現(xiàn)</p><p><b>  3.2.1游戲界面</b></p><p>  貪吃蛇游戲的游戲界面包括背景圖片、蛇身體的繪制、蛇

30、移動范圍的繪制等等。其中貪吃蛇的身體用什么方法繪制,才可以使得其在游戲過程中可以實現(xiàn)“吃”的功能是很重要的。因此在游戲界面的初始繪制時就必須考慮到游戲時可能遇到的問題。</p><p>  本程序采用點數(shù)組CArray<CPoint,CPoint> m_ysBody來存儲貪吃蛇,點數(shù)組的功能很強大,可以添加點,同時可以獲得蛇的長度,對于而后進行游戲中控制蛇的顏色以及音效的播放等都有很大的幫助。<

31、/p><p>  導入位圖以及菜單工具條后,游戲未開始前(XP系統(tǒng)下)的界面顯示如圖3-1所示</p><p>  圖3-1 游戲初始界面顯示</p><p>  3.2.2初始化食物</p><p>  確定用點數(shù)組存儲貪吃蛇以后,貪吃蛇的食物如何達到隨機出現(xiàn),并且能夠按照網(wǎng)格式與蛇頭無偏差相接就是一個亟待解決的問題。</p>&

32、lt;p>  隨機出現(xiàn)應采用rand()函數(shù)來實現(xiàn),而食物與蛇頭無偏差相接則利用坐標來解決。設置兩個整型變量m_ysX,m_ysY作為食物出現(xiàn)的點的坐標,令m_ysX= rand()%30, ,m_ysY= rand()%40即可。使隨機出現(xiàn)的點能夠整除最小網(wǎng)格,也就是使食物與蛇頭無偏差相接。</p><p>  再由食物坐標(m_ysX,m_ysY)與蛇頭坐標是否相同判斷蛇是否“吃”到了食物,設置判斷標簽

33、ysTag,如果吃到了,ysTag為1,則再出現(xiàn)下一個食物,反之,如果沒吃到,則不出現(xiàn)食物直到標簽為1為止。</p><p>  最后,再將(m_ysX,m_ysY)賦給m_ysFood作為食物坐標,以便在其他函數(shù)中調(diào)用。在下面的圖3-2中,我們可以看到,蛇的身體是與出現(xiàn)的食物在一條直線上的,完全可以達到相接的目的。</p><p>  圖3-2 蛇與食物的相接</p>&l

34、t;p><b>  3.2.3開始游戲</b></p><p>  開始游戲后的重點是如何用鍵盤來控制蛇的移動并傳遞到OnTimer(UINT nIDEvent)函數(shù)中去以及判斷蛇是否死亡。首先說明鍵盤與蛇的響應,設置一個方向控制變量m_ysDirect,再添加OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)函數(shù)來實現(xiàn)鍵盤消息的傳遞,按下

35、不同的鍵盤按鍵,m_ysDirect會相應的改變,再利用switch語句在OnTimer(UINT nIDEvent)函數(shù)中對坐標進行相應改變即可。如圖3-3所示。 </p><p> ?。?)左 (2)下 (3)右 (4)上</p><p>  圖3-3 鍵盤的上下左右鍵的效果</p><p

36、>  其次來解釋一下如何判斷蛇的死亡,由于蛇的身體是由點坐標數(shù)組構成的,因此判斷蛇是否死亡其本質(zhì)就是判斷蛇頭的坐標是否與游戲邊框相同或者蛇頭坐標是否與蛇自己的身體相同。該過程也在OnTimer(UINT nIDEvent)函數(shù)中寫入即可,設置一個判斷死亡變量ysTag1,當按下向下鍵時,蛇縱坐標不斷自加,此處僅以向下為例,具體程序如下:</p><p>  switch(m_ysDirect)

37、 //根據(jù)鍵盤按下鍵來選擇蛇移動的方向</p><p><b>  {</b></p><p>  case 1: //方向變量向下</p><p>  ysPoint2.y++; //點縱坐標自加</p>

38、;<p>  if(ysPoint2.y>=40) //如果縱坐標多于最下端邊框</p><p><b>  {</b></p><p>  ysTag1=1; //變量為1,判斷死亡</p><p><b>  }</b><

39、;/p><p><b>  break;</b></p><p><b>  }</b></p><p>  如果ysTag1為1,則說明蛇已經(jīng)死亡,應當彈出對話框提示死亡,輸出得分(如圖3-4),同時還可以根據(jù)玩家的得分數(shù)相應的改變對話框中的話語(XP系統(tǒng)下)。</p><p>  圖3-4 貪吃蛇的

40、死亡</p><p>  我們看到圖3-4的蛇身體的顏色發(fā)生了變化,不再是初始狀態(tài)的綠色,而是變?yōu)榱怂{色,這是在OnDraw(CDC* pDC)函數(shù)中設置的,設置變量獲取蛇身長度,隨著長度的增加,蛇的顏色發(fā)生相應改變,最終會變?yōu)楸硎疚kU的紅色。</p><p>  并且伴隨著貪吃蛇掛掉,播放不同的音樂,如果高于70分,則放帶有掌聲鼓勵的高分音樂的IDR_YS_HIGHSCORE,反之,則播

41、放蛇被撞死的電子音樂IDR_YS_LOWSCORE。</p><p>  播放音樂的函數(shù)用包含在頭文件mmsystem.h中的PlaySound函數(shù)。此外,游戲開始還需要計時、計分以及暫停等功能。這些功能都比較簡單,游戲時間和分數(shù)分別用兩個變量m_ysTime和m_ysScore來記錄,應用pDC->TextOut函數(shù)來輸出即可。至于暫停和繼續(xù)的功能實現(xiàn),只需要暫停和恢復計時器就可以了,實現(xiàn)暫停功能即Kil

42、lTimer(1)并同時令控制暫停變量為m_yspausectrl為0即可。</p><p><b>  3.2.4英雄榜</b></p><p>  很多游戲都有英雄榜這一個功能。貪吃蛇這個游戲也不例外,為了下一次開始新游戲的玩家也能夠看到別人的成績,所以采用文件來存儲游戲記錄。</p><p>  首先加入頭文件fstream.h包含文件寫

43、入讀出函數(shù)ifstream、ofstream。定義文件及變量存儲成績,將對話框中EditBox的變量設置成為對應類型。例如:</p><p>  CYsBestRecord dlg;</p><p>  dlg.m_ysbestscore1=m_1bestscore;</p><p>  上面所寫的就是變量的傳遞,傳遞完畢后,對話框控件中就有了初值,可以正常顯示分數(shù)

44、。而后進行游戲相應等級的玩家成績判斷,如果玩家成績與英雄榜成績相同,則根據(jù)時間來判斷,若游戲時間短,則進入英雄榜。判斷條件如下:</p><p>  (m_ysScore>m_1bestscore||m_ysScore==m_1bestscore&&m_ysTime<m_1besttime)&&m_yslevelctrl==1</p><p> 

45、 本程序默認游戲結束即顯示英雄榜,但玩家如果想在沒有游戲時查看也可以點擊菜單“幫助—〉英雄榜”查看。</p><p><b>  3.2.5游戲設置</b></p><p>  這里的游戲設置主要是指游戲的等級以及音效音樂的播放控制。前面在變量聲明中已經(jīng)看到,關于這三個量,我們已經(jīng)予以了定義,只需要在按下相應鍵盤或鼠標消息的時候,將變量值進行改變,再利用這些值控制相應

46、功能的運行。以游戲音效為例,在按下菜單中的“游戲設置—〉音樂—〉音效開/關” 后(即菜單消息void CYuShuoView::OnYsEffect()),代碼如下:</p><p>  switch(m_yseffectctrl) //根據(jù)音效控制變量選擇</p><p><b>  {</b></p><p>  case 1:

47、 //音效選擇開</p><p>  m_yseffectctrl=0; //將音效控制變量改為0</p><p><b>  break;</b></p><p>  case 0: //音效選擇關</p><p>  m_yseffectctrl=1;

48、 //將音效控制變量改為1 </p><p><b>  break;</b></p><p><b>  }</b></p><p>  其中在構造函數(shù)CYuShuoView::CYuShuoView()中已經(jīng)將m_yseffectctrl的初值設置為1。</p><p><b>

49、  第四章 結果與討論</b></p><p><b>  4.1程序運行</b></p><p>  程序開始運行后會進入游戲界面,但是不會立即進行游戲,單擊菜單的“開始”才會開始游戲。在游戲開始前,玩家可以根據(jù)自己的喜好,通過菜單或者工具欄設置游戲等級等。</p><p>  在游戲過程中,按下Space鍵就會暫停游戲,再按下S

50、pace鍵則會繼續(xù)游戲。圖4-1所顯示的是XP系統(tǒng)下菜單的樣式,以及單擊菜單開始。</p><p>  (1)帶有子菜單的菜單樣式</p><p><b> ?。?)單擊開始菜單</b></p><p>  圖4-1 菜單樣式及單擊開始游戲</p><p>  開始游戲了,小蛇越來越長,顏色也有所不同了。顏色的改變預示著

51、游戲的難度加大了,并且,不同的最終得分會產(chǎn)生不同的死亡評語。</p><p>  在前面的圖3-4中顯示了貪吃蛇死亡的樣子,其中因為該局游戲得分比較低,因此得到的評語是“你才得了這么兩分!”,而如果得分較高,就會得到更好的評語,最好的評語是“牛!”。</p><p>  圖4-2所顯示的是游戲開始后隨著蛇長度的增加而變的顏色。</p><p>  黃色

52、 (2)紅色</p><p><b>  圖4-2 蛇變顏色</b></p><p>  如果不太會玩貪吃蛇這款游戲,那么可以單擊菜單“幫助—〉游戲說明”,或者單擊工具條上的,尋求幫助。如圖4-2所示。</p><p><b>  圖4-3 游戲說明</b></p

53、><p>  如果你覺得自己實力很強想看看別人的成績,那么可以單擊英雄榜看看什么樣。</p><p>  圖4-4 英雄榜樣式</p><p>  4.2錯誤調(diào)試與分析</p><p>  本程序由于經(jīng)常調(diào)用Invalidate()函數(shù)重繪窗口,因此在游戲過程中頻閃的非常嚴重。查閱了很多資料,雙緩沖技術可以解決這個問題,但是如果采用雙緩沖技術,暫

溫馨提示

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

評論

0/150

提交評論