數(shù)據(jù)結(jié)構(gòu)面向?qū)ο笳n程設(shè)計(jì)MFC貪吃蛇_(dá)第1頁
數(shù)據(jù)結(jié)構(gòu)面向?qū)ο笳n程設(shè)計(jì)MFC貪吃蛇_(dá)第2頁
數(shù)據(jù)結(jié)構(gòu)面向?qū)ο笳n程設(shè)計(jì)MFC貪吃蛇_(dá)第3頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、湖南工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書2012 2013 學(xué)年第2 學(xué)期計(jì)算機(jī)與通信學(xué)院(系、部)軟件工程專業(yè) 1201班級(jí)課程名稱:面向?qū)ο笳n程設(shè)計(jì)設(shè)計(jì)題目:貪吃蛇完成期限:自2013年6月24 日至2013年6月29 日共1周內(nèi) 容 及 任 務(wù)一、設(shè)計(jì)的主要技術(shù)參數(shù)貪吃蛇游戲?qū)崿F(xiàn)的功能有:控制蛇前后左右移動(dòng)、控制蛇斜走、暫停游戲、繼續(xù)游戲、背景音樂的播放、記錄成績二、設(shè)計(jì)任務(wù)游戲操作界面的生成;插入游戲界面圖片;蛇的移動(dòng)控制、播放音樂、暫停/停止暫停、結(jié)束游戲、游戲記錄的生成;程序的調(diào)試與修改三、設(shè)計(jì)工作量一周進(jìn) 度 安 排起止日期工作內(nèi)容6月24號(hào)游戲操作界面的生成、背景圖片的插入6月25號(hào)-26號(hào)

2、蛇的移動(dòng)控制、播放音樂、暫停 /停止暫停6月27號(hào)-28號(hào)結(jié)束游戲、游戲記錄的生成6月29號(hào)程序的調(diào)試與修改主要參考資料1. 譚浩強(qiáng).C+面向?qū)ο蟪绦蛟O(shè)計(jì)M.北京:清華大學(xué)出版社,2006.2. 張海林,杜忠友,姜玉波.Visual C+ 簡明教程M.北京:電子工業(yè)出版社,2007.3. 丁展,四維科技.Visual C+游戲開發(fā)技術(shù)與實(shí)例M.北京:人民郵電出版社,2005 .4. 姚領(lǐng)田.精通 MFC程序設(shè)計(jì)M.北京:人民郵電出版社.2000.指導(dǎo)教師(簽字):系(教研室)主任(簽字):HUNAN UNIVERSITY OF TECHNOLOGY面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)設(shè)計(jì)說明書基于wind

3、ows界面應(yīng)用程序貪吃蛇起止日期:2013年6月24_日至2013年6月28日學(xué) 生班學(xué)成姓 名級(jí)號(hào)績汪驍將軟件工程1201指導(dǎo)教師(簽字)計(jì)算機(jī)與通信學(xué)院2013年6 月28 日第一章引言1.1關(guān)于題目 41.1.1 題目要求 4選題背景41.2關(guān)于編譯軟件 41.3關(guān)于兼容性4第二章概要設(shè)計(jì)2.1軟件主要功能設(shè)計(jì) 52.1.1 程序結(jié)構(gòu)52.1.2 程序流程 5第三章軟件實(shí)現(xiàn)3.1變量函數(shù)及資源的聲明 63.1.1 函數(shù)聲明6變量聲明63.1.3 資源73.2主要功能的實(shí)現(xiàn) 7游戲界面7初始化食物7開始游戲7游戲設(shè)置 8第四章解釋4.1個(gè)人所分任務(wù)詳解 第五章結(jié)果與討論5 .1程序運(yùn)行 1

4、54.1.1 部分函數(shù)與代碼 155 .2實(shí)驗(yàn)總結(jié)16第一章引言1.1關(guān)于題目題目要求利用Microsoft Visual C+制作一個(gè)貪吃蛇的小游戲,要求:(1)應(yīng)用MFC單文檔制作(2)能夠記錄游戲成績(3)可暫停/繼續(xù)并在玩家不愿游戲時(shí)停止游戲(4)有背景音樂和音效選題背景貪吃蛇是家喻戶曉的益智類小游戲,選擇這個(gè)題目一是為了將自己的所學(xué)知識(shí)加以運(yùn)用,二是一直以來貪吃蛇這個(gè)游戲就深深地吸引著我們, 它的制作方法對(duì)于以前的我們而言 都是很神秘的。我們希望通過自己的所學(xué)知識(shí)把它剖析開來, 真真正正的了解它的本質(zhì)和精 髓。雖然我們的編程能力不是很強(qiáng),但是通過三人團(tuán)隊(duì)的合作 ,我們有信心,在這次學(xué)

