C++課程設(shè)計:掃雷1_第1頁
C++課程設(shè)計:掃雷1_第2頁
C++課程設(shè)計:掃雷1_第3頁
C++課程設(shè)計:掃雷1_第4頁
C++課程設(shè)計:掃雷1_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.課 程 設(shè) 計 報 告 課程名稱:面向?qū)ο蟪绦蛟O(shè)計C+ 設(shè)計題目: 掃雷 專 業(yè):計算機(jī)科學(xué)與技術(shù) 姓 名: 學(xué) 號: 指導(dǎo)教師:李 曉 虹 2016 年 1 月 7 日1、 系統(tǒng)需求分析 隨著世界經(jīng)濟(jì)的長足發(fā)展和計算機(jī)技術(shù)的日益成熟,計算機(jī)被應(yīng)用到人類活動的各個領(lǐng)域,各種應(yīng)用軟件也相繼問世,這其中有相當(dāng)一部分是游戲軟件。使用游戲軟件自然是為了滿足人們對娛樂性的要求,而有些軟件大都采用3D設(shè)計對系統(tǒng)配置的要求較高。 在眾多游戲軟件中,也不乏一些小游戲的身影,它們對系統(tǒng)的配置要求較低。能夠滿足人們對娛樂性的需求,是人們在完成工作娛樂時候的最好選擇。在各種操作系統(tǒng)中都附帶了一些小的游戲,而這些游

2、戲也成為電腦用戶軟件中不可或缺的一部分。 掃雷游戲是比較經(jīng)典的一款小游戲,過去的幾年里Windows操作系統(tǒng)歷經(jīng)數(shù)次換代,變得越來越龐大、復(fù)雜,但這個可愛的小游戲在任何版本的Windows操作系統(tǒng)里去卻依然保持著原貌。但幾乎每個電腦使用者都接觸過它,并且深愛著這款小游戲。作為本系統(tǒng)的開發(fā)工具,Microsoft Visual C+ 6.0成為首選。它具有可視化的編程界面、詳細(xì)的提示、以及完善的幫助文檔,使得軟件開發(fā)人員感到無比的親切感。2、 總體設(shè)計2.1 設(shè)計思路 在設(shè)計之前,我們先來了解這款游戲的規(guī)則:在不打開任何藏有地雷的格子情況下,以最快的速度找出所有的地雷。如果在打開格子的過程中,不

3、小心翻開(踩到)藏有地雷的格子,則宣告失敗(游戲結(jié)束),惟有將所有不含地雷的格子打開,游戲才算成功。游戲的操作方面主要以鼠標(biāo)為主,當(dāng)鼠標(biāo)指針對準(zhǔn)未翻開的格子按下左鍵時即表示翻開格子,當(dāng)鼠標(biāo)指針對準(zhǔn)未翻開的方塊按下右鍵時即表示標(biāo)示或疑示地雷,反復(fù)按下右鍵則格子會以未標(biāo)示標(biāo)示疑似三者關(guān)系不斷循環(huán)。游戲者可以通過地雷區(qū)內(nèi)的數(shù)字提示了解以數(shù)字為中心的其周邊八個格子內(nèi)所含的地雷數(shù),假若翻開的格子顯示數(shù)字“3”,則表示以其為中心的周邊格子內(nèi)藏有3個地雷。當(dāng)按下的格子不是地雷,且周邊八個格子也都沒有地雷時,格子會以被翻開格子的八個方向?qū)⒖瞻赘褡臃_。2.2模塊功能介紹游戲總共七個類,其中以下四個類為主要。1

4、、 主界面對話框類:主要負(fù)責(zé)主菜單及各個窗口類對象的創(chuàng)建和調(diào)用等處理。2、 掃雷窗口類:主要負(fù)責(zé)接收玩家鼠標(biāo)輸入的打開格子位置、格子變換、花費(fèi)時間及地雷格子的顯示等處理。3、 幫組對話框類:主要負(fù)責(zé)幫助提示的顯示及其它顯示功能。4、 掃雷視圖類:主要負(fù)責(zé)顯示掃雷界面的展示。2.3模塊結(jié)構(gòu)圖2.3.1游戲主界面設(shè)計掃雷游戲主界面的設(shè)計,如下圖1所示 圖1掃雷游戲主界面2.3.2游戲主菜單結(jié)構(gòu)的設(shè)計圖2 游戲主菜單結(jié)構(gòu)3、 詳細(xì)設(shè)計3.1游戲菜單的實現(xiàn)在掃雷游戲中,通過如下幾個步驟即可實現(xiàn)添加游戲的菜單。 (1) 在掃雷游戲工程的資源中添加一個菜單資源 (2) 給每個菜單欄添加響應(yīng)函數(shù)到CMain

