![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/df650b0e-29ff-409b-9b5f-92b2a96d065b/df650b0e-29ff-409b-9b5f-92b2a96d065bpic.jpg)
![mfc課程設(shè)計(jì)———利用vc++程序編寫(xiě)掃雷游戲_第1頁(yè)](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/df650b0e-29ff-409b-9b5f-92b2a96d065b/df650b0e-29ff-409b-9b5f-92b2a96d065b1.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> Windows程序設(shè)計(jì)</p><p><b> 課程考核報(bào)告</b></p><p> 班 級(jí): </p><p> 學(xué) 號(hào): </p><p> 姓 名: </p><p> 得 分
2、: </p><p> 2013年12月 15 日</p><p> 1.設(shè)計(jì)目的及要求3</p><p> 1.1設(shè)計(jì)目的及問(wèn)題描述3</p><p><b> 1.2設(shè)計(jì)要求3</b></p><p> 1.3軟件、硬件環(huán)境3&l
3、t;/p><p> 2.課程設(shè)計(jì)步驟4</p><p> 3. 課程設(shè)計(jì)內(nèi)容15</p><p> 3.1 概要設(shè)計(jì)15</p><p> 3.1.1 程序總體框架描述15</p><p> 3.1.2程序常用類(lèi)聲明16</p><p> 3.2主要技術(shù)17</p>
4、;<p> 3.3系統(tǒng)設(shè)計(jì)結(jié)果 (界面截圖、操作流程)17</p><p><b> 4.設(shè)計(jì)總結(jié)19</b></p><p> 4.1遇到的問(wèn)題及如何解決19</p><p><b> 4.2體會(huì)19</b></p><p><b> 5.源代碼20&l
5、t;/b></p><p> 1.設(shè)計(jì)目的及要求 </p><p> 1.1設(shè)計(jì)目的及問(wèn)題描述 </p><p> 利用VC++程序編寫(xiě)掃雷游戲,以檢測(cè)自己一個(gè)學(xué)期對(duì)MFC學(xué)習(xí)的情況,以及了解自己在MFC學(xué)習(xí)中的不足,鞏固和提高自己對(duì)MFC的理解和掌握。掌握C++編程和調(diào)試的基本技能,進(jìn)一步提高自己的動(dòng)手能力,和運(yùn)用C++解決實(shí)際問(wèn)題的能力。</p
6、><p> 本次我做的是一個(gè)簡(jiǎn)單的掃雷的游戲,包括計(jì)算雷數(shù)、時(shí)間和掃雷的規(guī)則制定。</p><p><b> 1.2設(shè)計(jì)要求 </b></p><p> 找出所有的非地雷的地方。如果在掀開(kāi)方塊的過(guò)程中,不小心翻開(kāi)(踩到)藏有地雷的方塊,則宣告失敗(游戲結(jié)束),惟有將所有不含地雷的方塊掀開(kāi),游戲才算成功。</p><p>
7、;<b> 游戲規(guī)則:</b></p><p> 首先按右鍵開(kāi)始,可以通過(guò)界面快捷鍵(如圖笑臉),也可以通過(guò)菜單重新開(kāi)始。接著左鍵按下的數(shù)字周?chē)蝗Π烁裰欣椎膫€(gè)數(shù)。當(dāng)確定小方框里面是一個(gè)雷,則用右鍵按下有一個(gè)小旗出現(xiàn)。當(dāng)發(fā)現(xiàn)此處不是一個(gè)雷時(shí),就可以再次按下。結(jié)束時(shí)只需要按標(biāo)題欄的關(guān)閉鍵或菜單中的文件下的退出。當(dāng)踩到一個(gè)雷時(shí),程序結(jié)束。</p><p> 1.3軟
8、件、硬件環(huán)境 </p><p> 軟件:Windows 7操作系統(tǒng),Microsoft Visual C++6.0</p><p> 硬件:Inter(R) Core(TM) i3-2330M CPU @ 2.20GHz</p><p><b> 2.課程設(shè)計(jì)步驟 </b></p><p><b>
9、; 添加位圖</b></p><p> 前十二幅是在雷區(qū)的,后四幅是按鈕。</p><p><b> 位圖的ID號(hào):</b></p><p> 按扭位圖:30*30 IDB_ANNIU1、IDB_ANNIU 2、IDB_ANNIU3、 IDB_ANNIU4</p><p> 雷區(qū)位圖:14*1
10、4 ID號(hào)按下圖依次為:IDB_BITMAP14。。。。。。IDB_BITMAP25</p><p><b> 添加全局變量</b></p><p><b> public:</b></p><p> int leftnum;//剩下雷數(shù)</p><p> int leinum;//雷數(shù)
11、</p><p> int jieshu;//結(jié)束</p><p> short second;//計(jì)時(shí)</p><p> int secondstart;//開(kāi)始計(jì)時(shí)</p><p> CBitmap m_Bitmap[12];</p><p> CBitmap m_anniu[4];</p>
12、<p> int m_RowCount;//行</p><p> int m_ColCount;//列</p><p> wkh wkh[50][50];//最大雷區(qū)</p><p> void leizero();</p><p> virtual ~CWkhView();</p><p>&
13、lt;b> 畫(huà)初始界面</b></p><p><b> ?。?)添加函數(shù)</b></p><p> 1)void CWkhView::leizero()//掃描,如果是已經(jīng)被按下且雷數(shù)為0,顯示它周?chē)陌藗€(gè)格,并重</p><p> void CWkhView::leizero()</p><p&g
14、t;<b> {</b></p><p> for(int i=0;i<m_RowCount;i++)</p><p> for(int j=0;j<m_ColCount;j++)</p><p> if(wkh[i][j].shumu==0&&wkh[i][j].weitu==1)</p>&
15、lt;p><b> {</b></p><p> for(int n=i-1;n<i+2;n++)</p><p> for(int m=j-1;m<j+2;m++)</p><p> if(n>=0&&n<25&&m>=0&&m<m_ColCou
16、nt)</p><p> if(wkh[n][m].shumu!=-1&&wkh[n][m].weitu==0)</p><p><b> {</b></p><p> wkh[n][m].weitu=1;</p><p> CRect rect;</p><p> re
17、ct.left=n*15+10;</p><p> rect.right=n*15+25;</p><p> rect.top=m*15+50;</p><p> rect.bottom=m*15+65;</p><p> InvalidateRect(&rect);</p><p><b&g
18、t; }</b></p><p><b> }</b></p><p><b> }</b></p><p> 2)void CWkhView::OnLButtonDown(UINT nFlags, CPoint point) //鼠標(biāo)左鍵按下函數(shù)</p><p> void
19、CWkhView::OnLButtonDown(UINT nFlags, CPoint point) </p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p><b> //獲取指針pd
20、c</b></p><p> CDC *pDC=GetDC();</p><p><b> CDC Dc;</b></p><p> if(Dc.CreateCompatibleDC(pDC)==FALSE)</p><p> AfxMessageBox("Can't create
21、DC");</p><p><b> //顯示按下按鈕</b></p><p> if(point.x>180&&point.x<210&&point.y>10&&point.y<40)</p><p><b> {</b></
22、p><p> Dc.SelectObject(m_anniu[3]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);</p><p><b> }</b></p><p> if((point.x>=10)&&(po
23、int.x<=385)&&(point.y>=50)&&(point.y<=290))</p><p><b> {</b></p><p> if(jieshu==1)</p><p><b> return;</b></p><p>
24、<b> //顯示窗口按鈕</b></p><p> Dc.SelectObject(m_anniu[1]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY); </p><p> secondstart=1;</p><p> in
25、t a=(point.x-10)/15;</p><p> int b=(point.y-50)/15;</p><p> if(wkh[a][b].weitu==0||wkh[a][b].weitu==3)</p><p><b> {</b></p><p> if(wkh[a][b].shumu==-1)&
26、lt;/p><p><b> {</b></p><p> jieshu=1; </p><p> KillTimer(1);</p><p> Invalidate();</p><p> MessageBox("你失敗了");</p><p>
27、;<b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> wkh[a][b].weitu=1;</p><p> CRect rect;</p><p> rect.left
28、=a*15+10;</p><p> rect.right=a*15+25;</p><p> rect.top=b*15+50;</p><p> rect.bottom=b*15+65;</p><p> InvalidateRect(&rect);</p><p><b> }<
29、;/b></p><p><b> }</b></p><p><b> }</b></p><p> CView::OnLButtonDown(nFlags, point);</p><p><b> }</b></p><p> 3)
30、void CWkhView::OnLButtonUp(UINT nFlags, CPoint point) //鼠標(biāo)左鍵松開(kāi)</p><p> void CWkhView::OnLButtonUp(UINT nFlags, CPoint point) </p><p><b> {</b></p><p> // TODO: Add yo
31、ur message handler code here and/or call default</p><p> CDC *pDC=GetDC();</p><p><b> CDC Dc;</b></p><p> if(Dc.CreateCompatibleDC(pDC)==FALSE)</p><p>
32、AfxMessageBox("Can't create DC");</p><p><b> //顯示按鈕</b></p><p> Dc.SelectObject(m_anniu[0]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY)
33、;</p><p> if(jieshu==1)</p><p><b> {</b></p><p> Dc.SelectObject(m_anniu[2]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);</p><
34、;p><b> }</b></p><p> if(point.x>180&&point.x<210&&point.y>10&&point.y<40)</p><p> OnStart();</p><p> CView::OnLButtonUp(nFlag
35、s, point);</p><p><b> }</b></p><p> 4)void CWkhView::OnRButtonDown(UINT nFlags, CPoint point) //鼠標(biāo)右鍵按下</p><p> void CWkhView::OnRButtonDown(UINT nFlags, CPoint point)
36、 </p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p> if(jieshu==1)</p><p><b> return;</b></
37、p><p> if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290))</p><p><b> {</b></p><p> int a=(point.x-10)/15;</p>
38、<p> int b=(point.y-50)/15;</p><p> if(wkh[a][b].weitu==0||wkh[a][b].weitu==3)</p><p><b> {</b></p><p> wkh[a][b].weitu=2;</p><p> leftnum--;
39、</p><p><b> }</b></p><p><b> else</b></p><p> if(wkh[a][b].weitu==2)</p><p><b> {</b></p><p> wkh[a][b].weitu=3;&l
40、t;/p><p> leftnum++;</p><p><b> }</b></p><p><b> //重畫(huà)剩下雷數(shù)</b></p><p> CRect rect2;</p><p> rect2.left=20;</p><p> r
41、ect2.right=70;</p><p> rect2.top=10;</p><p> rect2.bottom=40;</p><p> InvalidateRect(&rect2);</p><p><b> //重畫(huà)打擊格子</b></p><p> CRect
42、 rect;</p><p> rect.left=a*15+10;</p><p> rect.right=a*15+25;</p><p> rect.top=b*15+50;</p><p> rect.bottom=b*15+65;</p><p> InvalidateRect(&rect)
43、;</p><p><b> }</b></p><p> CView::OnRButtonDown(nFlags, point);</p><p><b> }</b></p><p> 5)void CWkhView::OnStart() //計(jì)時(shí)函數(shù)</p><
44、p> void CWkhView::OnStart() </p><p><b> {</b></p><p> SetTimer(1,50,NULL);</p><p> // TODO: Add your command handler code here</p><p> second=0;//計(jì)時(shí)
45、</p><p> secondstart=0;//1時(shí)開(kāi)始計(jì)時(shí)</p><p><b> //num=0;</b></p><p> leftnum=leinum;//剩余雷數(shù)</p><p> jieshu=0;//jieshu=1時(shí)停止</p><p><b> int
46、 aa=0;</b></p><p><b> //初始化0</b></p><p> for(int i=0;i<m_RowCount;i++)</p><p><b> {</b></p><p> for(int j=0;j<m_ColCount;j++)<
47、;/p><p><b> {</b></p><p> wkh[i][j].shumu=0;</p><p> wkh[i][j].weitu=0;</p><p><b> }</b></p><p><b> }</b></p>
48、<p><b> //設(shè)置40個(gè)雷</b></p><p><b> do</b></p><p><b> {</b></p><p> int k=rand()%m_RowCount;</p><p> int l=rand()%m_ColCount;&
49、lt;/p><p> if(wkh[k][l].shumu!=-1)</p><p><b> {</b></p><p> wkh[k][l].shumu=-1; </p><p><b> aa++; </b></p><p><b> }</b&g
50、t;</p><p> }while(aa!=leinum); </p><p><b> //給方格賦值</b></p><p> for(int a=0;a<m_RowCount;a++)</p><p> for(int b=0;b<m_ColCount;b++)</p>&l
51、t;p> if(wkh[a][b].shumu==0)</p><p><b> {</b></p><p> for(int c=a-1;c<a+2;c++)</p><p> for(int d=b-1;d<b+2;d++)</p><p> if(c>=0&&c&l
52、t;m_RowCount&&d>=0&&d<m_ColCount)</p><p> if(wkh[c][d].shumu==-1)</p><p> wkh[a][b].shumu++;</p><p><b> }</b></p><p> Invalidate
53、(); </p><p><b> }</b></p><p> 6)void CWkhView::OnTimer(UINT nIDEvent) //結(jié)束游戲函數(shù)</p><p> void CWkhView::OnTimer(UINT nIDEvent) </p><p><b> {</b&g
54、t;</p><p> // TODO: Add your message handler code here and/or call default</p><p><b> //結(jié)束,返回</b></p><p> if(jieshu==1)</p><p><b> return;</b&g
55、t;</p><p> //顯示個(gè)數(shù)為0的方格</p><p> leizero();</p><p><b> //計(jì)時(shí)</b></p><p> if(secondstart>0)</p><p> secondstart++;</p><p> if
56、(secondstart==20)</p><p><b> {</b></p><p> secondstart=1;</p><p> second++;</p><p><b> //重畫(huà)時(shí)間</b></p><p> CRect rect3;</p&
57、gt;<p> rect3.left=325;</p><p> rect3.right=375;</p><p> rect3.top=10;</p><p> rect3.bottom=40;</p><p> InvalidateRect(&rect3);</p><p><
58、;b> }</b></p><p> CView::OnTimer(nIDEvent);</p><p><b> }</b></p><p> void CWkhView::OnDraw(CDC* pDC)//框架設(shè)置</p><p> void CWkhView::OnDraw(CDC*
59、pDC)</p><p><b> {</b></p><p> CWkhDoc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p><p> // TODO: add draw code for native data here</p>
60、<p><b> //畫(huà)背景</b></p><p> CBrush mybrush1;</p><p> mybrush1.CreateSolidBrush(RGB(192,192,192));</p><p> CRect myrect1(0,0,1200,800);</p><p> pDC-&
61、gt;FillRect(myrect1,&mybrush1);</p><p><b> //畫(huà)黑框</b></p><p> CBrush mybrush;</p><p> mybrush.CreateSolidBrush(RGB(0,0,0));</p><p> CRect myrect(20,1
62、0,70,40);</p><p> pDC->FillRect(myrect,&mybrush);</p><p> CRect myrect2(325,10,375,40);</p><p> pDC->FillRect(myrect2,&mybrush);</p><p> CPen mypen;&l
63、t;/p><p> CPen*myoldPen;</p><p> mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));</p><p> myoldPen=pDC->SelectObject(&mypen);</p><p><b> //畫(huà)黑框的白線(xiàn)</b>&l
64、t;/p><p> pDC->MoveTo(20,40);</p><p> pDC->LineTo(70,40);</p><p> pDC->LineTo(70,10);</p><p> pDC->MoveTo(325,40);</p><p> pDC->LineTo(375
65、,40);</p><p> pDC->LineTo(375,10);</p><p><b> //畫(huà)雷區(qū)邊線(xiàn)</b></p><p> for(int i=0;i<m_RowCount;i++)</p><p> for(int j=0;j<m_ColCount;j++)</p>
66、<p><b> {</b></p><p> pDC->MoveTo(10+i*15,50+j*15+14);</p><p> pDC->LineTo(10+i*15,50+j*15);</p><p> pDC->LineTo(10+i*15+14,50+j*15);</p><
67、;p><b> }</b></p><p> pDC->SelectObject(myoldPen);</p><p> CPen mypen2;</p><p> CPen*myoldPen2;</p><p> mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));&l
68、t;/p><p> myoldPen2=pDC->SelectObject(&mypen2);</p><p> for(int ii=0;ii<m_RowCount;ii++)</p><p> for(int jj=0;jj<m_ColCount;jj++)</p><p><b> {</b
69、></p><p> pDC->MoveTo(10+ii*15,50+jj*15+14);</p><p> pDC->LineTo(10+ii*15+14,50+jj*15+14);</p><p> pDC->LineTo(10+ii*15+14,50+jj*15);</p><p><b>
70、}</b></p><p> pDC->SelectObject(myoldPen2);</p><p><b> CDC Dc;</b></p><p> if(Dc.CreateCompatibleDC(pDC)==FALSE)</p><p> AfxMessageBox("Ca
71、n't create DC");</p><p><b> //顯示按鈕</b></p><p> Dc.SelectObject(m_anniu[0]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);</p><p>
72、 //判斷顯示什么位圖</p><p> //weitu=1已按下的數(shù)字區(qū)</p><p> //weitu=2顯示旗</p><p> //weitu=3顯示問(wèn)號(hào)</p><p> for(int a=0;a<m_RowCount;a++)</p><p> for(int b=0;b<m_C
73、olCount;b++)</p><p><b> {</b></p><p> if(wkh[a][b].weitu==1)</p><p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);</p>
74、<p> pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p><b> }</b></p><p> if(wkh[a][b].weitu==2)</p><p><b> {</b></p><p
75、> Dc.SelectObject(m_Bitmap[9]);</p><p> pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p><b> }</b></p><p> if(wkh[a][b].weitu==3)</p>&l
76、t;p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[10]);</p><p> pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p><b> }</b></p>
77、<p><b> //結(jié)束</b></p><p> if(jieshu==1&&wkh[a][b].shumu==-1)</p><p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[11]);</p><p> pD
78、C->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p> Dc.SelectObject(m_anniu[3]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);</p><p><b> }<
79、/b></p><p><b> }</b></p><p> //顯示黑框里的數(shù)字</p><p> int nOldDC=pDC->SaveDC();</p><p> pDC->SetTextColor(RGB(255,0,0));</p><p> pDC-&g
80、t;SetBkColor(RGB(0,0,0));</p><p> CFont font; </p><p> if(0==font.CreatePointFont(160,"Comic Sans MS"))</p><p><b> {</b></p><p&
81、gt; AfxMessageBox("Can't Create Font");</p><p><b> }</b></p><p> pDC->SelectObject(&font);</p><p> CString str; </p><p> if(leftn
82、um<10) </p><p> str.Format("00%d",leftnum);</p><p><b> else</b></p><p> str.Format("0%d",leftnum);</p><p> pDC->TextOut(2
83、5,10,str);</p><p> if(second<10)</p><p> str.Format("00%d",second);</p><p> else if(second<100)</p><p> str.Format("0%d" ,second);</p&g
84、t;<p><b> else</b></p><p> str.Format("%d" ,second);</p><p> pDC->TextOut(330,10,str);</p><p> pDC->RestoreDC(nOldDC);</p><p> /
85、/////////////////////////////////////////////</p><p><b> }</b></p><p><b> (5)菜單修改</b></p><p> 3. 課程設(shè)計(jì)內(nèi)容 </p><p><b> 3.1 概要設(shè)計(jì) </b>
86、;</p><p> 游戲的操作方面主要以鼠標(biāo)為主,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開(kāi)的方塊按下左鍵時(shí)即表示翻開(kāi)方塊,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開(kāi)的方塊按下右鍵時(shí)即表示標(biāo)示或疑示地雷,反復(fù)按下右鍵則方塊會(huì)以未標(biāo)示→標(biāo)示→疑似三者關(guān)系不斷循環(huán)。游戲者可以通過(guò)地雷區(qū)內(nèi)的數(shù)字提示了解以數(shù)字為中心的其周邊八個(gè)方格內(nèi)所含的地雷數(shù),假若翻開(kāi)的方塊顯示數(shù)字“1”,則表示以其為中心的周邊方塊內(nèi)藏有1個(gè)地雷。</p><p>
87、 當(dāng)按下的方塊不是地雷,且周邊八個(gè)方塊也都沒(méi)有地雷時(shí),方塊會(huì)以被翻開(kāi)方塊的八個(gè)方向?qū)⒖瞻追綁K翻開(kāi)。</p><p> 3.1.1 程序總體框架描述 </p><p> 3.1.2程序常用類(lèi)聲明</p><p><b> 定義新類(lèi):</b></p><p> 對(duì)于雷,我們是單獨(dú)定義一個(gè)類(lèi),這樣有利于程序的操作。&
88、lt;/p><p><b> class wkh</b></p><p><b> {</b></p><p><b> public:</b></p><p><b> //顯示哪一個(gè)位圖</b></p><p> int
89、weitu;</p><p> //這個(gè)位置相應(yīng)的值</p><p> int shumu;</p><p><b> };</b></p><p><b> 視圖類(lèi)變量: </b></p><p> 接著是在View類(lèi)添加變量和函數(shù):</p><
90、;p><b> //剩下雷數(shù)</b></p><p> int leftnum; </p><p><b> //雷數(shù)</b></p><p> int leinum; </p><p><b> //結(jié)束</b></p><p>
91、 int jieshu;</p><p><b> //計(jì)時(shí)</b></p><p> short second; </p><p><b> //開(kāi)始計(jì)時(shí)</b></p><p> int secondstart; </p><p><b> //位圖數(shù)
92、組</b></p><p> CBitmap m_Bitmap[12];</p><p><b> //按扭位圖數(shù)組</b></p><p> CBitmap m_anniu[4];</p><p><b> //雷區(qū)行數(shù)</b></p><p> in
93、t m_RowCount; </p><p><b> //雷區(qū)列數(shù)</b></p><p> int m_ColCount; </p><p><b> //最大雷區(qū)</b></p><p> wkh lei[50][50]; </p><p><b>
94、 3.2主要技術(shù) </b></p><p><b> 1.圖形的設(shè)置</b></p><p><b> 2.消息處理函數(shù);</b></p><p><b> 3.視圖框架設(shè)置;</b></p><p><b> 4.掃雷游戲算法。</b>
95、;</p><p><b> 5.菜單的設(shè)置。</b></p><p> 3.3系統(tǒng)設(shè)計(jì)結(jié)果 (界面截圖、操作流程)</p><p><b> 1.界面截圖:</b></p><p><b> 操作流程圖</b></p><p><b>
96、; 4.設(shè)計(jì)總結(jié)</b></p><p> 4.1遇到的問(wèn)題及如何解決</p><p> 隨著掃雷游戲的開(kāi)發(fā)完成,本游戲中預(yù)期的主要功能也基本實(shí)現(xiàn)。本系統(tǒng)以Visual C++ 6.0作為前臺(tái)開(kāi)發(fā)工具,Visual C++ 6.0以簡(jiǎn)單、易用等優(yōu)點(diǎn)成為開(kāi)發(fā)本系統(tǒng)的首選工具。本論文闡述了掃雷游戲的分析與設(shè)計(jì)的全過(guò)程,并在論文中相應(yīng)的位置插入了圖片、流程圖以及一些具有技巧性的
97、程序代碼,更加清晰的描述了該游戲是如何實(shí)現(xiàn)的。</p><p> 掃雷游戲是一款益智類(lèi)游戲,該游戲與那些網(wǎng)絡(luò)游戲和3D游戲相比,它有編寫(xiě)簡(jiǎn)單容易上手等特點(diǎn),非常適合人們?cè)谕瓿晒ぷ鞯臅r(shí)候適當(dāng)?shù)膴蕵?lè)要求。這些小游戲大都是以益智和娛樂(lè)為目的,不僅給緊張工作的人們以放松,還可以讓人們的大腦得到開(kāi)發(fā)。</p><p> 由于我學(xué)習(xí)Visual C++ 6.0和MFC的時(shí)間比較短,其中的很多知識(shí)
98、還沒(méi)有了解和掌握,當(dāng)然出現(xiàn)了很多錯(cuò)誤,</p><p> 在設(shè)計(jì)過(guò)程中出現(xiàn)鼠標(biāo)不響應(yīng)操作的現(xiàn)象,這是因?yàn)槎x鼠標(biāo)函數(shù)時(shí)出現(xiàn)了錯(cuò)誤;</p><p> 在設(shè)計(jì)過(guò)程中對(duì)位圖的設(shè)置不夠了解,總是不能調(diào)用位圖,通過(guò)百度,才知道缺少了一部分代碼;</p><p> 對(duì)于分號(hào)、引號(hào)的符號(hào)出現(xiàn)了不少的錯(cuò)誤,主要是中英文切換時(shí)沒(méi)注意,導(dǎo)致編譯出錯(cuò);</p>&l
99、t;p> 完成程序之后,對(duì)程序進(jìn)行編譯,系統(tǒng)總是提示鏈接出錯(cuò),經(jīng)過(guò)仔細(xì)檢查沒(méi)有找到語(yǔ)句或定義錯(cuò)誤,后來(lái)發(fā)現(xiàn)是電腦問(wèn)題,我在任務(wù)管理器中結(jié)束wkh.exe。再次鏈接,錯(cuò)誤就消除了。</p><p><b> 4.2體會(huì)</b></p><p> 在掃雷游戲中有些功能還不夠完善,例如在掃雷游戲中不能實(shí)現(xiàn)游戲難度的選擇和游戲的保存。希望在以后的工作和學(xué)習(xí)中不斷的
100、充實(shí)自己的知識(shí)結(jié)構(gòu),把掃雷游戲的功能進(jìn)一步完善,使它成為一個(gè)更具有實(shí)用價(jià)值的游戲軟件,同時(shí)也懇請(qǐng)老師給予批評(píng)指正。</p><p><b> 5.源代碼</b></p><p> // MainFrm.cpp : implementation of the CMainFrame class</p><p><b> //<
101、/b></p><p> #include "stdafx.h"</p><p> #include "wkh.h"</p><p> #include "MainFrm.h"</p><p> #ifdef _DEBUG</p><p> #
102、define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_FILE[] = __FILE__;</p><p><b> #endif</b></p><p> ////////////////////////////////
103、/////////////////////////////////////////////</p><p> // CMainFrame</p><p> IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)</p><p> BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)</p>
104、<p> //{{AFX_MSG_MAP(CMainFrame)</p><p> ON_WM_CREATE()</p><p> //}}AFX_MSG_MAP</p><p> END_MESSAGE_MAP()</p><p> static UINT indicators[] =</p><p
105、><b> {</b></p><p> ID_SEPARATOR, // status line indicator</p><p> ID_INDICATOR_CAPS,</p><p> ID_INDICATOR_NUM,</p><p> ID_INDICATOR_SCRL,&
106、lt;/p><p><b> };</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMainFrame construction/destruction</p><
107、p> CMainFrame::CMainFrame()</p><p><b> {</b></p><p> // TODO: add member initialization code here</p><p><b> }</b></p><p> CMainFrame::~
108、CMainFrame()</p><p><b> {</b></p><p><b> }</b></p><p> int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)</p><p><b> {</b>&
109、lt;/p><p> if (CFrameWnd::OnCreate(lpCreateStruct) == -1)</p><p> return -1;</p><p> /*if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP</p>&l
110、t;p> | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||</p><p> !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))</p><p><b> {</b></p><p> TRACE0("F
111、ailed to create toolbar\n");</p><p> return -1; // fail to create</p><p><b> }</b></p><p> if (!m_wndStatusBar.Create(this) ||</p><p> !m_wndS
112、tatusBar.SetIndicators(indicators,</p><p> sizeof(indicators)/sizeof(UINT)))</p><p><b> {</b></p><p> TRACE0("Failed to create status bar\n");</p>&l
113、t;p> return -1; // fail to create</p><p><b> }</b></p><p> // TODO: Delete these three lines if you don't want the toolbar to</p><p> // be dockable<
114、/p><p> m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);</p><p> EnableDocking(CBRS_ALIGN_ANY);</p><p> DockControlBar(&m_wndToolBar);</p><p> */HICON hicon;</p>
115、<p> hicon=AfxGetApp()->LoadIcon(IDI_WKH);</p><p> SetIcon(hicon,TRUE);</p><p><b> return 0;</b></p><p><b> }</b></p><p> BOOL CM
116、ainFrame::PreCreateWindow(CREATESTRUCT& cs)</p><p><b> {</b></p><p> if( !CFrameWnd::PreCreateWindow(cs) )</p><p> return FALSE;</p><p> // TODO: Mo
117、dify the Window class or styles here by modifying</p><p> // the CREATESTRUCT cs</p><p> cs.style=WS_SYSMENU;//</p><p> cs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST;//</p>&l
118、t;p> cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;//; </p><p> //設(shè)置窗口大?。?00*340</p><p> cs.cx=400;</p><p> cs.cy=340; </p><p> return TRUE;</p><
119、p><b> }</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMainFrame diagnostics</p><p> #ifdef _DEBUG</p>
120、;<p> void CMainFrame::AssertValid() const</p><p><b> {</b></p><p> CFrameWnd::AssertValid();</p><p><b> }</b></p><p> void CMainFra
121、me::Dump(CDumpContext& dc) const</p><p><b> {</b></p><p> CFrameWnd::Dump(dc);</p><p><b> }</b></p><p> #endif //_DEBUG</p><p
122、> /////////////////////////////////////////////////////////////////////////////</p><p> // CMainFrame message handlers</p><p> // wkhView.h : interface of the CWkhView class</p><
123、;p><b> //</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> #if !defined(AFX_WKHVIEW_H__A35B457D_4DC0_4B5B_A614_EAF8D78165BF__IN
124、CLUDED_)</p><p> #define AFX_WKHVIEW_H__A35B457D_4DC0_4B5B_A614_EAF8D78165BF__INCLUDED_</p><p> #if _MSC_VER > 1000</p><p> #pragma once</p><p> #endif // _MSC_V
125、ER > 1000</p><p><b> class wkh</b></p><p><b> {</b></p><p><b> public:</b></p><p> int weitu;</p><p> int shumu
126、;</p><p><b> };</b></p><p> class CWkhView : public CView</p><p><b> {</b></p><p> protected: // create from serialization only</p>&
127、lt;p> CWkhView();</p><p> DECLARE_DYNCREATE(CWkhView)</p><p> // Attributes</p><p><b> public:</b></p><p> CWkhDoc* GetDocument();</p><p&
128、gt; // Operations</p><p><b> public:</b></p><p> // Overrides</p><p> // ClassWizard generated virtual function overrides</p><p> //{{AFX_VIRTUAL(CWkhV
129、iew)</p><p><b> public:</b></p><p> virtual void OnDraw(CDC* pDC); // overridden to draw this view</p><p> virtual BOOL PreCreateWindow(CREATESTRUCT& cs);</p&
130、gt;<p> protected:</p><p> virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);</p><p> virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);</p><p> virtual void OnEn
131、dPrinting(CDC* pDC, CPrintInfo* pInfo);</p><p> //}}AFX_VIRTUAL</p><p> // Implementation</p><p><b> public:</b></p><p> int leftnum;//剩下雷數(shù)</p>&
132、lt;p> int leinum;//雷數(shù)</p><p> int jieshu;//結(jié)束</p><p> short second;//計(jì)時(shí)</p><p> int secondstart;//開(kāi)始計(jì)時(shí)</p><p> CBitmap m_Bitmap[12];</p><p> CBi
133、tmap m_anniu[4];</p><p> int m_RowCount;//行</p><p> int m_ColCount;//列</p><p> wkh wkh[50][50];//最大雷區(qū)</p><p> void leizero();</p><p> virtual ~CWkhVie
134、w();</p><p> #ifdef _DEBUG</p><p> virtual void AssertValid() const;</p><p> virtual void Dump(CDumpContext& dc) const;</p><p><b> #endif</b></p&
135、gt;<p> protected:</p><p> // Generated message map functions</p><p> protected:</p><p> //{{AFX_MSG(CWkhView)</p><p> afx_msg void OnTimer(UINT nIDEvent);&
136、lt;/p><p> afx_msg void OnRButtonDown(UINT nFlags, CPoint point);</p><p> afx_msg void OnLButtonDown(UINT nFlags, CPoint point);</p><p> afx_msg int OnCreate(LPCREATESTRUCT lpCreate
137、Struct);</p><p> afx_msg void OnStart();</p><p> afx_msg void OnLButtonUp(UINT nFlags, CPoint point);</p><p> //}}AFX_MSG</p><p> DECLARE_MESSAGE_MAP()</p>&
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vc++課程設(shè)計(jì)--基于mfc的模擬時(shí)鐘
- vc++課程設(shè)計(jì)報(bào)告--對(duì)抗游戲
- vc++課程設(shè)計(jì)報(bào)告----對(duì)抗游戲
- vc++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---對(duì)抗游戲
- c程序課程設(shè)計(jì)報(bào)告(掃雷游戲)
- 掃雷游戲程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- vc++課程設(shè)計(jì)報(bào)告
- vc++課程設(shè)計(jì)--聊天室程序設(shè)計(jì)
- 掃雷課程設(shè)計(jì)--掃雷程序設(shè)計(jì)
- vc++軟件課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)-掃雷游戲
- vc++庫(kù)函數(shù)課程設(shè)計(jì)
- 掃雷游戲課程設(shè)計(jì)報(bào)告
- java掃雷游戲課程設(shè)計(jì)
- 掃雷游戲課程設(shè)計(jì)報(bào)告
- 掃雷小游戲課程設(shè)計(jì)
- vc++課程設(shè)計(jì)-- 餐飲管理系統(tǒng)
- vc++課程設(shè)計(jì)--工資管理
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)
- vc++課程設(shè)計(jì)--工資管理
評(píng)論
0/150
提交評(píng)論