貪吃蛇c++實(shí)驗(yàn)報(bào)告_第1頁(yè)
貪吃蛇c++實(shí)驗(yàn)報(bào)告_第2頁(yè)
貪吃蛇c++實(shí)驗(yàn)報(bào)告_第3頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、三、試驗(yàn)步驟1、編程環(huán)境的選擇本程序承受Microsoft Visual C+6.0 的英文版本進(jìn)展編譯。VisualC+6.0Microsoft 公司推出的基于Windows 操作系統(tǒng)的可視化C+ Microsoft 公司推出了.NET 平臺(tái)的集成開(kāi)發(fā)環(huán)境,但由于其良好的界面和可操作性,加上支持標(biāo)準(zhǔn) C/C+標(biāo)準(zhǔn),但仍有相當(dāng)多的編程人員使用VisualC+6.02軟件主要功能設(shè)計(jì)程序構(gòu)造的設(shè)計(jì)依據(jù)分析,貪吃蛇這個(gè)程序一共要實(shí)現(xiàn)如下幾個(gè)功能,包括玩耍方面開(kāi)頭玩耍、暫停玩耍以及 停頓玩耍,音樂(lè)音效的添加與把握,玩耍幫助提示與英雄榜的顯示等等。具體的程序構(gòu)造如下面的2-1 所示。2-1 貪吃蛇構(gòu)造

2、圖程序流程依據(jù)分析后的貪吃蛇構(gòu)造設(shè)計(jì)出相應(yīng)的貪吃蛇流程。貪吃蛇的內(nèi)容主要包括: 玩耍開(kāi)頭,隨機(jī)ToolBar 中的暫停按鈕或Space 鍵可以實(shí)現(xiàn)暫停功能ToolBar 鍵可獲得玩耍幫助說(shuō)明;可播放背景音樂(lè)和音效并可通過(guò)菜單以及ToolBar 把握其播放或停頓等等。2-2 貪吃蛇流程圖、軟件實(shí)現(xiàn)變量函數(shù)及資源的聲明依據(jù)程序的構(gòu)造,將貪吃蛇需要實(shí)現(xiàn)的功能細(xì)化成為相應(yīng)的函數(shù)。函數(shù)聲明void CYuShuoView:OnDraw(CDC* pDC)/OnDraw 函數(shù)中繪制玩耍背景、玩耍文字以及把握蛇的樣式顏色。void CYuShuoView:YsInitFood/初始化貪吃蛇的食物,使其隨機(jī)生

3、成void CYuShuoView:YsInitGame/初始化貪吃蛇玩耍參數(shù)void CYuShuoView:YsReDisplay(CPoint ysPoint)/重繪玩耍窗口void CYuShuoView:OnYsBegin/開(kāi)頭玩耍菜單響應(yīng)消息void CYuShuoView:OnYsPause/暫停玩耍菜單響應(yīng)消息void CYuShuoView:OnYsStop void CYuShuoView:OnYsExit void CYuShuoView:OnYsEffectvoid CYuShuoView:OnYsMusicbkgvoid CYuShuoView:OnYsLevel1

4、void CYuShuoView:OnYsLevel2 void CYuShuoView:OnYsLevel3 void CYuShuoView:OnYsHelpgamevoid CYuShuoView:OnYsBest變量聲明CArray m_ysBody;CPoint m_ysFood;int m_ysTime; int m_ysTime1;int m_ysDirect;int m_ysScore;int m_yspausectrl; int m_yslevelctrl; CString m_ysPlayer;int m_yseffectctrl; int m_ysmusicctrl;資源

5、1、對(duì)話(huà)框IDD_YS_HELPGAMEIDD_YS_BEST IDD_YS_RETRY IDD_ABOUTBOX/停頓玩耍菜單響應(yīng)消息/退出玩耍菜單響應(yīng)消息/把握玩耍音效/把握玩耍背景音樂(lè)/把握玩耍等級(jí)為初級(jí)/把握玩耍等級(jí)為中級(jí)/把握玩耍等級(jí)為高級(jí)/玩耍幫助/英雄榜的顯示/定義點(diǎn)數(shù)組作為蛇的身體/食物消滅的點(diǎn)/顯示時(shí)間/10 1 秒/方向把握變量/玩家成績(jī)變量/暫停把握變量/等級(jí)把握變量/玩家姓名/音效把握變量/背景音樂(lè)把握變量/玩耍幫助說(shuō)明/英雄榜/停頓玩耍確認(rèn)/關(guān)于玩耍版本2、音樂(lè)IDR_YS_BKGMUSIC/玩耍背景音樂(lè)IDR_YS_EAT/貪吃蛇吃到食物的音樂(lè)IDR_YS_LOWS