5、Frame類中。 (3) 菜單響應(yīng)函數(shù)的實現(xiàn),代碼如下,#if !defined(AFX_MAINFRM_H_91F247CA_D634_432A_AC01_35B33EA7D404_INCLUDED_)#define AFX_MAINFRM_H_91F247CA_D634_432A_AC01_35B33EA7D404_INCLUDED_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000class CMainFrame : public CFrameWndprotected: / create from serializa

6、tion onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)/ Attributespublic:/ Operationspublic:virtual BOOL PreCreateWindow(CREATESTRUCT& cs);public:virtual CMainFrame();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:DECLARE_MESSAGE_MAP();#e

7、ndif 3.2游戲幫助對話框的實現(xiàn)掃雷游戲中的幫助是使用一個對話框來實現(xiàn)的。其實現(xiàn)步驟如下。 (1) 添加一個對話框資源到工程中,并填寫說明文字。(2) 編寫一個CAboutDlg對話框類,主要是加載IDD_ABOUTBOX對話框資源。通過資源中的文字說明對游戲操作方法進(jìn)行描述。同時只包含單擊“確定”按鈕的響應(yīng)函數(shù)。(3) CAboutDlg對話框類的實現(xiàn),需要實現(xiàn)對話框類的構(gòu)造函數(shù)、析構(gòu)函數(shù)和“確定”按鈕響應(yīng)函數(shù),代碼如下,class CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)

8、enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/ No message handlers/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg

9、:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()

10、/ App command to run the dialogvoid CMineSweeperApp:OnAppAbout()CAboutDlg aboutDlg;aboutDlg.DoModal();/ CMineSweeperApp message handlers3.3新游戲處理模塊的設(shè)計與實現(xiàn) 新游戲處理模塊主要負(fù)責(zé)游戲中的游戲初始化及開始游戲。其設(shè)計比較簡單,只需要通過如下幾步即可實現(xiàn)。 (1)載入圖片資源和配置文件中的數(shù)據(jù)。 (2)把所有的游戲參數(shù)進(jìn)行初始化。例如,當(dāng)前消耗時間和狀態(tài)等。 (3)初始化表示地雷區(qū)域的二維數(shù)組。 (4)讓地雷區(qū)域圖像失效,重新繪制新的圖像。實現(xiàn)代碼如

11、下,BEGIN_MESSAGE_MAP(CMineSweeperView, CView)/AFX_MSG_MAP(CMineSweeperView)ON_COMMAND(ID_EXIT, OnExit)ON_COMMAND(ID_START, OnStart)ON_COMMAND(ID_SETTING, OnSetting)ON_WM_LBUTTONDOWN()ON_WM_RBUTTONDOWN()ON_WM_TIMER()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMineSweeperView construction/destructionCMineSweeperVi

12、ew:CMineSweeperView()/ TODO: add construction code herem_row=10;m_col=10;m_mine=10;m_start=0;m_stop=0;m_t=0;CMineSweeperView:CMineSweeperView()BOOL CMineSweeperView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCr

13、eateWindow(cs);/ CMineSweeperView drawingvoid CMineSweeperView:OnDraw(CDC* pDC)CMineSweeperDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC->BitBlt(0,0,1024,822,&cbj,0,0,SRCCOPY);/ CMineSweeperView diagnostics#ifdef _DEBUGvoid CMineSweeperView:AssertV

14、alid() constCView:AssertValid();void CMineSweeperView:Dump(CDumpContext& dc) constCView:Dump(dc);CMineSweeperDoc* CMineSweeperView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMineSweeperDoc);return (CMineSweeperDoc*)m_pDocument;#endif /_DEBUG/ CMineS

15、weeperView message handlersvoid CMineSweeperView:OnInitialUpdate() CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base classAfxGetApp()->m_pMainWnd->SetWindowPos(NULL,300,50,460,500,NULL);initbitmap(); / 初始化位圖void CMineSweeperView:OnStart() / TODO: Add your comm

16、and handler code herem_start=1;m_stop=0;m_t=0;initdata(); / 初始化數(shù)據(jù)paintmine(); / 畫雷區(qū)SetTimer(0,1000,NULL);void CMineSweeperView:initdata()int i=0,j=0,n=0;mine=new Mine *m_row;for(i=0;i<m_row;i+)minei=new Mine m_col;for(i=0;i<m_row;i+)for(j=0;j<m_col;j+)mineij.x=50+35*j;mineij.y=80+35*i;minei

