版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 掃雷游戲程序設(shè)計(jì) </p><p> 2013 年 11 月 5 日</p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p><b> 設(shè)計(jì)任務(wù) </b></p>
2、;<p> ?。?)鼠標(biāo)左擊排雷,右擊插小旗,打問號; </p><p> ?。?)方格里面的數(shù)字表示方格周圍的雷數(shù);</p><p> ?。?)能夠顯示未標(biāo)記雷數(shù)和游戲用時;</p><p> ?。?)雷區(qū)上面的小臉可以變化,顯示微笑,驚訝,痛苦,勝利。在任何情況下單擊小臉可以重新開始游戲; </p><p> ?。?)可進(jìn)行
3、游戲難度的設(shè)定:包括預(yù)定義的難度級別(雷區(qū)行數(shù),列數(shù)和雷數(shù)),和自行定義雷區(qū)行數(shù),列數(shù)和雷數(shù)的功能;</p><p> (6)排行榜功能,掃雷成功時候,根據(jù)游戲用時更新排行榜。</p><p><b> 二. 具體設(shè)計(jì)</b></p><p><b> ?。ㄒ唬?、設(shè)計(jì)思路</b></p><p>
4、; 掃雷游戲是很經(jīng)典也很有趣的一款游戲,這次的游戲程序設(shè)計(jì)要求設(shè)計(jì)出功能與原游戲相近的一款游戲,首先定義變量和類要畫出游戲方格以及位圖,設(shè)計(jì)游戲等級,等級越高方格越多雷數(shù)也越多;然后設(shè)置隨機(jī)布雷以保證每次重新開始游戲都有不同的雷區(qū)地圖;另外定義鼠標(biāo)左擊掃雷,左擊標(biāo)記周圍埋雷情況,右擊奇數(shù)次排雷偶數(shù)次取消上次排雷,以及掃雷第一次左擊不能掃到雷。</p><p><b> ?。ǘ⒃O(shè)計(jì)表示:</b
5、></p><p><b> (三)、實(shí)現(xiàn)功能</b></p><p> 1、鼠標(biāo)左擊排雷,右擊插小旗,打問號; </p><p> 2、方格里面的數(shù)字表示方格周圍的雷數(shù);</p><p> 3、能夠顯示未標(biāo)記雷數(shù)和游戲用時;</p><p> 4、雷區(qū)上面的小臉可以變化,顯示微笑
6、,驚訝,痛苦,勝利。在任何情況下單擊小臉可以重新開始游戲; </p><p> 5、可進(jìn)行游戲難度的設(shè)定:包括預(yù)定義的難度級別(雷區(qū)行數(shù),列數(shù)和雷數(shù));</p><p> 6、任何時候開始游戲第一次點(diǎn)擊不會掃到雷。</p><p> 由于時間等原因未完成功能:</p><p> 排行榜和自行定義雷區(qū)行數(shù),列數(shù)和雷數(shù)功能。</p&
7、gt;<p><b> ?。ㄋ模?、詳細(xì)設(shè)計(jì)</b></p><p><b> 1、添加位圖</b></p><p> 前十二幅是在雷區(qū)的,后四幅是按鈕。為了便于加載,必須各自保證其連續(xù)性。分別表示游戲進(jìn)行的狀態(tài)、結(jié)果勝利或觸雷。</p><p> 2、預(yù)設(shè)等級方格數(shù)雷數(shù)變化</p><
8、;p> void CMywqq20112074View::OnEasy() /////////////////////////////初級</p><p><b> {</b></p><p> m_RowCount=10;//行數(shù)10</p><p> m_ColCount=10;//列數(shù)10</p><p&
9、gt; leinum=10;</p><p> realnum=leinum;</p><p> SetTimer(1,50,NULL);</p><p> // TODO: Add your command handler code here</p><p> second=0;//計(jì)時</p><p>
10、 secondstart=0;//1時開始計(jì)時</p><p><b> //num=0;</b></p><p> leftnum=leinum;//剩余雷數(shù)</p><p> jieshu=0;//jieshu=1時停止</p><p><b> int aa=0;</b></p
11、><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++)</p><p><
12、b> {</b></p><p> lei[i][j].shumu=0;</p><p> lei[i][j].weitu=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> //
13、設(shè)置10個雷</b></p><p> CMywqq20112074View::OnMiddle() //////////////////////////////////中級</p><p><b> {</b></p><p> m_RowCount=15;//行數(shù)15</p><p> m_Col
14、Count=15;//列數(shù)15</p><p> leinum=40;</p><p> realnum=leinum;</p><p> SetTimer(1,50,NULL);</p><p> // TODO: Add your command handler code here</p><p> se
15、cond=0;//計(jì)時</p><p> secondstart=0;//1時開始計(jì)時</p><p><b> //num=0;</b></p><p> leftnum=leinum;//剩余雷數(shù)</p><p> jieshu=0;//jieshu=1時停止</p><p><
16、;b> int 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_ColCo
17、unt;j++)</p><p><b> {</b></p><p> lei[i][j].shumu=0;</p><p> lei[i][j].weitu=0;</p><p><b> }</b></p><p><b> }</b>&
18、lt;/p><p><b> //設(shè)置40個雷</b></p><p> void CMywqq20112074View::OnHard() ///////////////////////////////////////////高級</p><p><b> {</b></p><p> m_R
19、owCount=25;//行數(shù)25</p><p> m_ColCount=16;//列數(shù)16</p><p> leinum=80;</p><p> realnum=leinum;</p><p> SetTimer(1,50,NULL);</p><p> // TODO: Add your comma
20、nd handler code here</p><p> second=0;//計(jì)時</p><p> secondstart=0;//1時開始計(jì)時</p><p><b> //num=0;</b></p><p> leftnum=leinum;//剩余雷數(shù)</p><p> j
21、ieshu=0;//jieshu=1時停止</p><p><b> int aa=0;</b></p><p><b> //初始化0</b></p><p> for(int i=0;i<m_RowCount;i++)</p><p><b> {</b>&l
22、t;/p><p> for(int j=0;j<m_ColCount;j++)</p><p><b> {</b></p><p> lei[i][j].shumu=0;</p><p> lei[i][j].weitu=0;</p><p><b> }</b>
23、;</p><p><b> }</b></p><p><b> //設(shè)置80個雷</b></p><p><b> do</b></p><p><b> {</b></p><p> int k=rand()%m_R
24、owCount;</p><p> int l=rand()%m_ColCount;</p><p> if(lei[k][l].shumu!=-1)</p><p><b> {</b></p><p> lei[k][l].shumu=-1; </p><p><b> a
25、a++; </b></p><p><b> }</b></p><p> }while(aa!=leinum); </p><p> 第一次點(diǎn)擊不會掃到雷</p><p> if(lei[a][b].weitu==0||lei[a][b].weitu==3)</p><p>
26、<b> { </b></p><p> for(;n==0&&lei[a][b].shumu==-1;) //////////////踩到第一個雷</p><p><b> {</b></p><p><b> int aa=0;</b></p>&l
27、t;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++)</p><p><b> {
28、</b></p><p> lei[i][j].shumu=0;</p><p> lei[i][j].weitu=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> do</b&g
29、t;</p><p><b> {</b></p><p> int k=rand()%m_RowCount;</p><p> int l=rand()%m_ColCount;</p><p> if(lei[k][l].shumu!=-1)</p><p><b> {&l
30、t;/b></p><p> lei[k][l].shumu=-1; </p><p><b> aa++; </b></p><p><b> }</b></p><p> }while(aa!=leinum); </p><p><b> /
31、/給方格賦值</b></p><p> for(int a=0;a<m_RowCount;a++)</p><p> for(int b=0;b<m_ColCount;b++)</p><p> if(lei[a][b].shumu==0)</p><p><b> {</b></p
32、><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<m_RowCount&&d>=0&&d<m_ColCount)if(lei[c][d].shumu==
33、-1)</p><p> lei[a][b].shumu++;</p><p><b> }</b></p><p><b> }</b></p><p> 鼠標(biāo)右擊插小旗,打問號</p><p> 第一次用右鍵單擊某個區(qū)域時,該區(qū)域上插上一面小紅旗,此時
34、單擊左鍵沒有任何變化,第二次用右鍵單擊時恢復(fù)原狀。</p><p> //判斷顯示什么位圖</p><p> //weitu=1已按下的數(shù)字區(qū)</p><p> //weitu=2顯示旗</p><p> //weitu=3顯示問號</p><p> for(int a=0;a<m_RowCount;a
35、++)</p><p> for(int b=0;b<m_ColCount;b++)</p><p> {if(lei[a][b].weitu==1)</p><p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[lei[a][b].shumu]);p
36、DC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p> }if(lei[a][b].weitu==2)</p><p> {Dc.SelectObject(m_Bitmap[9]);</p><p> pDC->BitBlt(a*15+10,b*15+50,16
37、0,160,&Dc,0,0,SRCCOPY);</p><p> }if(lei[a][b].weitu==3)</p><p> {Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p>&
38、lt;b> }</b></p><p><b> //結(jié)束</b></p><p><b> 、調(diào)試及測試</b></p><p> 經(jīng)運(yùn)行測試之后,程序出現(xiàn)的問題有:</p><p> 第一次打開游戲時有時會出現(xiàn)不能計(jì)時的情況</p><p>
39、 2、勝利的表情不能正常顯示</p><p><b> 、使用說明</b></p><p> A、 鼠標(biāo)左擊排雷,右擊插小旗,打問號; </p><p> B、 方格里面的數(shù)字表示方格周圍的雷數(shù);</p><p> C、 在任何情況下單擊小臉可以重新開始游戲; </p><p>
40、D、 可進(jìn)行游戲難度的設(shè)定:包括預(yù)定義的難度級別(雷區(qū)行數(shù),列數(shù)和雷數(shù)),和自 行定義雷區(qū)行數(shù),列數(shù)和雷數(shù)的功能;</p><p> E、 掃雷成功時候,游戲用時更新排行榜</p><p><b> ?。ㄆ撸⑦\(yùn)行實(shí)例</b></p><p> 鼠標(biāo)左擊排雷,可翻開連片空格,方格周圍數(shù)字表示周圍埋雷數(shù)目,右鍵單擊一
41、次插小紅旗,雙擊顯示問號表示雷數(shù)情況未知,同時顯示剩余雷數(shù)以及游戲用時 </p><p> 可從預(yù)設(shè)難度等級中選擇游戲難度,游戲方格數(shù)和雷數(shù)都有相應(yīng)增加</p><p> ←初級 </p><p><b> ←中級</b
42、></p><p><b> ←高級</b></p><p> 觸雷時現(xiàn)出痛苦的表情,游戲結(jié)束</p><p> 將雷全部排出,勝利的吶喊?。?lt;/p><p><b> 、設(shè)計(jì)小結(jié)</b></p><p> 這個短短幾天的C++課程設(shè)計(jì)雖然為期不長,卻讓我們從
43、實(shí)踐中學(xué)到了更多的C++編程知識,一開始看到示例中讓人眼花繚亂的程序代碼讓人很有放棄的沖動,可是最后還是堅(jiān)持下來將代碼讀完并自己琢磨出一套代碼出來,在這中間也遇到不少的困難,一開始不知道位圖是怎么做的,那些看起來可愛的表情做起來卻并不簡單,還要在代碼里將這些表情的二維坐標(biāo)對應(yīng)起來,過程細(xì)致而繁雜,最終在與同學(xué)討論之后成功做出,大家還一起開玩笑涂鴉自定義表情,輕松的話語沖淡了寫代碼時的煩躁。還有在設(shè)定難度時要重新畫方格,右鍵單擊時出現(xiàn)不同
44、的狀態(tài),第一次點(diǎn)擊的時候不能掃到雷等等難關(guān),都被堅(jiān)持不懈的毅力和耐力一一克服。直到最后看到各種功能在自己手下實(shí)現(xiàn),這時的成就感和喜悅是之前單獨(dú)實(shí)現(xiàn)一個個小功能所不能比的,不由更加感嘆程序編程的奇妙,讓我對程序員有了新的認(rèn)識,也下定決心努力向他們看齊!!</p><p><b> 附錄:源程序</b></p><p> // wqq20112074View.cpp
45、: implementation of the CMywqq20112074View class</p><p><b> //</b></p><p> #include "stdafx.h"</p><p> #include "wqq20112074.h"</p><p&g
46、t; #include "wqq20112074Doc.h"</p><p> #include "wqq20112074View.h"</p><p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FIL
47、E</p><p> static char THIS_FILE[] = __FILE__;</p><p><b> #endif</b></p><p> /////////////////////////////////////////////////////////////////////////////</p>&
48、lt;p> // CMywqq20112074View</p><p> IMPLEMENT_DYNCREATE(CMywqq20112074View, CView)</p><p> BEGIN_MESSAGE_MAP(CMywqq20112074View, CView)</p><p> //{{AFX_MSG_MAP(CMywqq20112074
49、View)</p><p> ON_WM_TIMER()</p><p> ON_WM_LBUTTONDOWN()</p><p> ON_WM_CREATE()</p><p> ON_COMMAND(ID_START, OnStart)</p><p> ON_WM_LBUTTONUP()</p&g
50、t;<p> ON_WM_RBUTTONDOWN()</p><p> ON_COMMAND(ID_EASY, OnEasy)</p><p> ON_COMMAND(ID_MIDDLE, OnMiddle)</p><p> ON_COMMAND(ID_HARD, OnHard)</p><p> //}}AFX_M
51、SG_MAP</p><p> // Standard printing commands</p><p> ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)</p><p&g
52、t; ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)</p><p> END_MESSAGE_MAP()</p><p> /////////////////////////////////////////////////////////////////////////////</p><
53、p> // CMywqq20112074View construction/destruction</p><p> CMywqq20112074View::CMywqq20112074View()</p><p><b> {</b></p><p> // TODO: add construction code here<
54、;/p><p> for(int ii=0;ii<16;ii++)</p><p> m_Bitmap[ii].LoadBitmap(IDB_BITMAP14+ii);</p><p> for(int jj=0;jj<4;jj++)</p><p> m_anniu[jj].LoadBitmap(IDB_ANNIU1+jj)
55、;</p><p> second=0;//計(jì)時</p><p> secondstart=0;//1時開始計(jì)時</p><p> m_RowCount=25;//行數(shù)</p><p> m_ColCount=16;//列數(shù)</p><p><b> n=0;//格數(shù)</b></p
56、><p><b> leinum=5;</b></p><p> realnum=leinum;</p><p> leftnum=leinum;//剩余雷數(shù)</p><p> jieshu=0;//jieshu=1時停止</p><p><b> int aa=0;</b&
57、gt;</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++)</p><
58、p><b> {</b></p><p> lei[i][j].shumu=0;</p><p> lei[i][j].weitu=0;</p><p><b> }</b></p><p><b> }</b></p><p><
59、b> //獲取當(dāng)前時間</b></p><p> CTime time=GetCurrentTime();</p><p><b> int s;</b></p><p><b> //獲取秒數(shù)</b></p><p> s=time.GetSecond();</p
60、><p><b> //設(shè)置40個雷</b></p><p><b> do</b></p><p><b> {</b></p><p> //以當(dāng)前秒數(shù)為產(chǎn)生隨機(jī)算法</p><p> int k=(rand()*s)%m_RowCount;&
61、lt;/p><p> int l=(rand()*s)%m_ColCount;</p><p> if(lei[k][l].shumu!=-1)</p><p><b> {</b></p><p> lei[k][l].shumu=-1; </p><p><b> aa++;
62、</b></p><p><b> }</b></p><p> }while(aa!=leinum); </p><p> //給方格賦值,計(jì)算雷數(shù)</p><p> for(int a=0;a<m_RowCount;a++)</p><p> for(int b
63、=0;b<m_ColCount;b++)</p><p> if(lei[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>
64、;<p> if(c>=0&&c<m_RowCount&&d>=0&&d<m_ColCount)</p><p> if(lei[c][d].shumu==-1)</p><p> lei[a][b].shumu++;</p><p><b> }</b
65、></p><p><b> }</b></p><p> CMywqq20112074View::~CMywqq20112074View()</p><p><b> { </b></p><p><b> }</b></p><p>
66、 BOOL CMywqq20112074View::PreCreateWindow(CREATESTRUCT& cs)</p><p><b> {</b></p><p> // TODO: Modify the Window class or styles here by modifying</p><p> // the
67、CREATESTRUCT cs</p><p> return CView::PreCreateWindow(cs);</p><p><b> }</b></p><p> /////////////////////////////////////////////////////////////////////////////</
68、p><p> // CMywqq20112074View drawing</p><p> void CMywqq20112074View::OnDraw(CDC* pDC)</p><p><b> {</b></p><p> CMywqq20112074Doc* pDoc = GetDocument();<
69、;/p><p> ASSERT_VALID(pDoc);</p><p> // TODO: add draw code for native data here</p><p><b> //畫背景</b></p><p> CBrush mybrush1;</p><p> mybrus
70、h1.CreateSolidBrush(RGB(192,192,192));</p><p> CRect myrect1(0,0,1200,800);</p><p> pDC->FillRect(myrect1,&mybrush1);</p><p><b> //畫黑框</b></p><p>
71、 CBrush mybrush;</p><p> mybrush.CreateSolidBrush(RGB(0,0,0));</p><p> CRect myrect(20,10,70,40);</p><p> pDC->FillRect(myrect,&mybrush);</p><p> CRect myre
72、ct2(325,10,375,40);</p><p> pDC->FillRect(myrect2,&mybrush);</p><p> CPen mypen;</p><p> CPen*myoldPen;</p><p> mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));
73、</p><p> myoldPen=pDC->SelectObject(&mypen);</p><p><b> //畫黑框的白線</b></p><p> pDC->MoveTo(20,40);</p><p> pDC->LineTo(70,40);</p><
74、;p> pDC->LineTo(70,10);</p><p> pDC->MoveTo(325,40);</p><p> pDC->LineTo(375,40);</p><p> pDC->LineTo(375,10);</p><p><b> //畫雷區(qū)邊線</b><
75、;/p><p> for(int i=0;i<m_RowCount;i++)</p><p> for(int j=0;j<m_ColCount;j++)</p><p><b> {</b></p><p> pDC->MoveTo(10+i*15,50+j*15+14);</p>
76、<p> pDC->LineTo(10+i*15,50+j*15);</p><p> pDC->LineTo(10+i*15+14,50+j*15);</p><p><b> }</b></p><p> pDC->SelectObject(myoldPen);</p><p>
77、 CPen mypen2;</p><p> CPen*myoldPen2;</p><p> mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));</p><p> myoldPen2=pDC->SelectObject(&mypen2);</p><p> for(int ii=0;ii
78、<m_RowCount;ii++)</p><p> for(int jj=0;jj<m_ColCount;jj++)</p><p><b> {</b></p><p> pDC->MoveTo(10+ii*15,50+jj*15+14);</p><p> pDC->LineTo(1
79、0+ii*15+14,50+jj*15+14);</p><p> pDC->LineTo(10+ii*15+14,50+jj*15);</p><p><b> }</b></p><p> pDC->SelectObject(myoldPen2);</p><p><b> CDC D
80、c;</b></p><p> if(Dc.CreateCompatibleDC(pDC)==FALSE)</p><p> AfxMessageBox("Can't create DC");</p><p><b> //顯示按鈕</b></p><p> Dc.Sel
81、ectObject(m_anniu[0]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);</p><p> //判斷顯示什么位圖</p><p> //weitu=1已按下的數(shù)字區(qū)</p><p> //weitu=2顯示旗</p><p
82、> //weitu=3顯示問號</p><p> for(int a=0;a<m_RowCount;a++)</p><p> for(int b=0;b<m_ColCount;b++)</p><p><b> {</b></p><p> if(lei[a][b].weitu==1)<
83、;/p><p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[lei[a][b].shumu]);</p><p> pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p><b>
84、 }</b></p><p> if(lei[a][b].weitu==2)</p><p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[9]);</p><p> pDC->BitBlt(a*15+10,b*15+50,160,160,&D
85、c,0,0,SRCCOPY);</p><p><b> }</b></p><p> if(lei[a][b].weitu==3)</p><p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[10]);</p><p>
86、 pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p><b> }</b></p><p><b> //結(jié)束</b></p><p> if(jieshu==1&&lei[a][b].shumu==-1)<
87、/p><p><b> {</b></p><p> Dc.SelectObject(m_Bitmap[11]);</p><p> pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);</p><p> Dc.SelectObject(m_anni
88、u[3]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);</p><p><b> }</b></p><p><b> }</b></p><p> //顯示黑框里的數(shù)字</p><p>
89、 int nOldDC=pDC->SaveDC();</p><p> pDC->SetTextColor(RGB(255,0,0));</p><p> pDC->SetBkColor(RGB(0,0,0));</p><p> CFont font; </p><p> if
90、(0==font.CreatePointFont(160,"Comic Sans MS"))</p><p><b> {</b></p><p> AfxMessageBox("Can't Create Font");</p><p><b> }</b></p
91、><p> pDC->SelectObject(&font);</p><p> CString str; </p><p> if(leftnum<10) </p><p> str.Format("00%d",leftnum);</p><p><b> e
92、lse</b></p><p> str.Format("0%d",leftnum);</p><p> pDC->TextOut(25,10,str);</p><p> if(second<10)</p><p> str.Format("00%d",sec
93、ond);</p><p> else if(second<100)</p><p> str.Format("0%d" ,second);</p><p><b> else</b></p><p> str.Format("%d" ,second);</p&
94、gt;<p> pDC->TextOut(330,10,str);</p><p> pDC->RestoreDC(nOldDC);</p><p> //////////////////////////////////////////////</p><p><b> }</b></p><
95、;p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMywqq20112074View printing</p><p> BOOL CMywqq20112074View::OnPreparePrinting(CPrintInfo* pInf
96、o)</p><p><b> {</b></p><p> // default preparation</p><p> return DoPreparePrinting(pInfo);</p><p><b> }</b></p><p> void CMyw
97、qq20112074View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)</p><p><b> {</b></p><p> // TODO: add extra initialization before printing</p><p><b> }<
98、/b></p><p> void CMywqq20112074View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)</p><p><b> {</b></p><p> // TODO: add cleanup after printing</p><
99、;p><b> }</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMywqq20112074View diagnostics</p><p> #ifdef _DEBUG
100、</p><p> void CMywqq20112074View::AssertValid() const</p><p><b> {</b></p><p> CView::AssertValid();</p><p><b> }</b></p><p>
101、void CMywqq20112074View::Dump(CDumpContext& dc) const</p><p><b> {</b></p><p> CView::Dump(dc);</p><p><b> }</b></p><p> CMywqq20112074D
102、oc* CMywqq20112074View::GetDocument() // non-debug version is inline</p><p><b> {</b></p><p> ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMywqq20112074Doc)));</p><p&g
103、t; return (CMywqq20112074Doc*)m_pDocument;</p><p><b> }</b></p><p> #endif //_DEBUG</p><p> /////////////////////////////////////////////////////////////////////////
104、////</p><p> // CMywqq20112074View message handlers</p><p> void CMywqq20112074View::OnTimer(UINT nIDEvent) </p><p><b> {</b></p><p> // TODO: Add your
105、message handler code here and/or call default</p><p><b> //結(jié)束,返回</b></p><p> if(jieshu==1)</p><p><b> return;</b></p><p> //顯示個數(shù)為0的方格</p&
106、gt;<p> leizero();</p><p><b> //計(jì)時</b></p><p> if(secondstart>0)</p><p> secondstart++;</p><p> if(secondstart==20)</p><p><b
107、> {</b></p><p> secondstart=1;</p><p> second++;</p><p><b> //重畫時間</b></p><p> CRect rect3;</p><p> rect3.left=325;</p>
108、<p> rect3.right=375;</p><p> rect3.top=10;</p><p> rect3.bottom=40;</p><p> InvalidateRect(&rect3);</p><p><b> }</b></p><p> C
109、View::OnTimer(nIDEvent);</p><p><b> }</b></p><p> void CMywqq20112074View::OnLButtonDown(UINT nFlags, CPoint point) </p><p><b> {</b></p><p>
110、 // TODO: Add your message handler code here and/or call default</p><p><b> //獲取指針pdc</b></p><p> CDC *pDC=GetDC();</p><p><b> CDC Dc;</b></p>&l
111、t;p> if(Dc.CreateCompatibleDC(pDC)==FALSE)</p><p> AfxMessageBox("Can't create DC");</p><p><b> //顯示按下按鈕</b></p><p> if(point.x>180&&poi
112、nt.x<210&&point.y>10&&point.y<40)</p><p><b> {</b></p><p> Dc.SelectObject(m_anniu[3]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRC
113、COPY);</p><p><b> }</b></p><p> if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290))</p><p><b> {</b>
114、</p><p> if(jieshu==1)</p><p><b> return;</b></p><p><b> //顯示張口按鈕</b></p><p> Dc.SelectObject(m_anniu[1]);</p><p> pDC->Bit
115、Blt(180,10,160,160,&Dc,0,0,SRCCOPY); </p><p> secondstart=1;</p><p> int a=(point.x-10)/15;</p><p> int b=(point.y-50)/15;</p><p> if(lei[a][b].weitu==0||lei
116、[a][b].weitu==3)</p><p> { for(;n==0&&lei[a][b].shumu==-1;) //////////////踩到第一個雷</p><p><b> {</b></p><p><b> int aa=0;</b></p><p&g
117、t;<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++)</p><p><b> {</
118、b></p><p> lei[i][j].shumu=0;</p><p> lei[i][j].weitu=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> do</b><
119、;/p><p><b> {</b></p><p> int k=rand()%m_RowCount;</p><p> int l=rand()%m_ColCount;</p><p> if(lei[k][l].shumu!=-1)</p><p><b> {</b&
120、gt;</p><p> lei[k][l].shumu=-1; </p><p><b> aa++; </b></p><p><b> }</b></p><p> }while(aa!=leinum); </p><p><b> //給方格賦
121、值</b></p><p> for(int a=0;a<m_RowCount;a++)</p><p> for(int b=0;b<m_ColCount;b++)</p><p> if(lei[a][b].shumu==0)</p><p><b> {</b></p>
122、<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<m_RowCount&&d>=0&&d<m_ColCount)</p><p> if(lei[
123、c][d].shumu==-1)</p><p> lei[a][b].shumu++;</p><p><b> }</b></p><p><b> }</b></p><p> ///////////////////////////////////如果第一個不是雷接下去部分
124、</p><p> if(lei[a][b].shumu==-1)</p><p><b> {</b></p><p> jieshu=1; </p><p> KillTimer(1);</p><p> Invalidate();</p><p><b
125、> }</b></p><p> else if(leftnum==0) </p><p><b> {</b></p><p> jieshu=2; </p><p> KillTimer(1);</p><p> Invalidate();}</p>
126、<p><b> else </b></p><p><b> {</b></p><p> lei[a][b].weitu=1;</p><p> CRect rect;</p><p> rect.left=a*15+10;</p><p> re
127、ct.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> }</b></p><p> n++;/
128、//////////////////////////////////////////////n是靜態(tài)變量,每點(diǎn)一次左鍵加1 判斷第一個雷</p><p><b> int a1=0;</b></p><p> for(int a=0;a<m_RowCount;a++)</p><p> for(int b=0;b<m_ColC
129、ount;b++)</p><p><b> {</b></p><p> if(lei[a][b].weitu!=1)</p><p><b> {</b></p><p><b> a1++;</b></p><p><b>
130、 }</b></p><p><b> }</b></p><p> if(a1==leinum)</p><p><b> {</b></p><p> jieshu=2; </p><p> KillTimer(1);////////////////
131、//////////////////////顯示勝利按鈕(運(yùn)行的時候出錯)</p><p> Dc.SelectObject(m_anniu[4]);</p><p> pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);</p><p> for(int a=0;a<m_RowCount;a++)<
132、;/p><p> for(int b=0;b<m_ColCount;b++)</p><p><b> {</b></p><p> if(lei[a][b].shumu==-1)</p><p><b> {</b></p><p> lei[a][b].wei
133、tu=2;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> Invalidate();</p><p><b> }</b></
134、p><p><b> }</b></p><p> CView::OnLButtonDown(nFlags, point);</p><p><b> }</b></p><p> int CMywqq20112074View::OnCreate(LPCREATESTRUCT lpCreateS
135、truct) </p><p><b> {</b></p><p> if (CView::OnCreate(lpCreateStruct) == -1)</p><p> return -1;</p><p> // TODO: Add your specialized creation code here&
136、lt;/p><p> //SetTimer(1,50,NULL);</p><p><b> return 0;</b></p><p><b> }</b></p><p> //掃描,如果是已經(jīng)被按下且雷數(shù)為0,顯示它周圍的八個格,并重畫</p><p> voi
137、d CMywqq20112074View::leizero()</p><p><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(lei[i][j].
138、shumu==0&&lei[i][j].weitu==1)</p><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&&a
139、mp;n<25&&m>=0&&m<m_ColCount)</p><p> if(lei[n][m].shumu!=-1&&lei[n][m].weitu==0)</p><p><b> {</b></p><p> lei[n][m].weitu=1;</p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 掃雷課程設(shè)計(jì)--掃雷程序設(shè)計(jì)
- c程序課程設(shè)計(jì)報告(掃雷游戲)
- 掃雷游戲課程設(shè)計(jì)報告
- 掃雷游戲課程設(shè)計(jì)報告
- 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)——掃雷游戲程序設(shè)計(jì)
- java課程設(shè)計(jì)--掃雷游戲報告
- java課程設(shè)計(jì)報告-掃雷小游戲
- java課程設(shè)計(jì)-掃雷游戲
- java掃雷游戲課程設(shè)計(jì)
- 掃雷小游戲課程設(shè)計(jì)
- 程序設(shè)計(jì)課程設(shè)計(jì)報告
- 程序設(shè)計(jì)課程設(shè)計(jì)報告
- mfc課程設(shè)計(jì)———利用vc++程序編寫掃雷游戲
- android平臺掃雷游戲課程設(shè)計(jì)
- 《java程序設(shè)計(jì)》課程設(shè)計(jì)報告
- web程序設(shè)計(jì)課程設(shè)計(jì)報告
- linux程序設(shè)計(jì)課程設(shè)計(jì)報告
- 《c語言程序設(shè)計(jì)》課程設(shè)計(jì)---猜數(shù)字游戲
- 課程設(shè)計(jì)--- 貪吃蛇小游戲程序設(shè)計(jì)
- c課程設(shè)計(jì)報告-- windows程序設(shè)計(jì)報告
評論
0/150
提交評論