MFC掃雷課程設(shè)計(jì)報(bào)告_第1頁
MFC掃雷課程設(shè)計(jì)報(bào)告_第2頁
MFC掃雷課程設(shè)計(jì)報(bào)告_第3頁
MFC掃雷課程設(shè)計(jì)報(bào)告_第4頁
MFC掃雷課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、宿遷學(xué)院Windows程序設(shè)計(jì)課程考核報(bào)告班級(jí):學(xué)號(hào):姓名:得 分:2013年12月20日目錄1. 設(shè)計(jì)目的及要求 11.1 設(shè)計(jì)目的及問題描述 11.2 設(shè)計(jì)要求 11.3 軟件、硬件環(huán)境 12. 課程設(shè)計(jì)步驟 13. 課程設(shè)計(jì)內(nèi)容 13.1 概要設(shè)計(jì) 23.1.1 程序總體框架描述 23.1.2 程序常用類聲明 33.2 主要技術(shù) 43.3 系統(tǒng)設(shè)計(jì)結(jié)果 (界面截圖、操作流程) 134. 設(shè)計(jì)總結(jié) 164.1 遇到的問題及如何解決 16題目:掃雷游戲1. 設(shè)計(jì)目的及要求 1.1設(shè)計(jì)目的及問題描述系統(tǒng)地學(xué)習(xí)面向?qū)ο缶幊趟枷?,了解MFC架構(gòu),逐步熟悉可視化編程環(huán)境Visual C+并在此環(huán)境下

2、設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡單掃雷游戲,該掃雷游戲應(yīng)能實(shí)現(xiàn)如下功能:(1)雷區(qū)上部左側(cè)顯示總雷數(shù)減被標(biāo)明有雷區(qū)域的數(shù)目。(2)雷區(qū)上部中間位置顯示一按鈕用于開局和顯示鼠標(biāo)動(dòng)作的結(jié)果。(3)雷區(qū)上部右側(cè)顯示掃雷的時(shí)間。1.2設(shè)計(jì)要求(1) 能獨(dú)立搭建可視化程序編程環(huán)境,掌握Visual G + 6.0的安裝、運(yùn)行和使用。(2)總體要求:用面向?qū)ο缶幊痰乃枷肱c方法,實(shí)現(xiàn)一個(gè)掃雷游戲的分析與設(shè)計(jì)階段的開發(fā)工作,開發(fā)工具使用Vsua c+a(3)編寫設(shè)計(jì)方案,設(shè)計(jì)過程,源程序文件結(jié)構(gòu),分析實(shí)驗(yàn)方案,并對(duì)實(shí)驗(yàn)做出總結(jié)。1.3軟件、硬件環(huán)境開發(fā)工具:Microsoft Visual C+ 6.0 軟件和 Window

3、s 2000/XP 操作系統(tǒng)2. 課程設(shè)計(jì)內(nèi)容掃雷小游戲的開發(fā)與實(shí)現(xiàn)3. 課程設(shè)計(jì)步驟步驟大致上可以分為三個(gè)部分,分別為:畫面初始、游戲者按下第一個(gè)方塊和為非地 雷方塊時(shí)展開。畫面初始時(shí),以游戲者最后一次設(shè)定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時(shí)并未產(chǎn) 生地雷。當(dāng)游戲者按下第一個(gè)方塊時(shí)產(chǎn)生地雷資料并啟動(dòng)定時(shí)器,為何在游戲者按下第一個(gè)方塊才產(chǎn)生地雷資料呢?其主要的用意在于不要讓游戲者第一次就踩到地雷,這樣在某種程度上可以提高游戲者游玩的氣氛。接著就是如何判斷按下的方塊是非地雷時(shí)的處理,這也是整個(gè)游戲的技術(shù)核心,我們可以通過遞歸的觀念來檢查周邊的方塊是否含有地雷及是否繼續(xù) 往外翻開。3.1概要設(shè)計(jì)相

4、信大多數(shù)使用Win dows操作系統(tǒng)的使用者,對(duì)這款游戲都不陌生。這款游戲不止操 作簡單,規(guī)則也不難,再加上游戲速度的控制機(jī)制得宜,讓整個(gè)游戲在操作過程中充滿了快樂與緊張的氣氛。除了游樂當(dāng)中能帶給使用者快樂之外,游戲的設(shè)計(jì)內(nèi)容無形中也不斷訓(xùn)練使用者的邏輯思考能力,對(duì)于依靠高度腦力工作的現(xiàn)代人,都可以通過這個(gè)游戲, 不時(shí)的檢驗(yàn)一下自己,所以我們不難發(fā)現(xiàn),在各種可攜帶的電子產(chǎn)品上都有這款游戲的蹤影。當(dāng)按下的方塊不是地雷,且周邊八個(gè)方塊也都沒有地雷時(shí),方塊會(huì)以被翻開方塊的八個(gè)方向?qū)⒖瞻追綁K翻開。3.1.1程序總體框架描述掃雷游戲的開發(fā)主要包括兩大部分:一個(gè)部分是布雷,該部分主要將雷隨機(jī)布置在游戲區(qū)域