17、j.p=0;mineij.flag=0;mineij.num=0;srand(time(NULL);if(0=m_mine)return;while(1)int x=rand()%m_row;int y=rand()%m_col;if(0=minexy.p)minexy.p=1;n+;if(x-1>=0&&y-1>=0)minex-1y-1.num+;if(x-1>=0)minex-1y.num+;if(x-1>=0&&y+1<m_col)minex-1y+1.num+;if(y-1>=0)minexy-1.num+;if(y

18、+1<m_col)minexy+1.num+;if(x+1<m_row&&y-1>=0)minex+1y-1.num+;if(x+1<m_row)minex+1y.num+;if(x+1<m_row&&y+1<m_col)minex+1y+1.num+;if(n>=m_mine)break;void CMineSweeperView:paintmine()int i=0,j=0;CDC *pDC=GetDC();for(i=0;i<m_row;i+)for(j=0;j<m_col;j+)pDC->Bit

19、Blt(mineij.x,mineij.y,35,35,&cbj0,0,0,SRCCOPY);ReleaseDC(pDC);3.4地雷格子模塊的設(shè)計與實現(xiàn)地雷格子的處理時掃雷游戲的核心內(nèi)容,包括如下幾個部分。1、 地雷鋪設(shè)模塊。 游戲中的地雷是隨機(jī)鋪設(shè)的,可以調(diào)用隨機(jī)數(shù)發(fā)生函數(shù)生成隨機(jī)數(shù)。利用隨機(jī)數(shù)去除最大行數(shù)或者最大列數(shù),得到放置地雷行列坐標(biāo)。然后分別防止地雷到不同的行和列的格子中去。2、 自動打開周圍不是地雷的格子。 游戲中,當(dāng)玩家單擊的格子周圍沒有地雷格子時,就需要程序自動地把周圍的格子自動打開來提高玩家的效率。其實現(xiàn)是通過遞歸的方法不斷地打開周圍格子周圍地雷個數(shù)為0的格子來實現(xiàn)

20、。3、 獲得周圍地雷個數(shù)模塊。 在游戲中當(dāng)玩家打開一個格子時,如果當(dāng)前這個格子不是地雷,那么其一定是標(biāo)明周圍的地雷個數(shù)的格子。要實現(xiàn)這個功能主要是通過遍歷當(dāng)前格子周圍的3×3范圍的數(shù)組。當(dāng)找到一個元素狀態(tài)是地雷時,就把記錄增加1,知道九個格子全部找完。這樣就可以得到當(dāng)前格子周圍的地雷個數(shù)。 以上講解的相關(guān)函數(shù)的實現(xiàn)。實現(xiàn)代碼如下,void CMineSweeperView:OnStart() / TODO: Add your command handler code herem_start=1;m_stop=0;m_t=0;initdata(); / 初始化數(shù)據(jù)paintmine()

21、; / 畫雷區(qū)SetTimer(0,1000,NULL);void CMineSweeperView:initdata()int i=0,j=0,n=0;mine=new Mine *m_row;for(i=0;i<m_row;i+)minei=new Mine m_col;for(i=0;i<m_row;i+)for(j=0;j<m_col;j+)mineij.x=50+35*j;mineij.y=80+35*i;mineij.p=0;mineij.flag=0;mineij.num=0;srand(time(NULL);if(0=m_mine)return;while(1

22、)int x=rand()%m_row;int y=rand()%m_col;if(0=minexy.p)minexy.p=1;n+;if(x-1>=0&&y-1>=0)minex-1y-1.num+;if(x-1>=0)minex-1y.num+;if(x-1>=0&&y+1<m_col)minex-1y+1.num+;if(y-1>=0)minexy-1.num+;if(y+1<m_col)minexy+1.num+;if(x+1<m_row&&y-1>=0)minex+1y-1.num+

23、;if(x+1<m_row)minex+1y.num+;if(x+1<m_row&&y+1<m_col)minex+1y+1.num+;if(n>=m_mine)break;void CMineSweeperView:paintmine()int i=0,j=0;CDC *pDC=GetDC();for(i=0;i<m_row;i+)for(j=0;j<m_col;j+)pDC->BitBlt(mineij.x,mineij.y,35,35,&cbj0,0,0,SRCCOPY);ReleaseDC(pDC);3.5 游戲規(guī)劃模塊

24、的設(shè)計與實現(xiàn) 游戲規(guī)則模塊的實現(xiàn),主要由游戲勝利和游戲結(jié)束判斷函數(shù)組成。通過對游戲的結(jié)果進(jìn)行判斷,實現(xiàn)掃雷游戲的規(guī)則。1、 游戲勝利的判斷 通過遍歷整個地雷數(shù)組,查找是否全部的地雷格子已經(jīng)被標(biāo)記或者找出來。如果已經(jīng)全部被找出來或者標(biāo)記出來,那么說明玩家勝利,繁殖,說明玩家未勝利,需要繼續(xù)游戲。2、 游戲結(jié)束的判斷當(dāng)玩家打開一個格子時,就對當(dāng)前格子進(jìn)行判斷。如果是地雷,說明玩家不行。游戲以失敗結(jié)束。而如果不是地雷,就對玩家選中的格子周圍的標(biāo)示進(jìn)行判斷,如果有判斷錯誤的格子,也說明玩家游戲失敗,游戲結(jié)束。實現(xiàn)代碼如下,void CMineSweeperView:OnLButtonDown(UINT

25、 nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(0=m_start|1=m_stop)return;CDC *pDC=GetDC();int i=-1,j=-1;get_ij(point,&i,&j);if(-1=i|-1=j)return;if(1=mineij.p)pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm9,0,0,SRCCOPY);m_stop=1;KillTimer(0);AfxMessag

26、eBox("對不起!n你踩到地雷了!n再來一次吧!");elseif(2=mineij.flag)m_mine+;switch(mineij.num)case 0:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm0,0,0,SRCCOPY);break;case 1:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm1,0,0,SRCCOPY);break;case 2:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm2,0,0,SRCCO