6、CORE/玩耍完畢后得低分音樂(lè)IDR_YS_HIGHSCORE/玩耍完畢后得高分音樂(lè)3、位圖IDB_YS_BITMAP/玩耍背景圖4、菜單/工具欄IDR_MAINFRAME/系統(tǒng)自帶菜單IDR_YS_TOOLBAR/自己創(chuàng)立的工具條5、頭文件mmsystem.h/播放音樂(lè)的相應(yīng)文件fstream.h/文件流文件主要功能的實(shí)現(xiàn)玩耍界面貪吃蛇玩耍的玩耍界面包括背景圖片、蛇身體的繪制、蛇移動(dòng)范圍的繪制等等。其中貪吃蛇的 身體用什么方法繪制,才可以使得其在玩耍過(guò)程中可以實(shí)現(xiàn)“吃”的功能是很重要的。因此在玩耍界面的初始繪制時(shí)就必需考慮到玩耍時(shí)可能遇到的問(wèn)題。本程序承受點(diǎn)數(shù)組CArray m_ysBody

7、 來(lái)存儲(chǔ)貪吃蛇,點(diǎn)數(shù)組的功能很強(qiáng)大,可以添加點(diǎn),同時(shí)可以獲得蛇的長(zhǎng)度,對(duì)于而后進(jìn)展玩耍中把握蛇的顏色以及音效的播放等都有很大的幫助。初始化食物確定用點(diǎn)數(shù)組存儲(chǔ)貪吃蛇以后,貪吃蛇的食物如何到達(dá)隨機(jī)消滅,并且能夠依據(jù)網(wǎng)格式與蛇頭 rand則利用坐標(biāo)來(lái)解決。設(shè)置兩個(gè)整型變量 m_ysX,m_ysY 作為食物消滅的點(diǎn)的坐標(biāo),令 m_ysX= rand%30, ,m_ysY= rand%40 即可。使隨機(jī)消滅的點(diǎn)能夠整除最小網(wǎng)格,也就是使食物與蛇頭無(wú)偏差相接。再由食物坐標(biāo)m_ysX,m_ysY與蛇頭坐標(biāo)是否一樣推斷蛇是否“吃”到了食物,設(shè)置推斷標(biāo) 簽 ysTag,假設(shè)吃到了,ysTag 為 1,則再消滅

8、下一個(gè)食物,反之,假設(shè)沒(méi)吃到,則不消滅食物直到1 為止。最終,再將m_ysX,m_ysY賦給m_ysFood 作為食物坐標(biāo),以便在其他函數(shù)中調(diào)用。蛇的身體是與消滅的食物在一條直線(xiàn)上的,完全可以到達(dá)相接的目的。開(kāi)頭玩耍開(kāi)頭玩耍后的重點(diǎn)是如何用鍵盤(pán)來(lái)把握蛇的移動(dòng)并傳遞到OnTimer(UINT nIDEvent)函數(shù)中去以及推斷蛇是否死亡。首先說(shuō)明鍵盤(pán)與蛇的響應(yīng),設(shè)置一個(gè)方向把握變量 m_ysDirect,再添加OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)按鍵,m_ysDirect 會(huì)相應(yīng)的轉(zhuǎn)變,再利用switch 語(yǔ)句在OnTimer(UINT

9、 nIDEvent)函數(shù)中對(duì)坐標(biāo)進(jìn)展相應(yīng)轉(zhuǎn)變即可。其次來(lái)解釋一下如何推斷蛇的死亡,由于蛇的身體是由點(diǎn)坐標(biāo)數(shù)組構(gòu)成的,因此推斷蛇是否死 亡其本質(zhì)就是推斷蛇頭的坐標(biāo)是否與玩耍邊框一樣或者蛇頭坐標(biāo)是否與蛇自己的身體一樣。該過(guò)程也在OnTimer(UINT nIDEvent)函數(shù)中寫(xiě)入即可,設(shè)置一個(gè)推斷死亡變量ysTag1,當(dāng)按下向下鍵時(shí),蛇縱坐標(biāo)不斷自加,此處僅以向下為例,具體程序如下:switch(m_ysDirect)/依據(jù)鍵盤(pán)按下鍵來(lái)選擇蛇移動(dòng)的方向case 1:/方向變量向下ysPoint2.y+;/點(diǎn)縱坐標(biāo)自加if(ysPoint2.y=40)/假設(shè)縱坐標(biāo)多于最下端邊框ysTag1=1;/