5、內(nèi),以避免出現(xiàn)相同的雷區(qū)布置地圖。另一部分是掃雷,該部分包括判斷鼠標(biāo)左鍵點(diǎn)擊某區(qū)域該區(qū)域是否是雷,如果是雷該如何操作, 如果不是雷該如何操作,鼠標(biāo)右鍵點(diǎn)擊某區(qū)域時(shí)如果判斷該區(qū)域是雷則加以標(biāo)記,如果不是雷也加以標(biāo)記, 以及當(dāng)鼠標(biāo)雙擊某區(qū)域時(shí),判斷與該區(qū)域相鄰的其它 8個(gè)區(qū)域是否是雷并做一個(gè)標(biāo)記。圖1系統(tǒng)功能圖-1 -3.1.2 程序常用類聲明首先定義一個(gè)雷類:class Lei243/ 定義一個(gè)雷類public:int weitu; / 顯示哪一個(gè)位圖int shumu;/ 這個(gè)位置相應(yīng)的值 ;接著是在 View 類添加變量和函數(shù):int leftnum; / 剩下雷數(shù)int leinum;/雷

6、數(shù)int jieshu;/結(jié)束short second; / 計(jì)時(shí)int secondstart; / 開始計(jì)時(shí)CBitmap m_Bitmap12;/ 位圖數(shù)組CBitmap m_anniu4;/ 按扭位圖數(shù)組int m_RowCount;/ int m_ColCount; / Lei243 lei5050; /void leizero(); /雷區(qū)行數(shù)雷區(qū)列數(shù)最大雷區(qū)這個(gè)位置周圍雷數(shù)為 0鼠標(biāo)按下左鍵鼠標(biāo)左鍵抬起鼠標(biāo)按下右鍵afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnLButtonDown(UINT

7、 nFlags, CPoint point);/ afx_msg void OnLButtonUp(UINT nFlags, CPoint point);/ afx_msg void OnRButtonDown(UINT nFlags, CPoint point);/ afx_msg void OnTimer(UINT nIDEvent);/ 計(jì)時(shí)器函數(shù)afx_msg void OnStart();/ 開始函數(shù)- 13 -3.2 主要技術(shù)構(gòu)造函數(shù):由于構(gòu)造函數(shù)是程序運(yùn)行時(shí)就執(zhí)行的, 所以, 除了對(duì)變量賦值之外, 游戲的核心結(jié)構(gòu)即內(nèi)部數(shù)組賦值:先是把全部格子的位圖和雷數(shù)賦值為 機(jī)函數(shù)按指定雷數(shù)賦

8、值為 -1, 最后把不是雷的格子的雷數(shù)賦值為相應(yīng)的值。我們還可以把0,然后調(diào)用隨CMy243ztyslView:CMy243ztyslView()/ TODO: add construction code herefor(int ii=0;ii16;ii+)m_Bitmapii.LoadBitmap(IDB_BITMAP14+ii);for(int jj=0;jj4;jj+)m_anniujj.LoadBitmap(IDB_ANNIU1+jj)second=0; / 計(jì)時(shí)secondstart=0; /1 m_RowCount=25; / m_ColCount=16; / leinum=80;

9、 / leftnum=leinum; / jieshu=0; /jieshu=1int aa=0;時(shí)開始計(jì)時(shí)行數(shù)列數(shù)雷數(shù)剩余雷數(shù)時(shí)停止for(int i=0;im_RowCount;i+)for(int j=0;jm_ColCount;j+)leiij.shumu=0; leiij.weitu=0;CTime time=GetCurrentTime();int s;/ 初始化為 0/ 獲取當(dāng)前時(shí)間s=time.GetSecond(); / 獲取秒數(shù)do / 設(shè)置 40 個(gè)雷int k=(rand()*s)%m_RowCount; / 以當(dāng)前秒數(shù)為產(chǎn)生隨機(jī)算法int l=(rand()*s)%m

