mfc課程設(shè)計(jì)———利用vc++程序編寫(xiě)掃雷游戲_第1頁(yè)
已閱讀1頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論