10、1,推斷死亡break;假設(shè) ysTag1 為 1,則說(shuō)明蛇已經(jīng)死亡,應(yīng)當(dāng)彈出對(duì)話(huà)框提示死亡,輸出得分,同時(shí)還可以依據(jù)玩家的得分?jǐn)?shù)相應(yīng)的轉(zhuǎn)變對(duì)話(huà)框中的話(huà)語(yǔ)XP 系統(tǒng)下。我們看到圖 3-4 的蛇身體的顏色發(fā)生了變化,不再是初始狀態(tài)的綠色,而是變?yōu)榱怂{(lán)色,這是在 OnDraw(CDC* pDC)函數(shù)中設(shè)置的,設(shè)置變量獵取蛇身長(zhǎng)度,隨著長(zhǎng)度的增加,蛇的顏色發(fā)生相應(yīng)轉(zhuǎn)變,最終會(huì)變?yōu)楸硎疚<钡募t色。并且伴隨著貪吃蛇掛掉,播放不同的音樂(lè),假設(shè)高于 70 分,則放帶有掌聲鼓舞的高分音樂(lè)的IDR_YS_HIGHSCORE,反之,則播放蛇被撞死的電子音樂(lè)IDR_YS_LOWSCORE。播放音樂(lè)的函數(shù)用包含在頭文

11、件mmsystem.h 中的PlaySound 計(jì)分以及暫停等功能m_ysTime 和m_ysScore pDC-TextOut 就可以了,實(shí)現(xiàn)暫停功能即KillTimer(1)m_yspausectrl0 即可。英雄榜很多玩耍都有英雄榜這一個(gè)功能。貪吃蛇這個(gè)玩耍也不例外,為了下一次開(kāi)頭玩耍的玩家也能夠看到別人的成績(jī),所以承受文件來(lái)存儲(chǔ)玩耍記錄。首先參加頭文件fstream.h 包含文件寫(xiě)入讀出函數(shù)ifstreamofstream將對(duì)話(huà)框中EditBox的變量設(shè)置成為對(duì)應(yīng)類(lèi)型。例如:CYsBestRecord dlg; dlg.m_ysbestscore1=m_1bestscore;上面所寫(xiě)的

12、就是變量的傳遞,傳遞完畢后,對(duì)話(huà)框控件中就有了初值,可以正常顯示分?jǐn)?shù)。而 后進(jìn)展玩耍相應(yīng)等級(jí)的玩家成績(jī)推斷,假設(shè)玩家成績(jī)與英雄榜成績(jī)一樣,則依據(jù)時(shí)間來(lái)推斷,假設(shè)玩耍時(shí)間短,則進(jìn)入英雄榜。推斷條件如下: (m_ysScorem_1bestscore|m_ysScore=m_1bestscore&m_ysTimem_1besttime)&m_yslevelctrl=1英雄榜”查看。玩耍設(shè)置這里的玩耍設(shè)置主要是指玩耍的等級(jí)以及音效音樂(lè)的播放把握。前面在變量聲明中已經(jīng)看到, 關(guān)于這三個(gè)量,我們已經(jīng)予以了定義,只需要在按下相應(yīng)鍵盤(pán)或鼠標(biāo)消息的時(shí)候,將變量值進(jìn)展改 變,再利用這些值把握相應(yīng)功能的運(yùn)行。以玩

