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

下載本文檔

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

文檔簡(jiǎn)介

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ù)1、 設(shè)計(jì)的主要技術(shù)參數(shù) 貪吃蛇游戲?qū)崿F(xiàn)的功能有:控制蛇前后左右移動(dòng)、控制蛇斜走、暫停游戲、繼續(xù)游戲、背景音樂的播放、記錄成績(jī)2、 設(shè)計(jì)任務(wù)游戲操作界面的生成;插入游戲界面圖片;蛇的移動(dòng)控制、播放音樂、暫停/停止暫停、結(jié)束游戲、游戲記錄的生成;程序的調(diào)試與修改3、 設(shè)計(jì)工作量一周進(jìn)度安排起止日期工作內(nèi)容6月24號(hào)游戲操作界面的

2、生成、背景圖片的插入6月25號(hào)-26號(hào)蛇的移動(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+簡(jiǎn)明教程M.北京:電子工業(yè)出版社,2007.3丁展,四維科技.Visual C+游戲開發(fā)技術(shù)與實(shí)例M北京:人民郵電出版社,20054姚領(lǐng)田精通MFC程序設(shè)計(jì)M北京:人民郵電出版社.2000.指導(dǎo)教師(簽字): 年 月 日系(教研室)主任(簽字): 年 月 日面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)設(shè)計(jì)說(shuō)明書基于windows界面應(yīng)用程序貪吃蛇

3、起止日期: 2013 年 6 月 24 日 至 2013 年 6 月 28 日學(xué)生姓名汪驍將班級(jí)軟件工程1201學(xué)號(hào)成績(jī)指導(dǎo)教師(簽字)計(jì)算機(jī)與通信學(xué)院2013 年 6 月 28 日目 錄第一章 引言1.1關(guān)于題目31.1.1題目要求31.1.2選題背景31.2關(guān)于編譯軟件31.3關(guān)于兼容性3第二章 概要設(shè)計(jì)2.1軟件主要功能設(shè)計(jì)42.1.1程序結(jié)構(gòu)42.1.2程序流程4第三章 軟件實(shí)現(xiàn)3.1變量函數(shù)及資源的聲明63.1.1函數(shù)聲明63.1.2變量聲明63.1.3資源73.2主要功能的實(shí)現(xiàn)73.2.1游戲界面73.2.2初始化食物73.2.3開始游戲73.2.4游戲設(shè)置第四章 解釋4.1個(gè)人所

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

5、人團(tuán)隊(duì)的合作,我們有信心,在這次學(xué)習(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é)果。

6、第二章 概要設(shè)計(jì)2.1軟件主要功能設(shè)計(jì)程序結(jié)構(gòu)根據(jù)分析,貪吃蛇這個(gè)程序一共要實(shí)現(xiàn)如下幾個(gè)功能,包括游戲方面開始游戲、暫停游戲以及停止游戲,音樂音效的添加與控制,游戲幫助提示等等。具體的程序結(jié)構(gòu)如下面的圖所示:開始游戲暫停游戲退出游戲繼續(xù)游戲游戲游戲控制模塊游戲幫助程序流程根據(jù)分析后的貪吃蛇結(jié)構(gòu)設(shè)計(jì)出相應(yīng)的貪吃蛇流程。貪吃蛇的內(nèi)容主要包括: 游戲開始,隨機(jī)出現(xiàn)食物;按下暫停按鈕或Space鍵可以實(shí)現(xiàn)暫停功能,按下Z鍵游戲繼續(xù)開始;按下幫助鍵可獲得游戲幫助說(shuō)明;可播放背景音樂等等。下圖衛(wèi)程序流程圖:如果蛇的頭部與food重合將food添加到蛇身中并產(chǎn)生新的food出界與自身相交移動(dòng)一格YNNNre

7、turn false更新運(yùn)動(dòng)方向Return true本次貪吃蛇基本流程與大體思想1  定義蛇類和食物類,初始化貪吃蛇各項(xiàng)成員變量,包括圖像的出現(xiàn)在屏幕的初始位置,長(zhǎng)度,以及蛇的行走方向。食物類的定義包括出現(xiàn)的初始位置,以及食物是否被吃掉的判斷。2  用數(shù)組初始化長(zhǎng)度為3的貪吃蛇,并且默認(rèn)食物未出現(xiàn)3  在CView類上運(yùn)用MFC提供的Windows消息中WM_TIMER消息,運(yùn)用OnTimer()函數(shù)讓系統(tǒng)提供一個(gè)時(shí)鐘節(jié)拍,更新游戲4  具體游戲?qū)崿F(xiàn),包括蛇撞到自己和圍墻都將使游戲結(jié)束,判斷吃豆等,其中還包括根據(jù)