5、習(xí)中 我們將從實(shí)踐和實(shí)際的項(xiàng)目中提高自己的編程能力。因此我們選定了這個(gè)題目。1.2關(guān)于編譯軟件本程序采用Microsoft Visual C+6.0的英文版本進(jìn)行編譯。VisualC+6.0 是Microsoft公司推出的基于Windows操作系統(tǒng)的可視化C+編程工具,盡管Microsoft公司推出了 .NET平臺(tái)的集成開發(fā)環(huán)境,但由于其良好的界面和可操作性,加上支持標(biāo)準(zhǔn)C/C+規(guī)范,但仍有相當(dāng)多的編程人員使用VisualC+6.0進(jìn)行應(yīng)用系統(tǒng)的開發(fā)。1.3關(guān)于兼容性本程序經(jīng)過調(diào)試, 可以在XP系統(tǒng)下編譯運(yùn)行,也可以在Vista下運(yùn)行,界面稍有不同, 但不影響運(yùn)行結(jié)果。第二章概要設(shè)計(jì)2.1軟件

6、主要功能設(shè)計(jì)程序結(jié)構(gòu)根據(jù)分析,貪吃蛇這個(gè)程序一共要實(shí)現(xiàn)如下幾個(gè)功能,包括游戲方面開始游戲、暫停游戲以及停止游戲,音樂音效的添加與控制, 游戲幫助提示等等。 具體的程序結(jié)構(gòu)如下面的圖所示:游戲控制模塊游戲游戲幫助程序流程根據(jù)分析后的貪吃蛇結(jié)構(gòu)設(shè)計(jì)出相應(yīng)的貪吃蛇流程。貪吃蛇的內(nèi)容主要包括:游戲開始,隨機(jī)出現(xiàn)食物;按下暫停按鈕或Space鍵可以實(shí)現(xiàn)暫停功能,按下Z鍵游戲繼續(xù)開始;按下幫助鍵可獲得游戲幫助說明;可播放背景音樂等等。下圖衛(wèi)程序流程圖Retur n true本次貪吃蛇基本流程與大體思想1 定義蛇類和食物類,初始化貪吃蛇各項(xiàng)成員變量,包括圖像的出現(xiàn)在屏幕 的初始位置,長度,以及蛇的行走方向。

7、食物類的定義包括出現(xiàn)的初始位置,以 及食物是否被吃掉的判斷。2 用數(shù)組初始化長度為3的貪吃蛇,并且默認(rèn)食物未出現(xiàn)3 在CView類上運(yùn)用MFC提供的 Windows消息中 WM_TIME消息,運(yùn)用OnTimer()函數(shù)讓系統(tǒng)提供一個(gè)時(shí)鐘節(jié)拍,更新游戲4 具體游戲?qū)崿F(xiàn),包括蛇撞到自己和圍墻都將使游戲結(jié)束,判斷吃豆等,其 中還包括根據(jù)蛇的長度來進(jìn)行游戲難度的改變。5 具體鍵盤游戲操作運(yùn)用到Windows消息響應(yīng)中的WM_KEYDQWNOn KeyDow n(來響應(yīng)玩家的實(shí)際操作第三章軟件實(shí)現(xiàn)3.1變量函數(shù)及資源的聲明根據(jù)程序的結(jié)構(gòu),將貪吃蛇需要實(shí)現(xiàn)的功能細(xì)化成為相應(yīng)的函數(shù)。函數(shù)聲明void CYu

8、ShuoView: On Draw(CDC* pDC)/在OnDraw函數(shù)中繪制游戲背景、游戲文字以及控制蛇的樣式顏色。IMPLEMENT_DYNCREATE(CSANKEView, CView)BEGIN_MESSAGE_MAP(CSANKEView, CView)AFX_MSG_MAP(CSANKEView)ON_WM_KEYDOWN()ON_WM_RBUTTONDOWN()ON_WM_TIMER()ON_WM_CANCELMODE()ON_COMMAND(ID_START, On Start)ON_COMMAND(ID_PAUSE, On Pause)ON_COMMAND(ID_CONT

9、INUE, OnContin ue)ON_COMMAND(ID_EXIT, On Exit)AFX_MSG_MAP/ Stan dard prin ti ng comma ndsON_COMMAND(ID_FILE_PRINT, CView:O nFilePri nt)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:O nFilePri nt)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:O nFilePri ntPreview)END_MESSAGE_MAP()變量聲明定義點(diǎn)數(shù)組作為蛇的身體CArray<CPoi nt,C