27、PY);break;case 3:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm3,0,0,SRCCOPY);break;case 4:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm4,0,0,SRCCOPY);break;case 5:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm5,0,0,SRCCOPY);break;case 6:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm6,0,0,SRCCO

28、PY);break;case 7:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm7,0,0,SRCCOPY);break;mineij.flag=1;ReleaseDC(pDC);CView:OnLButtonDown(nFlags, point);void CMineSweeperView:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(0=m_start|1=m_stop)retu

29、rn;CDC *pDC=GetDC();int i=-1,j=-1;get_ij(point,&i,&j);if(-1=i|-1=j)return;if(1=mineij.flag)return;if(0=m_mine)return;if(2=mineij.flag) pDC->BitBlt(mineij.x,mineij.y,35,35,&cbj0,0,0,SRCCOPY);else pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm10,0,0,SRCCOPY);if(m_mine>0) m_mine-;min

30、eij.flag=2;if(0=m_mine)ifwin();ReleaseDC(pDC);CView:OnRButtonDown(nFlags, point);void CMineSweeperView:get_ij(CPoint p,int *r,int *c)int i=0,j=0;for(i=0;i<m_row;i+)for(j=0;j<m_col;j+)if(mineij.x<p.x&&p.x<mineij.x+35)if(mineij.y<p.y&&p.y<mineij.y+35)*r=i;*c=j;return;

31、void CMineSweeperView:ifwin()CDC *pDC=GetDC();m_stop=1;int i=0,j=0;for(i=0;i<m_row;i+)for(j=0;j<m_col;j+)if(2=mineij.flag)if(1=mineij.p)pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm9,0,0,SRCCOPY);elseswitch(mineij.num)case 0:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm0,0,0,SRCCOPY);break

32、;case 1:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm1,0,0,SRCCOPY);break;case 2:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm2,0,0,SRCCOPY);break;case 3:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm3,0,0,SRCCOPY);break;case 4:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm4,0,0,SRCCOPY);break

33、;case 5:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm5,0,0,SRCCOPY);break;case 6:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm6,0,0,SRCCOPY);break;case 7:pDC->BitBlt(mineij.x,mineij.y,35,35,&cbm7,0,0,SRCCOPY);break;for(i=0;i<m_row;i+)for(j=0;j<m_col;j+)if(2=mineij.flag&&0=mi

34、neij.p)CString x,y,str;x.Format("%d",i+1);y.Format("%d",j+1);str="很遺憾!n第 "str=str+x+" 行,第 "+y+" 列 你好幸運(yùn)的n游戲結(jié)束!"KillTimer(0);AfxMessageBox(str);ReleaseDC(pDC);return;KillTimer(0);AfxMessageBox("恭喜你n你已經(jīng)排出所有的地雷了!n");ReleaseDC(pDC);void CMineSwe