8、蛇的長(zhǎng)度來(lái)進(jìn)行游戲難度的改變。5  具體鍵盤游戲操作運(yùn)用到Windows消息響應(yīng)中的WM_KEYDOWN,用OnKeyDown()來(lái)響應(yīng)玩家的實(shí)際操作第三章 軟件實(shí)現(xiàn)3.1變量函數(shù)及資源的聲明根據(jù)程序的結(jié)構(gòu),將貪吃蛇需要實(shí)現(xiàn)的功能細(xì)化成為相應(yīng)的函數(shù)。函數(shù)聲明void CYuShuoView:OnDraw(CDC* pDC) /在OnDraw函數(shù)中繪制游戲背景、游戲文字以及控制蛇的樣式顏色。IMPLEMENT_DYNCREATE(CSANKEView, CView)BEGIN_MESSAGE_MAP(CSANKEView, CView)/AFX_MSG_MAP(CSANKEV

9、iew)ON_WM_KEYDOWN()ON_WM_RBUTTONDOWN()ON_WM_TIMER()ON_WM_CANCELMODE()ON_COMMAND(ID_START, OnStart)ON_COMMAND(ID_PAUSE, OnPause)ON_COMMAND(ID_CONTINUE, OnContinue)ON_COMMAND(ID_EXIT, OnExit)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DI

10、RECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()變量聲明CArray<CPoint,CPoint> m_ysBody; /定義點(diǎn)數(shù)組作為蛇的身體CPoint m_ysFood; /食物出現(xiàn)的點(diǎn)資源1、對(duì)話框2、位圖IDB_YS_BITMAP /游戲背景圖3、菜單/工具欄4、 頭文件mmsystem.h /播放音樂的相應(yīng)文件#include "stdafx.h"#include "SANKE.h"

11、;#include "SANKEDoc.h"#include "SANKEView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif 3.2主要功能的實(shí)現(xiàn)游戲界面貪吃蛇游戲的游戲界面包括背景圖片、蛇身體的繪制、蛇移動(dòng)范圍的繪制等等。其中貪吃蛇的身體用什么方法繪制,才可以使得其在游戲過程中可以實(shí)現(xiàn)“吃”的功能是很重要的。因此在游戲界面的初始繪制時(shí)就必須考慮到游戲時(shí)可能遇到的問題。初始化食物隨機(jī)出現(xiàn)應(yīng)采用rand()函數(shù)來(lái)實(shí)現(xiàn),而

12、食物與蛇頭無(wú)偏差相接則利用坐標(biāo)來(lái)解決。開始游戲開始游戲后的重點(diǎn)是如何用鍵盤來(lái)控制蛇的移動(dòng)并傳遞到OnTimer(UINT nIDEvent)函數(shù)中去以及判斷蛇是否死亡游戲設(shè)置這里的游戲設(shè)置主要是指游戲音效音樂的播放控制。同時(shí),我們也為這款游戲定制了一份游戲規(guī)則 游戲規(guī)則如下:l 點(diǎn)擊游戲->開始菜單游戲開始;l 通過方向鍵控制蛇的運(yùn)動(dòng)方向,吃掉隨機(jī)出現(xiàn)的豆子,若不小心碰到墻壁或者與自身相交,則該輪游戲結(jié)束;l 點(diǎn)擊 游戲->暫停按鈕,暫停游戲;點(diǎn)擊游戲->游戲繼續(xù),繼續(xù)游戲;l 點(diǎn)擊游戲->結(jié)束菜單退出游戲;l 單擊幫助->查看游戲幫助。第四章 解釋4.1個(gè)人所分

13、任務(wù)詳解我在這次實(shí)驗(yàn)中的工作:貪吃蛇游戲功能設(shè)計(jì)。對(duì)ontime()添加代碼,包括按鍵設(shè)計(jì)、撞界判斷、蛇身相撞判斷、行走方向判斷、判斷吃豆的條件(撞到就吃)、如果食物被吃了就生成。1.這段代碼是給鍵盤上的A、S、D、W以及方向鍵賦予蛇行進(jìn)方向的命令,控制蛇的走向(“12345678”本別代表“上下左右” x+,y+進(jìn)行移動(dòng),然后用選定畫刷畫出一個(gè)新節(jié)點(diǎn)的矩形作為頭結(jié)點(diǎn)):void CSANKEView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/o