10、Poi nt> m_ysBody;/資源1、對(duì)話框2、位圖IDB_YS_BITMAP/游戲背景圖3、菜單/工具欄4、頭文件mmsystem.h/播放音樂的相應(yīng)文件#i nclude "stdafx.h"#i nclude "SANKE.h"#i nclude "SANKEDoc.h"#i nclude "SANKEView.h"#ifdef _DEBUG#define new DEBUG_NEW#un def THIS_FILEstatic char THIS_FILE = _FILE_;#en dif3.2

11、主要功能的實(shí)現(xiàn)游戲界面貪吃蛇游戲的游戲界面包括背景圖片、蛇身體的繪制、蛇移動(dòng)范圍的繪制等等。其中貪吃蛇的身體用什么方法繪制,才可以使得其在游戲過程中可以實(shí)現(xiàn)“吃”的功能是很重要的。因此在游戲界面的初始繪制時(shí)就必須考慮到游戲時(shí)可能遇到的問題。初始化食物隨機(jī)出現(xiàn)應(yīng)采用rand()函數(shù)來實(shí)現(xiàn),而食物與蛇頭無偏差相接則利用坐標(biāo)來解決。開始游戲On Timer(UINT nIDEve nt)函開始游戲后的重點(diǎn)是如何用鍵盤來控制蛇的移動(dòng)并傳遞到 數(shù)中去以及判斷蛇是否死亡324游戲設(shè)置這里的游戲設(shè)置主要是指游戲音效音樂的播放控制。同時(shí),我們也為這款游戲定制了一份游戲規(guī)則游戲規(guī)則如下:點(diǎn)擊游戲-> 開始

12、菜單游戲開始;通過方向鍵控制蛇的運(yùn)動(dòng)方向,吃掉隨機(jī)出現(xiàn)的豆子,若不小心碰到墻 壁或者與自身相交,則該輪游戲結(jié)束;點(diǎn)擊 游戲-> 暫停按鈕,暫停游戲;點(diǎn)擊游戲-> 游戲繼續(xù),繼續(xù)游戲; 點(diǎn)擊游戲-> 結(jié)束菜單退出游戲;單擊幫助-> 查看游戲幫助。第四章解釋4.1個(gè)人所分任務(wù)詳解我在這次實(shí)驗(yàn)中的工作:貪吃蛇游戲功能設(shè)計(jì)。對(duì)on time ()添加代碼,包括按鍵設(shè)計(jì)、撞界判斷、蛇身相撞判斷、行走方向判斷、判斷吃豆的條件(撞到就吃)、 如果食物被吃了就生成。1. 這段代碼是給鍵盤上的A、S、D W以及方向鍵賦予蛇行進(jìn)方向的命令,控制蛇的走向(“ 12345678”本別代表&qu

13、ot;上下左右”x+,y+進(jìn)行移動(dòng),然后用選定畫刷畫出一個(gè)新節(jié)點(diǎn)的矩形作為頭結(jié)點(diǎn) ):void CSANKEView:O nKeyDow n( UINT nChar, UINT nRepC nt, UINT n Flags)/ TODO: Add your message han dler code here an d/or call default switch( nChar)case VK_UP:if(Snake0.direct!=2)Snake0.direct=1;break;case VK_DOWN:if(Snake0.direct!=1)Snake0.direct=2;break;c

14、ase VK_LEFT:if(S nake0.direct!=4)S nake0.direct=3;break;case VK_RIGHT:if(S nake0.direct!=3)S nake0.direct=4;break;case W:if(S nake0.direct!=6)S nake0.direct=5;break;case 'S':if(S nake0.direct!=5)S nake0.direct=6;break;case 'A':if(S nake0.direct!=8)S nake0.direct=7;break;case 'D&#

15、39;:if(S nake0.direct!=7)S nake0.direct=8;break;CView:O nKeyDow n(n Char, nRepC nt, nFlags);CView:O nKeyDow n(n Char, nRepC nt, nFlags);2. 這段代碼是給蛇制定一個(gè)速度變化,當(dāng)蛇“吃”到一定長度時(shí),速度會(huì)加快void CSANKEView:O nTimer(UINT nIDEve nt)/ TODO: Add your message han dler code here an d/or call default CDC *pDC=GetDC();CStri