35、eperView:painttime()CDC *pDC=GetDC();CString s;s.Format("%d s",m_t);pDC->BitBlt(50,20,29,29,&cclock,0,0,SRCCOPY);pDC->SetBkMode(TRANSPARENT);pDC->BitBlt(90,30,29,29,&cbj,90,30,SRCCOPY);pDC->TextOut(90,30,s);s.Format("%d",m_mine);pDC->BitBlt(130,20,29,29,&am

36、p;cmine,0,0,SRCCOPY);pDC->BitBlt(170,30,29,29,&cbj,170,30,SRCCOPY);pDC->TextOut(170,30,s);m_t+;ReleaseDC(pDC);void CMineSweeperView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultswitch(nIDEvent)case 0:painttime();break;CView:OnTimer(nIDEvent);3.6游戲繪圖模

37、塊的設(shè)計與實現(xiàn) 在掃雷游戲中,通過繪圖模塊實現(xiàn)地雷、格子、地雷個數(shù)、當(dāng)前時間及控制按鈕等圖片和信息的提示。有以下幾個函數(shù)組成。1、 繪按鈕函數(shù) 繪按鈕函數(shù),主要通過在游戲中不斷地得到當(dāng)前游戲的狀態(tài)。根據(jù)這個按鈕,在按鈕圖片中把指定的坐標(biāo)范圍圖片繪制到主界面上。2、 繪數(shù)字區(qū)域函數(shù) 剩余地雷個數(shù)和消耗時間的數(shù)字顯示,主要通過一定的算法,得到當(dāng)前地雷剩余個數(shù)和已消耗的時間。3、 繪雷區(qū)函數(shù) 繪雷函數(shù),時通過遍歷當(dāng)前雷區(qū)數(shù)組,并根據(jù)當(dāng)前元素所代表的類型不同,將不同的圖片繪制到位置。實現(xiàn)代碼如下,void CMineSweeperView:OnInitialUpdate() CView:OnIniti

38、alUpdate();/ TODO: Add your specialized code here and/or call the base classAfxGetApp()->m_pMainWnd->SetWindowPos(NULL,300,50,460,500,NULL);initbitmap(); / 初始化位圖void CMineSweeperView:initbitmap()CDC *pDC=GetDC();bm0.LoadBitmap(IDB_0);bm1.LoadBitmap(IDB_1);bm2.LoadBitmap(IDB_2);bm3.LoadBitmap(I

39、DB_3);bm4.LoadBitmap(IDB_4);bm5.LoadBitmap(IDB_5);bm6.LoadBitmap(IDB_6);bm7.LoadBitmap(IDB_7);bm8.LoadBitmap(IDB_8);bm9.LoadBitmap(IDB_9);bm10.LoadBitmap(IDB_10);bj.LoadBitmap(IDB_bj);bj0.LoadBitmap(IDB_bj0);bclock.LoadBitmap(IDB_clock);bmine.LoadBitmap(IDB_mine);bnum.LoadBitmap(IDB_num);cbm0.Create

40、CompatibleDC(pDC);cbm1.CreateCompatibleDC(pDC);cbm2.CreateCompatibleDC(pDC);cbm3.CreateCompatibleDC(pDC);cbm4.CreateCompatibleDC(pDC);cbm5.CreateCompatibleDC(pDC);cbm6.CreateCompatibleDC(pDC);cbm7.CreateCompatibleDC(pDC);cbm8.CreateCompatibleDC(pDC);cbm9.CreateCompatibleDC(pDC);cbm10.CreateCompatibl

41、eDC(pDC);cbj.CreateCompatibleDC(pDC);cbj0.CreateCompatibleDC(pDC);cclock.CreateCompatibleDC(pDC);cmine.CreateCompatibleDC(pDC);cnum.CreateCompatibleDC(pDC);cbm0.SelectObject(&bm0);cbm1.SelectObject(&bm1);cbm2.SelectObject(&bm2);cbm3.SelectObject(&bm3);cbm4.SelectObject(&bm4);cbm5

42、.SelectObject(&bm5);cbm6.SelectObject(&bm6);cbm7.SelectObject(&bm7);cbm8.SelectObject(&bm8);cbm9.SelectObject(&bm9);cbm10.SelectObject(&bm10);cbj.SelectObject(&bj);cbj0.SelectObject(&bj0);cclock.SelectObject(&bclock);cmine.SelectObject(&bmine);cnum.SelectObject(&bnum);ReleaseDC(pDC);void CMineSweeperView:OnExit() / TODO: Add your command handler code hereexit(0);3.7、玩家輸入模塊的設(shè)計與實現(xiàn) 在掃雷游戲中,用的最多的就是鼠標(biāo)的輸入。而鼠標(biāo)輸入又分為鼠標(biāo)左鍵單

溫馨提示

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

評論

0/150

提交評論