14、r call defaultswitch(nChar)case VK_UP:if(Snake0.direct!=2)Snake0.direct=1;break; case VK_DOWN:if(Snake0.direct!=1)Snake0.direct=2;break;case VK_LEFT:if(Snake0.direct!=4)Snake0.direct=3;break; case VK_RIGHT:if(Snake0.direct!=3)Snake0.direct=4;break;case 'W':if(Snake0.direct!=6)Snake0.direct=5

15、;break; case 'S':if(Snake0.direct!=5)Snake0.direct=6;break; case 'A':if(Snake0.direct!=8)Snake0.direct=7;break; case 'D':if(Snake0.direct!=7)Snake0.direct=8;break;CView:OnKeyDown(nChar, nRepCnt, nFlags);CView:OnKeyDown(nChar, nRepCnt, nFlags);2.這段代碼是給蛇制定一個(gè)速度變化,當(dāng)蛇“吃”到一定長(zhǎng)度時(shí),速度會(huì)

16、加快void CSANKEView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC(); CString soure; if(Snake0.len=1)SetTimer(1,390,NULL); if(Snake0.len=2)SetTimer(1,370,NULL); if(Snake0.len=3)SetTimer(1,320,NULL); if(Snake0.len=8)SetTimer(1,200,NULL); if(Snake0.le

17、n=12)SetTimer(1,100,NULL); /soure.Format("得分:%d分!",(Snake0.len-1)*10); soure.Format("得分:%d分!",(Snake0.len-3)*10); 3.這段代碼是對(duì)蛇“撞界”的判斷,給蛇規(guī)定一個(gè)行動(dòng)的區(qū)域;還有規(guī)定了蛇不能撞到自己的“身體”,否則游戲結(jié)束并顯示得分:if(Snake0.x*20<=37|Snake0.y*20<=37|Snake0.x*20>=580|Snake0.y*20>=580) /撞界判斷 KillTimer(1); AfxMe

18、ssageBox(soure); / s=0; /蛇身相撞判斷 if(Snake0.len>3) for(int sn=Snake0.len-1;sn>0;sn-) if(Snake0.x*20=Snakesn.x*20&&Snake0.y*20=Snakesn.y*20) KillTimer(1); AfxMessageBox(soure); / s=0; /*由于判斷蛇自己是否咬到了自己,根據(jù)蛇長(zhǎng)sn,進(jìn)行sn次for sn-1次循環(huán)并且和Snake0.x進(jìn)行比較(之所以進(jìn)行sn-1次那肯定是不包括蛇頭而且蛇的長(zhǎng)度也必須大于3才會(huì)發(fā)生自己咬自己的情況)KillT

19、imer(1);是停止計(jì)時(shí)器;和之前的SetTime()對(duì)應(yīng)而已AfxMessageBox(soure)就是輸出一個(gè)原樣輸出內(nèi)容*/相關(guān)運(yùn)行圖如下:自己咬到自己,游戲結(jié)束。頭撞墻,游戲結(jié)束。 pDC->SelectStockObject(WHITE_PEN); pDC->Rectangle(SnakeSnake0.len-1.x*20,SnakeSnake0.len-1.y*20,(SnakeSnake0.len-1.x+1)*20,(SnakeSnake0.len-1.y+1)*20); for(int i=Snake0.len-1;i>0;i-) Snakei.x=Sna

20、kei-1.x; Snakei.y=Snakei-1.y; 進(jìn)行次數(shù)為"長(zhǎng)度-1"次的循環(huán),這里是不包括蛇頭的進(jìn)行的平移,用數(shù)組賦值的方法,把前一節(jié)點(diǎn)保存在后一個(gè)結(jié)點(diǎn),然后頭結(jié)點(diǎn)向前移動(dòng)。4.這段代碼是給蛇走向的判斷,令蛇可以前后左右和斜著走: /行走方向判斷 if(Snake0.direct=1) Snake0.y-; if(Snake0.direct=2) Snake0.y+; if(Snake0.direct=3) Snake0.x-; if(Snake0.direct=4) Snake0.x+; if(Snake0.direct=5) Snake0.y-; Snak

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論