版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Windows編程大作業(yè)貪吃蛇設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 校:武漢輕工大學(xué) 院 系:班 級(jí): 姓 名: 學(xué) 號(hào): 2015 年12月16日目錄1、 題目介紹2、 設(shè)計(jì)目的3、 詳細(xì)設(shè)計(jì)3.1貪吃蛇本體設(shè)計(jì)3.2貪吃蛇食物設(shè)計(jì)3.3游戲界面設(shè)計(jì)3.3.1游戲初始化3.3.2游戲開始3.3.3游戲暫停3.3.4游戲退出3.3.5游戲總界面3.3.6游戲區(qū)域與背景3.3.7關(guān)于SNAKE3.4玩法規(guī)則設(shè)計(jì)3.5核心設(shè)計(jì)4、 功能測(cè)試5、 總結(jié)6、 參考文獻(xiàn)一、題目介紹:編寫一個(gè)基于MFC的小游戲?;疽螅?、實(shí)現(xiàn)一個(gè)小游戲2、實(shí)現(xiàn)基本游戲控制功能3、具有游戲數(shù)據(jù)保存功能4、界面布局合理、美觀;2、 設(shè)計(jì)目的:
2、通過使用vc+6.0實(shí)現(xiàn)一個(gè)小游戲的課程設(shè)計(jì),進(jìn)一步掌握MFC的高級(jí)使用方法和鍛煉自己動(dòng)手寫程序的能力。了解游戲設(shè)計(jì)的整個(gè)過程,通過熟練使用MFC來設(shè)計(jì)游戲。程序主要包括:游戲界面設(shè)計(jì),游戲菜單欄設(shè)計(jì),游戲初始化,游戲控制等。培養(yǎng)和鍛煉開發(fā)游戲的能力。三、詳細(xì)設(shè)計(jì)3.1貪吃蛇的本體設(shè)計(jì)貪吃蛇的頭部擁有一個(gè)坐標(biāo)(x,y),蛇體有一個(gè)長(zhǎng)度len,蛇有一個(gè)運(yùn)動(dòng)方向direct,故定義一個(gè)結(jié)構(gòu)體如下:struct Snakeint x,y;int len;int direct;Snake50;3.2貪吃蛇食物設(shè)計(jì)貪吃蛇的食物有一個(gè)坐標(biāo)(x,y),此食物有一個(gè)標(biāo)志isfood,當(dāng)isfood為0時(shí),表示
3、食物還沒被吃,為1時(shí),表示被吃。struct Foodint x;int y;int isfood;Food;3.3游戲界面設(shè)計(jì)3.3.1游戲初始化游戲初始蛇體長(zhǎng)度為3,顏色為灰色,食物標(biāo)志為1,因?yàn)榇藭r(shí)沒有顯示出食物,需要隨機(jī)生成后,才置為0;void CSNAKEView:OnInitialUpdate() CView:OnInitialUpdate();Snake0.x=10;Snake0.y=10;Snake1.x=11;Snake1.y=10;Snake2.x=12;Snake2.y=10;Snake0.direct=3;Snake0.len=3;Food.isfood=1;/初始化
4、貪吃蛇起初有3個(gè)節(jié)點(diǎn),長(zhǎng)度為3,起始坐標(biāo);食物默認(rèn)為 1無0有/ TODO: Add your specialized code here and/or call the base classvoid CSNAKEView:oninit()CDC *pDC=GetDC();CBrush DrawBrush=(RGB(100,100,100);CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);for(int i=0;i<=Snake0.len-1;i+)pDC->Rectangle(Snakei.x*20,Snakei.y*
5、20,(Snakei.x+1)*20,(Snakei.y+1)*20);pDC->SelectObject(DrawBrush);3.3.2游戲開始點(diǎn)擊游戲開始菜單后,出現(xiàn)一個(gè)對(duì)話框,提示一秒后,將開始游戲。void CSNAKEView:OnStart() / TODO: Add your command handler code hereSetTimer(1,1000,NULL);AfxMessageBox("1秒后開始游戲!");3.3.3游戲暫停點(diǎn)擊游戲暫停菜單后,出現(xiàn)顯示“已暫停游戲”的對(duì)話框。void CSNAKEView:OnPause() / TODO
6、: Add your command handler code hereKillTimer(1);AfxMessageBox("已暫停游戲");3.3.4游戲退出點(diǎn)擊游戲退出菜單,顯示“退出游戲”的對(duì)話框,隨后關(guān)閉游戲界面。void CSNAKEView:OnExit() / TODO: Add your command handler code hereAfxMessageBox("退出游戲.");exit (0);3.3.5游戲總界面大小設(shè)計(jì)使用CMainFrame的PreCreateWindow函數(shù)對(duì)總界面進(jìn)行初始化。BOOL CMainFrame
7、:PreCreateWindow(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT cscs.style &= WS_OVERLAPPED;cs.cy = 615;cs.cx = 530;return TRUE;3.3.6操作游戲界面大小及背景色設(shè)計(jì)將背景色設(shè)置為黑色,并將游戲區(qū)域顯示出來。void CSNAKEView:OnDraw(CDC*
8、 pDC)CSNAKEDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCBrush backBrush(RGB(0,0,0);/設(shè)置畫刷為希望的背景色CBrush* pOldBrush = pDC->SelectObject(&backBrush);/保存舊畫刷CRect rect;pDC->GetClipBox(&rect);/擦除需要的區(qū)域pDC->PatBlt(rect.left, rect.top, rect.Width(),
9、rect.Height(),PATCOPY);/用創(chuàng)建的畫刷繪制背景區(qū)域pDC->SelectObject(pOldBrush);pDC->Rectangle(19,19,501,501);/設(shè)置需要區(qū)域的起始坐標(biāo)和長(zhǎng)寬。oninit();3.3.7版權(quán)所有點(diǎn)擊幫助中的關(guān)于SNAKE,或者點(diǎn)擊,會(huì)顯示對(duì)話框-版權(quán)歸劉坤煒?biāo)小?.4玩法規(guī)則設(shè)計(jì)當(dāng)按鍵盤上的“上”“下”“左”“右”鍵時(shí),蛇體方向的改變。按“上”時(shí),如果蛇的方向不是朝下的,就將direct方向置為1,使其向上運(yùn)動(dòng),當(dāng)然如果本身就是向上運(yùn)動(dòng)的,那么蛇的運(yùn)動(dòng)方向沒有變化;如果蛇的方向朝下,按上,則不能改變它的方向。其他按法
10、與上類似。void CSNAKEView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call defaultswitch(nChar)case VK_UP:if(Snake0.direct!=2)Snake0.direct=1;break;/按上時(shí),只要不是朝下,都將方向置為上(1) case VK_DOWN:if(Snake0.direct!=1)Snake0.direct=2;break;case VK_LEFT:if(Snake0.d
11、irect!=4)Snake0.direct=3;break; case VK_RIGHT:if(Snake0.direct!=3)Snake0.direct=4;break;CView:OnKeyDown(nChar, nRepCnt, nFlags);3.5游戲核心設(shè)計(jì)當(dāng)碰到白色區(qū)域的任何一邊或者自己撞到自己的身體時(shí),游戲結(jié)束,并輸出自己所得分?jǐn)?shù)。根據(jù)蛇的運(yùn)動(dòng)方向來改變蛇的一個(gè)個(gè)身體部分坐標(biāo)。根據(jù)蛇頭的坐標(biāo)來判斷是否吃到了食物,若吃到,將蛇的長(zhǎng)度加1,食物的標(biāo)志置為1,表示被吃,并且當(dāng)食物標(biāo)志為1時(shí),隨機(jī)生成下一個(gè)食物的坐標(biāo),此坐標(biāo)必須要在游戲區(qū)域內(nèi),不在就循環(huán)生成,直到滿足條件,并將標(biāo)志
12、置為0。void CSNAKEView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();CString soure;if(Snake0.len=2)SetTimer(1,370,NULL);if(Snake0.len=3)SetTimer(1,270,NULL);if(Snake0.len=6)SetTimer(1,200,NULL);if(Snake0.len=9)SetTimer(1,100,NULL);soure.Format(&qu
13、ot;得分:%d!",(Snake0.len-3)*10); /撞界判斷if(Snake0.x*20<=37|Snake0.y*20<=37|Snake0.x*20>=462|Snake0.y*20>=462)KillTimer(1);AfxMessageBox(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);A
14、fxMessageBox(soure);/ s=0;/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=Snakei-1.x;Snakei.y=Snakei-1.y;/運(yùn)動(dòng)方向判斷if(Snake0.direct=1)Snake0.y-;if(Snake
15、0.direct=2)Snake0.y+;if(Snake0.direct=3)Snake0.x-;if(Snake0.direct=4)Snake0.x+;pDC->SelectStockObject(BLACK_PEN);CBrush DrawBrush=(RGB(100,100,100);CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);pDC->Rectangle(Snake0.x*20,Snake0.y*20,(Snake0.x+1)*20,(Snake0.y+1)*20);pDC->SelectObjec
16、t(DrawBrush);/判斷吃食物的條件,撞到就吃if(Snake0.x*20=Food.x*20&&Snake0.y*20=Food.y*20)Snake0.len+;Food.isfood=1;SnakeSnake0.len-1.x=SnakeSnake0.len-2.x;SnakeSnake0.len-1.y=SnakeSnake0.len-2.y;/如果食物被吃了 就生成if(Food.isfood=1)srand(unsigned)time(NULL);dofor(int isfo=Snake0.len-1;isfo>=0;isfo-)if(Snake0.x
17、*20=Snakeisfo.x*20&&Snake0.y*20=Snakeisfo.y*20)Food.x=rand()%25;Food.y=rand()%25;while(Food.x*20<70|Food.y*20<70|Food.x*20>430|Food.y*20>430);pDC->Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20);Food.isfood=0;CView:OnTimer(nIDEvent);4、 功能測(cè)試4.1游戲界面4.2游戲開始4.3游戲正在進(jìn)行4.4游戲暫停4.5游戲退出4.6最后得分4.7關(guān)于SNAKE5、 總結(jié)隨機(jī)數(shù)生成函數(shù)rand()的應(yīng)用在貪吃蛇游戲中是一個(gè)關(guān)鍵步驟,通過不斷的循環(huán)和調(diào)用,能保證游戲的持續(xù)進(jìn)行和更新,其實(shí)不止是貪吃蛇,在大多數(shù)需要隨機(jī)生成元素的游戲中,都可以用rand()函數(shù)生成隨機(jī)數(shù),再控制坐標(biāo)等變量實(shí)現(xiàn)“隨機(jī)生成”功能。通過這一次課程設(shè)計(jì),我最大的收獲就是分析問題解決問題能力的提高,發(fā)現(xiàn)問題,而后解決問題是生活的永續(xù)循環(huán),這種能力會(huì)伴隨我們一生;其次,程序的開發(fā)給了我很多經(jīng)驗(yàn)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年蘇州土木工程協(xié)議樣本一
- 2024年項(xiàng)目合伙經(jīng)營(yíng)合同版B版
- 2024年股權(quán)轉(zhuǎn)讓及增資協(xié)議版
- 2024年籃球場(chǎng)土地平整施工合同
- 2024年苗木種植地租賃合同
- 2024年度通信設(shè)備采購與銷售協(xié)議2篇
- 2024年膩?zhàn)臃职こ踢M(jìn)度計(jì)劃合同
- 2024年茶葉店加盟經(jīng)營(yíng)合同2篇
- 2024年車庫租賃合同范例
- 2024標(biāo)準(zhǔn)離婚合同范本:夫妻共同財(cái)產(chǎn)分割版B版
- 小學(xué)單位換算-體積
- 叉車自行檢查記錄表
- 2024新安全生產(chǎn)法知識(shí)考試題庫及答案大全
- 專題5 書面表達(dá)-2023-2024學(xué)年譯林版五年級(jí)上冊(cè)英語期末專題復(fù)習(xí)
- 2024年中國(guó)科學(xué)技術(shù)大學(xué)創(chuàng)新班物理試題答案詳解
- 《調(diào)水工程設(shè)計(jì)導(dǎo)則SL-T430-20XX-條文說明》
- 第二單元自測(cè)卷(試題)2023-2024學(xué)年統(tǒng)編版語文四年級(jí)下冊(cè)
- 土方開挖過程中的文物保存方案
- 臨時(shí)安全用電要求安全培訓(xùn)
- 水稻田稻鴨共棲技術(shù)要點(diǎn)
- 肺功能科室工作報(bào)告
評(píng)論
0/150
提交評(píng)論