13、耍音效為例,在按下菜單中的“玩耍設(shè)置音樂(lè)關(guān)”后即菜單消息void CYuShuoView:OnYsEffect,代碼如下:switch(m_yseffectctrl)/依據(jù)音效把握變量選擇case 1:/音效選擇開(kāi)m_yseffectctrl=0;/0break;case 0:/音效選擇關(guān)m_yseffectctrl=1;/1break;其中在構(gòu)造函數(shù)CYuShuoView:CYuShuoView()4、試驗(yàn)代碼#include #include #include #include #include /使用當(dāng)前時(shí)間做種子;enum dirup,down,left,right; /enum di

14、r;/圍墻;class Fencepublic:已經(jīng)將m_yseffectctrl 1。void InitFence;void OutputF; public:char game2020;f; /定義對(duì)象;/畫(huà)框框;void Fence:InitFence for(int i=0; i20; i+) for(int j=0; j20; j+) if(i=0|i=19|j=0|j=19) gameij= ”*”;else gameij= ” ”;/顯示框框;void Fence:OutputFfor(int i=0; i20; i+) for(int j=0; j20; j+) coutgame

15、ij” ”; coutx =x; q-y =y;q-next =head;q-prior =NULL; if(head) head-prior =q;head =q;if(!tail) tail =head;f.gamexy= ”*”; /f對(duì)象可以在定義Fence 類(lèi)時(shí)定義; Fence SnakeNode 類(lèi)前定義;int SnakeNode:get_xreturn x;int SnakeNode:get_yreturn y;/刪除尾結(jié)點(diǎn);void SnakeNode:delete_tailSnakeNode *p =tail;f.gametail-get_xtail-get_y= ” ”

16、;/把尾結(jié)點(diǎn)的坐標(biāo)表示的”*”置為空格;if(tail=head)tail= head= NULL;elsetail= tail-prior; tail-next= NULL;delete p;/move 移動(dòng);class move public:dir point; /枚舉變量point: 把握方向;int food_x;int food_y;public:void moving;void change_point(char); /轉(zhuǎn)變方向;void get_food;void move:movingint a,b;a= head-get_x; /取得頭結(jié)點(diǎn)橫坐標(biāo)b= head-get_y;

17、 /頭結(jié)點(diǎn)縱坐標(biāo)switch(point)case up: -a; break; case down: +a; break;case left: -b; break; case right: +b; break;if(a=19|b=19|a=0|b=0|gameab=”*”)/推斷是否撞墻; cout“game over!“add_head(a,b);get_food;elsehead-add_head(a,b); /插入頭結(jié)點(diǎn);head-delete_tail; /刪除尾結(jié)點(diǎn);void move:change_point(char keydown)switch(keydown)case ”w

18、”: point= up; break; case ”s”: point= down; break;case ”a”: point= left; break; case ”d”: point= right; break;void move:get_foodsrand(unsigned int) time(NULL); /做種子(程序運(yùn)行時(shí)間);food_x= rand%18+1;food_y= rand%18+1; f.gamefood_xfood_y= ”*”;/main; int maincoutadd_head(4,3);head-add_head(4,4);head-add_head(4,5);m.get_food;f.OutputF; while (true)char keydown= getch; /getch返回鍵盤(pán)上讀取的字符;包含頭文件m.chan四、試驗(yàn)結(jié)果程序開(kāi)頭運(yùn)行后會(huì)進(jìn)入玩耍界面,但是不會(huì)馬上進(jìn)展玩耍,單擊菜單的“開(kāi)頭”才會(huì)開(kāi)頭玩耍。在玩耍開(kāi)頭前,玩家可以依據(jù)自己的喜好,通過(guò)菜單或者工具欄設(shè)置玩耍等級(jí)等。在玩耍過(guò)程中,按下Space 鍵就會(huì)暫停玩耍,再按下Space 鍵則會(huì)連續(xù)玩耍。開(kāi)頭玩耍了,小蛇越來(lái)越長(zhǎng),顏色也有所不同了。顏色的轉(zhuǎn)變預(yù)示著玩耍的難度加大了,并且, 不同的最終得分會(huì)產(chǎn)生不同的死亡評(píng)語(yǔ)。在前面的圖 3-

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論