16、ng soure;if(Sn ake0.le n=1)SetTimer(1,390,NULL);if(Sn ake0.le n=2)SetTimer(1,370,NULL);if(Sn ake0.le n=3)SetTimer(1,320,NULL);if(Sn ake0.le n=8)SetTimer(1,200,NULL);if(Sn ake0.le n=12)SetTimer(1,100,NULL);/soure.Format(”得分:%d 分!",(S nake0.le n-1)*10);soure.Format(” 得分:%d 分!",(S nake0.le n-

17、3)*10);3. 這段代碼是對(duì)蛇“撞界”的判斷,給蛇規(guī)定一個(gè)行動(dòng)的區(qū)域;還有規(guī)定了蛇 不能撞到自己的“身體”,否則游戲結(jié)束并顯示得分:if(Sn ake0.x*20<=37|S nake0.y*20<=37|S nake0.x*20>=580|S nake0 .y*20>=580) / 撞界判斷KillTimer(1);AfxMessageBox(soure);/ s=0;/蛇身相撞判斷if(Sn ake0.le n>3)for(i nt sn=Sn ake0.le n-1;s n> 0;s n-)if(Sn ake0.x*20=S nakes n.x*2

18、0&&Sn ake0.y*20=S nakes n .y*20)KillTimer(l);AfxMessageBox(soure);/ s=0;/*由于判斷蛇自己是否咬到了自己,根據(jù)蛇長sn,進(jìn)行sn次for sn-1次循環(huán)并且和Snake0.x進(jìn)行比較(之所以進(jìn)行sn-1次那肯定是不包括蛇頭而且蛇的 長度也必須大于3才會(huì)發(fā)生自己咬自己的情況)KillTimer(1);是停止計(jì)時(shí)器;和之前的 SetTime()對(duì)應(yīng)而已AfxMessageBox(soure)就是輸出一個(gè)原樣輸出內(nèi)容*/相關(guān)運(yùn)行圖如下:自己咬到自己,游戲結(jié)束頭撞墻,游戲結(jié)束pDC->SelectStockO

19、bject(WHITE_PEN);pDC->Recta ngle(S nakeS nakeO.le n-1.x*20,S nakeS nakeO.le n-1.y*20, (Sn akeS nake0.le n-1.x+1)*20,(S nakeS nake0.le n-1.y+1)*20);for(int i=Snake0.len-1;i>0;i-)Sn akei.x=S nakei-1.x;Sn akei.y=S nakei-1.y;進(jìn)行次數(shù)為"長度-1"次的循環(huán),這里是不包括蛇頭的進(jìn)行的平移,用數(shù)組賦值的 方法,把前一節(jié)點(diǎn)保存在后一個(gè)結(jié)點(diǎn),然后頭結(jié)點(diǎn)向前移

20、動(dòng)。4. 這段代碼是給蛇走向的判斷,令蛇可以前后左右和斜著走:/行走方向判斷if(Sn ake0.direct=1)Sn ake0.y-;if(Sn ake0.direct=2)Sn ake0.y+;if(Sn ake0.direct=3)Sn ake0.x-;if(Sn ake0.direct=4)Sn ake0.x+;if(Sn ake0.direct=5) Sn ake0.y-;Sn ake0.x+;if(Sn ake0.direct=6) Sn ake0.y+;Sn ake0.x-;if(Sn ake0.direct=7) Sn ake0.x-;Sn ake0.y-;if(Sn ake

21、0.direct=8) Sn ake0.x+;Sn ake0.y+;pDC->SelectStockObject(BLACK_PEN);相關(guān)運(yùn)行圖如下:zcr 口ZE向右向左J向下向上_k 口右斜向上或左斜向下走左斜向上或右斜向下走第五章結(jié)果與討論5.1程序運(yùn)行程序開始運(yùn)行后會(huì)進(jìn)入游戲界面,但是不會(huì)立即進(jìn)行游戲,單擊菜單的“開始”才會(huì)開始游戲。在游戲過程中,按下Space鍵就會(huì)暫停游戲,再按下Z鍵則會(huì)繼續(xù)游戲。部分函數(shù)與代碼在程序中定義一個(gè)蛇的類,結(jié)構(gòu)如下:struct Sn akeint x,y;int len;int direct;Sn ake50;struct Foodint兀int y;int isfood;Food;在數(shù)據(jù)結(jié)構(gòu)上,用數(shù)組存儲(chǔ)蛇以及蛇的運(yùn)動(dòng)區(qū)域。在數(shù)組中,每個(gè)元素有四 個(gè)云感動(dòng)方向,分別為 RIGHT,LEFT,UP,DOW在

溫馨提示

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

評(píng)論

0/150

提交評(píng)論