10、_ColCount;if(leikl.shumu!=-1) / 為了避免一個(gè)位置同時(shí)算兩個(gè)雷 / 只允許當(dāng)前 位置不是雷時(shí)賦值為雷leikl.shumu=-1;aa+;while(aa!=leinum);/ 給方格賦值,計(jì)算雷數(shù)for(int a=0;am_RowCount;a+)for(int b=0;bm_ColCount;b+)if(leiab.shumu=0)for(int c=a-1;ca+2;c+)for(int d=b-1;d=0&c=0&dFillRect(myrect1,&mybrush1);CBrush mybrush; / 畫黑框mybrush.CreateSolidBr

11、ush(RGB(0,0,0);CRect myrect(20,10,70,40);pDC-FillRect(myrect,&mybrush);CRect myrect2(325,10,375,40);pDC-FillRect(myrect2,&mybrush);CPen mypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255);myoldPen=pDC-SelectObject(&mypen);pDC-MoveTo(20,40);/ 畫黑框的白線pDC-LineTo(70,40);pDC-LineTo(70,10);pDC-

12、MoveTo(325,40);pDC-LineTo(375,40);pDC-LineTo(375,10);for(int i=0;im_RowCount;i+)/ 畫雷區(qū)邊線 / 左上角是白線,右下角是黑 線,以顯示立體感for(int j=0;jMoveTo(10+i*15,50+j*15+14); pDC-LineTo(10+i*15,50+j*15);pDC-LineTo(10+i*15+14,50+j*15);pDC-SelectObject(myoldPen);CPen mypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0

13、,0);myoldPen2=pDC-SelectObject(&mypen2);for(int ii=0;iim_RowCount;ii+)for(int jj=0;jjMoveTo(10+ii*15,50+jj*15+14); pDC-LineTo(10+ii*15+14,50+jj*15+14);pDC-LineTo(10+ii*15+14,50+jj*15);pDC-SelectObject(myoldPen2);CDC Dc;if(Dc.CreateCompatibleDC(pDC)=FALSE)AfxMessageBox(Cant create DC);Dc.SelectObject

14、(m_anniu0); /顯示按鈕pDC-BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);for(int a=0;am_RowCount;a+)/判斷顯示什么位圖/weitu=1 已按下的數(shù)字區(qū) /weitu=2 顯示旗 /weitu=3 顯示問號(hào)for(int b=0;bBitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);if(leiab.weitu=2)Dc.SelectObject(m_Bitmap9);pDC-BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);if(l

15、eiab.weitu=3)Dc.SelectObject(m_Bitmap10);pDC-BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);if(jieshu=1&leiab.shumu=-1) / 結(jié)束Dc.SelectObject(m_Bitmap11);pDC-BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu3);pDC-BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);int nOldDC=pDC-SaveDC();/

16、顯示黑框里的數(shù)字pDC-SetTextColor(RGB(255,0,0);pDC-SetBkColor(RGB(0,0,0);CFont font;if(0=font.CreatePointFont(160,Comic Sans MS)AfxMessageBox(Cant Create Font); pDC-SelectObject(&font); CString str;if(leftnumTextOut(25,10,str);if(second10) str.Format(00%d,second);else if(secondTextOut(330,10,str); pDC-Restor

17、eDC(nOldDC);計(jì)時(shí)器函數(shù):OnTimer(UINT nIDEvent) 函 數(shù) , 同 時(shí) 也 可 以 實(shí) 現(xiàn) 計(jì) 時(shí) 顯 示 。 添 加 OnCreate(LPCREATESTRUCT lpCreateStruct) 和 OnTimer(UINT nIDEvent) :int CMy243View:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CView:OnCreate(lpCreateStruct) = -1) return -1;/ TODO: Add your specialized creation code hereSetTime

18、r(1,50,NULL);/20 次為一秒return 0;void CMy243View:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call default if(jieshu=1) return;/ 顯示個(gè)數(shù)為 0 的方格 leizero();/ 結(jié)束,返回 if(secondstart0)/ 計(jì)時(shí) secondstart+;if(secondstart=20)/ 二十次為一秒 secondstart=1; second+;CRect rect3; rect3.left=325;rect3

19、.right=375; rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3); / 重畫時(shí)間CView:OnTimer(nIDEvent);開始函數(shù):點(diǎn)擊笑臉圖標(biāo)和開始鍵都可以重新開始。void CMy243ztyslView:OnStart()SetTimer(1,50,NULL);/ TODO: Add your command handler code here second=0;/ 計(jì)時(shí)secondstart=0;/1 時(shí)開始計(jì)時(shí)leftnum=leinum;/ 剩余雷數(shù) jieshu=0;/jieshu=1 時(shí)停止 int aa=0;

20、for(int i=0;im_RowCount;i+)/ 初始化 0for(int j=0;jm_ColCount;j+)leiij.shumu=0;leiij.weitu=0;do / 設(shè)置 40 個(gè)雷int k=rand()%m_RowCount;int l=rand()%m_ColCount;if(leikl.shumu!=-1)leikl.shumu=-1;aa+;while(aa!=leinum);for(int a=0;am_RowCount;a+)for(int b=0;bm_ColCount;b+)if(leiab.shumu=0)for(int c=a-1;ca+2;c+)for(int d=b-1;d=0&c=0&d111Z1I2Z1|11

溫馨提示

  • 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)論