人工智能掃雷課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  人工智能project報(bào)告</p><p><b>  目錄</b></p><p>  1.自動(dòng)掃雷…………………………………………………………3</p><p>  需求分析…………………………………………………………3</p><p>  游戲規(guī)則…………………………………………………………3

2、</p><p>  掃雷游戲設(shè)計(jì)……………………………………………………3</p><p>  自動(dòng)掃雷設(shè)計(jì)……………………………………………………5</p><p>  用戶手冊(cè)…………………………………………………………5</p><p>  運(yùn)行結(jié)果…………………………………………………………6</p><p>

3、;  結(jié)論………………………………………………………………7</p><p>  主要算法代碼……………………………………………………7</p><p><b>  1 自動(dòng)掃雷</b></p><p><b>  問(wèn)題描述、需求分析</b></p><p>  掃雷是Windows操作系統(tǒng)自帶的

4、桌面小游戲之一,由于其規(guī)則簡(jiǎn)單,長(zhǎng)期以來(lái)一直受到電腦用戶的歡迎。自動(dòng)掃雷是開始掃雷后根據(jù)掃雷規(guī)則利用計(jì)算機(jī)進(jìn)行掃雷。 開始棋局,單擊第一個(gè)按鈕,因?yàn)閳?zhí)行第一個(gè)動(dòng)作時(shí)所有按鈕是雷的概率都相等,為了方便起見(jiàn)每次開局后都按下第一個(gè)按鈕,如果不幸第一個(gè)按鈕就是雷,那么單擊--開始--重新開局。</p><p><b>  2.游戲規(guī)則</b></p><p>  游戲界面如下

5、圖所示,游戲區(qū)域是由M X N個(gè)格子組成的“雷區(qū)”,左上方的數(shù)字顯示雷區(qū)中未被標(biāo)出的地雷的個(gè)數(shù),右上方的數(shù)字顯示用戶從第一次點(diǎn)擊開始所用的時(shí)間,單位是秒。中間的圖標(biāo)指示游戲的狀態(tài)(完成:笑臉;失?。嚎弈?。用戶需要通過(guò)鼠標(biāo)操作來(lái)確定雷區(qū)中所有地雷的位置:</p><p>  左鍵單擊:嘗試某個(gè)格子是否有地雷。如果該格子下有地雷,則游戲失敗·如果該格子下沒(méi)有地雷但其周圍八個(gè)格子下有地雷,該格子會(huì)顯示其周圍

6、八個(gè)格子中地雷的個(gè)數(shù);如果該格子下沒(méi)有地雷且其周圍八個(gè)格子下也沒(méi)有地雷,則此處被挖開。右鍵單擊:改變某個(gè)格子是否有雷的標(biāo)志(工)?;蜃笥益I同時(shí)單擊:當(dāng)該格子周圍已標(biāo)地雷的個(gè)數(shù)與格子中的數(shù)字相同時(shí),則挖開周圍的其余格子。當(dāng)提示該格子周圍已標(biāo)地雷的個(gè)數(shù)少于格子;</p><p><b>  3.掃雷游戲設(shè)計(jì)</b></p><p>  每個(gè)格子有如下幾種狀態(tài):</p

7、><p>  {MS_NORMAL,MS_OPEN,MS_FLAG,MS_QUEST,MS_EXPLODE} MINESTATUS</p><p><b>  1)格子類</b></p><p><b>  共有變量如下:</b></p><p>  MINESTATUS m_nStatus;//格子狀

8、態(tài)</p><p>  int m_nMineNum;//格子周圍的雷數(shù),即格子上顯示的數(shù)字</p><p>  CWnd *m_pParent;//父窗口</p><p>  int m_nX,m_nY; //按下按鈕的橫縱坐標(biāo)</p><p><b>  成員函數(shù)</b></p><p> 

9、 SetStatus(MINESTATUS nStatus)//設(shè)置狀態(tài)</p><p>  GetStatus()//獲取狀態(tài)</p><p>  SetMineNum(int nMineNum)//設(shè)置雷數(shù)</p><p>  GetMineNum() //獲取雷數(shù)</p><p>  DrawItem(BOOL bFail=TRUE)

10、;//繪制格子</p><p><b>  布雷類</b></p><p><b>  共有變量如下</b></p><p>  int m_nRow,m_nCol;//棋盤有多少行多少列</p><p>  int m_nMineNum; //棋盤上的雷數(shù)</p><p&g

11、t;  int m_nX,m_nY; //棋盤的位置</p><p>  int m_nOldMine; </p><p>  int m_aMineTest[9];</p><p>  int m_nMineTest;</p><p>  CMineButton *m_aLandMine[10000]; //棋盤</p&g

12、t;<p>  CWnd *m_pParent;</p><p><b>  成員函數(shù)</b></p><p>  Create(int nRow,int nCol,int nMineNum,int nX,int nY,CWnd *pParent);</p><p>  Reset(int nRow,int nCol,int nM

13、ineNum);//重新布局</p><p>  ReDraw(BOOL bFail);//刷新棋局</p><p>  LButtonDown(CPoint point);//左鍵按下</p><p>  BothButtonDown(CPoint point);//左鍵與右鍵同時(shí)按下</p><p>  RButtonDown(CPoin

14、t point);//右鍵按下</p><p>  MouseMove(CPoint point,int bBothDown);//鼠標(biāo)移動(dòng)</p><p>  LButtonUp(CPoint point);//左鍵彈起</p><p>  BothButtonUp(CPoint point);//左鍵與右鍵同時(shí)彈起</p><p>  O

15、penMine(int nCurMine);//開局函數(shù)</p><p>  IsSuccess(); //判斷是否掃雷成功</p><p>  RndBtShdDn(int nCurMine);</p><p>  GetMineNum()//獲取棋盤的雷數(shù)</p><p>  GetRight(int nCurMine)//獲取四鄰域的

16、中心點(diǎn)像素正右方像素點(diǎn)的位置</p><p>  GetLeft(int nCurMine)//獲取四鄰域的中心點(diǎn)像素正下左像素點(diǎn)的位置</p><p>  GetTop(int nCurMine)//獲取四鄰域的中心點(diǎn)像素正上方像素點(diǎn)的位置</p><p>  GetBot(int nCurMine)//獲取四鄰域的中心點(diǎn)像素正下方像素點(diǎn)的位置</p>

17、<p><b>  布雷算法 :</b></p><p>  首先定義一個(gè)n*n的二維數(shù)組,該數(shù)組的i-1到i+1,j-1到j(luò)+1除去i,j本身。值為周 圍有幾個(gè)雷。如果該數(shù)組的值為10則本身是雷。然后自動(dòng)生成m個(gè)雷,讓這m個(gè)雷分布在界面上。被選中的值i,j點(diǎn)的值為10,從i-1到i+1,從j-1到j(luò)+1的值都+1;然后在界面上想辦法區(qū)分出n*n個(gè)格子,然后把格子的坐標(biāo)和

18、二維數(shù)組關(guān)聯(lián)起來(lái)做掃雷那首先一定是生成一個(gè)矩陣,比如10*10的區(qū)域,里面再用數(shù)字來(lái)表示有沒(méi)有雷用一個(gè)結(jié)構(gòu)體數(shù)組保存雷的隱藏,翻開和標(biāo)志情況關(guān)于你所說(shuō)的擴(kuò)展,我想是不是數(shù)組的邊界問(wèn)題?到了數(shù)組邊界上,遇到下標(biāo)越界錯(cuò)誤,為矩陣再加一道邊界比如你要生成3*3的雷區(qū),而實(shí)際上,需要定義5*5的數(shù)組,而數(shù)組的四周定義為沒(méi)有雷的空地,如下:0代表空地,1代表雷</p><p><b>  00000</b&

19、gt;</p><p><b>  01010</b></p><p><b>  00100</b></p><p><b>  00000</b></p><p><b>  00000</b></p><p>  搜索的時(shí)候就

20、在數(shù)組中間這3*3的區(qū)域內(nèi)進(jìn)行,比如點(diǎn)擊了ime(2,2)的區(qū)域,也就是顯示出來(lái)的雷區(qū)中的第一塊空地,則程序首先需要判斷這里有沒(méi)有雷,然后再計(jì)算周圍八個(gè)區(qū)域的雷的情況,將累加結(jié)果放到這個(gè)區(qū)域內(nèi),如下:</p><p>  If ime(2,2)=1 then</p><p><b>  踩到地雷的代碼</b></p><p>  else&

21、#39;沒(méi)踩到地雷</p><p>  for i=1 to 3</p><p>  for j=1 to 3</p><p>  if i=2 and j=2 then next</p><p>  imesum=imesum+ime(i,j)</p><p>  j++ i++ 這樣就統(tǒng)計(jì)出了該區(qū)域周圍雷的數(shù)量.

22、</p><p><b>  為程序添加背景音樂(lè)</b></p><p>  PlaySound(MAKEINTRESOURCE(IDR_WAVE1),::GetModuleHandle(NULL),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);</p><p>  注意:要播放背景音樂(lè)必須加入以

23、下兩個(gè)頭文件</p><p>  #include <mmsystem.h>//導(dǎo)入聲音頭文件 </p><p>  #pragma comment(lib, "WINMM.LIB")//導(dǎo)入聲音頭文件庫(kù) </p><p><b>  4. 自動(dòng)掃雷設(shè)計(jì)</b></p><p>  在第一

24、次點(diǎn)擊前,所有格子下面有地雷的概率相同,因此隨意點(diǎn)擊任何一個(gè)即可,定義一個(gè)IsChange變量,用于循環(huán)掃雷。</p><p>  當(dāng)某個(gè)格子(X)顯示的數(shù)字(Mine(X))等于它周圍被標(biāo)為地雷的格子的個(gè)數(shù),那么它周圍未被標(biāo)示的格子下一定沒(méi)有地雷。此時(shí)可以單擊它周圍初始狀態(tài)的格子,或者同時(shí)左、右鍵單擊這個(gè)顯示數(shù)字格子。</p><p>  如果中心點(diǎn)的格子數(shù)值與周圍不知狀態(tài)的格子數(shù)相等,

25、那么它周圍沒(méi)有被標(biāo)為地雷的格子下面一定有地雷。此時(shí)可以右鍵單擊它周圍沒(méi)有被標(biāo)為地雷的格子。</p><p>  以上兩步分別對(duì)應(yīng)一個(gè)for循環(huán),第一重循環(huán)用于標(biāo)識(shí)肯定是雷的格子(即插旗子),第二重循環(huán)用于尋找中心點(diǎn)的格子數(shù)值與周圍不知狀態(tài)的格子數(shù)相等的格子(即根據(jù)第一重循環(huán)的結(jié)果,找到肯定不是雷的格子并單擊),如果第一重循環(huán)執(zhí)行了插旗子的動(dòng)作IsChange=1,第二種循環(huán)如果執(zhí)行了單擊的動(dòng)作IsChange=1

26、;當(dāng)IsChange!=0時(shí)一直執(zhí)行上兩重循環(huán),直到掃完為止,或者出現(xiàn)猜的情況(踩到雷的情況只有在第一步時(shí)才有可能出現(xiàn),也就是說(shuō)如果第一步不是雷,那么接下來(lái)的整盤棋都不會(huì)踩到雷)。</p><p><b>  4.用戶手冊(cè)</b></p><p>  運(yùn)行程序,單擊 游戲-->開始 正常情況下可以掃雷成功,偶然情況即出現(xiàn)猜的情況時(shí)給出提示對(duì)話框;</p

27、><p><b>  程序運(yùn)行結(jié)果:</b></p><p>  第一次就踩到雷 掃雷成功 </p><p>  掃雷出現(xiàn)猜的情況如下:</p><p>  結(jié)論:此掃雷算法大部分情況可以完成掃雷任務(wù);</p>

28、<p><b>  主要算法程序代碼:</b></p><p>  void CMineDlg::OnCommandRestart()</p><p><b>  {</b></p><p>  bFail = FALSE;</p><p>  if(bStart)</p>

29、<p>  KillTimer(1);</p><p>  bStart = FALSE;</p><p>  LandMine.Reset(LandMine.GetRow(),LandMine.GetCol(),LandMine.GetMineNum());</p><p>  TimeCount.SetNumber(0);</p>&l

30、t;p>  MineCount.SetNumber(LandMine.GetMineNum());</p><p>  m_Face.SetBitmap(&m_FaceNormal);</p><p>  RedrawWindow();</p><p><b>  int i,j;</b></p><p>

31、  int MineNum=LandMine.GetMineNum();</p><p>  int IsChange;//用于退出循環(huán)</p><p>  int t,Num,Num1;//Num用于存儲(chǔ)獲取8鄰域MS_EXPLODE狀態(tài)的個(gè)數(shù),t用于獲取8領(lǐng)域點(diǎn)的位置</p><p>  int AllItem=LandMine.GetRow()*LandMin

32、e.GetCol(); //獲得棋盤的大小,即一位數(shù)組的長(zhǎng)度</p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[0]->m_nX,LandMine.m_aLandMine[0]->m_nY)); //每次都是按下第一個(gè)按鈕,因?yàn)榈谝淮伟聪履膫€(gè)概率都是相等的</p><p>  OnLButtonUp(1,CPoint

33、(LandMine.m_aLandMine[0]->m_nX,LandMine.m_aLandMine[0]->m_nY));</p><p>  while(MS_EXPLODE && LandMine.m_aLandMine[1]->m_nStatus==MS_NORMAL&&LandMine.m_aLandMine[10]->m_nStatus==MS

34、_NORMAL)</p><p><b>  {</b></p><p>  if (LandMine.m_aLandMine[0]->m_nStatus==MS_EXPLODE) break;</p><p>  LandMine.Reset(LandMine.GetRow(),LandMine.GetCol(),LandMine.Ge

35、tMineNum());</p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[0]->m_nX,LandMine.m_aLandMine[0]->m_nY)); //每次都是按下第一個(gè)按鈕,因?yàn)榈谝淮伟聪履膫€(gè)概率都是相等的</p><p>  OnLButtonUp(1,CPoint(LandMine.m_aLandMi

36、ne[0]->m_nX,LandMine.m_aLandMine[0]->m_nY));</p><p><b>  }</b></p><p><b>  do</b></p><p>  { //第一種情況</p><p>  IsChange=0;</p><

37、;p>  for (i=0;i<AllItem;i++) //狀態(tài)MS_NORMAL,MS_OPEN,MS_FLAG,MS_QUEST,MS_EXPLODE</p><p><b>  {</b></p><p>  Num=0; //每次在累加的時(shí)候千萬(wàn)別忘記初始化</p><p>  if (LandMine.m_aLandM

38、ine[i]->m_nStatus==MS_OPEN && LandMine.m_aLandMine[i]->m_nMineNum>0) //對(duì)于打開的按鈕來(lái)說(shuō)</p><p><b>  {</b></p><p>  t=LandMine.GetLeft(i);//4鄰域</p><p>  if (t&

39、gt;=0 && LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN)</p><p><b>  Num++;</b></p><p>  t=LandMine.GetTop(i);</p><p><b>  if (t>=0)</b></p>

40、<p><b>  {</b></p><p>  if (LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN)</p><p><b>  Num++;</b></p><p>  t=LandMine.GetLeft(LandMine.GetTop(i));<

41、;/p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN) </p><p><b>  Num++;</b></p><p>  t=LandMine.GetRight(LandMine.GetTop(i));</p><p&

42、gt;  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN) </p><p><b>  Num++;</b></p><p><b>  }</b></p><p>  t=LandMine.GetRight(i);</p&

43、gt;<p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN) </p><p><b>  Num++;</b></p><p>  t=LandMine.GetBot(i);</p><p><b>  if (t>

44、=0)</b></p><p><b>  {</b></p><p>  if (LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN)</p><p><b>  Num++;</b></p><p>  t=LandMine.GetLeft(

45、LandMine.GetBot(i));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN)</p><p><b>  Num++;</b></p><p>  t=LandMine.GetRight(LandMine.GetBot(

46、i));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus!=MS_OPEN)</p><p><b>  Num++;</b></p><p><b>  }</b></p><p>  if (Num&g

47、t;0 && Num==LandMine.m_aLandMine[i]->m_nMineNum)</p><p><b>  {</b></p><p>  t=LandMine.GetLeft(i);//4鄰域</p><p>  if (t>=0 && LandMine.m_aLandMine[t

48、]->m_nStatus==MS_NORMAL) </p><p><b>  {</b></p><p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnRButtonUp

49、(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  MineNum--;</p><p>  IsChange=1;</p><p><b>  }</b></p><p>  t=LandMin

50、e.GetTop(i);</p><p><b>  if (t>=0)</b></p><p><b>  {</b></p><p>  if (LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {&l

51、t;/b></p><p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnRButtonUp(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine

52、[t]->m_nY));</p><p>  MineNum--;</p><p>  IsChange=1;</p><p><b>  }</b></p><p>  t=LandMine.GetLeft(LandMine.GetTop(i));</p><p>  if (t>=

53、0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {</b></p><p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));

54、</p><p>  OnRButtonUp(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  MineNum--;</p><p>  IsChange=1;</p><p><b>  }</b&g

55、t;</p><p>  t=LandMine.GetRight(LandMine.GetTop(i));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL) </p><p><b>  {</b></p><

56、p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnRButtonUp(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p>

57、;<p>  MineNum--;</p><p>  IsChange=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  t=LandMine.GetRight(i);</p><p>  if (t&g

58、t;=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {</b></p><p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)

59、); </p><p>  OnRButtonUp(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  MineNum--;</p><p>  IsChange=1;</p><p><b>  }</

60、b></p><p>  t=LandMine.GetBot(i);</p><p><b>  if (t>=0)</b></p><p><b>  {</b></p><p>  if (LandMine.m_aLandMine[t]->m_nStatus==MS_NORMA

61、L)</p><p><b>  {</b></p><p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnRButtonUp(2,CPoint(LandMine.m_aLand

62、Mine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  MineNum--;</p><p>  IsChange=1;</p><p><b>  }</b></p><p>  t=LandMine.GetLeft(LandMine.GetBot(

63、i));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {</b></p><p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX

64、,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnRButtonUp(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  MineNum--;</p><p>  IsChange=1;<

65、/p><p><b>  }</b></p><p>  t=LandMine.GetRight(LandMine.GetBot(i));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL) </p><p>&

66、lt;b>  {</b></p><p>  OnRButtonDown(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  OnRButtonUp(2,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine

67、.m_aLandMine[t]->m_nY));</p><p>  MineNum--;</p><p>  IsChange=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b&

68、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //第二種情況</b></p><p>  for (j=0;j<AllItem;j++) //狀態(tài)MS_NORMAL,MS_OPEN,MS_FLAG,MS

69、_QUEST,MS_EXPLODE</p><p><b>  {</b></p><p>  Num1=0; //每次在累加的時(shí)候千萬(wàn)別忘記初始化</p><p>  if (LandMine.m_aLandMine[j]->m_nStatus==MS_OPEN && LandMine.m_aLandMine[j]-&

70、gt;m_nMineNum>0) //對(duì)于打開并顯示數(shù)字的按鈕來(lái)說(shuō)</p><p><b>  {</b></p><p>  t=LandMine.GetLeft(j);//4鄰域</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_FL

71、AG)</p><p><b>  Num1++;</b></p><p>  t=LandMine.GetTop(j);</p><p><b>  if (t>=0)</b></p><p><b>  {</b></p><p>  if (

72、LandMine.m_aLandMine[t]->m_nStatus==MS_FLAG)</p><p><b>  Num1++;</b></p><p>  t=LandMine.GetLeft(LandMine.GetTop(j));</p><p>  if (t>=0 && LandMine.m_aLand

73、Mine[t]->m_nStatus==MS_FLAG) </p><p><b>  Num1++;</b></p><p>  t=LandMine.GetRight(LandMine.GetTop(j));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_

74、nStatus==MS_FLAG) </p><p><b>  Num1++;</b></p><p><b>  }</b></p><p>  t=LandMine.GetRight(j);</p><p>  if (t>=0 && LandMine.m_aLandMi

75、ne[t]->m_nStatus==MS_FLAG) </p><p><b>  Num1++;</b></p><p>  t=LandMine.GetBot(j);</p><p><b>  if (t>=0)</b></p><p><b>  {</b>

76、</p><p>  if (LandMine.m_aLandMine[t]->m_nStatus==MS_FLAG)</p><p><b>  Num1++;</b></p><p>  t=LandMine.GetLeft(LandMine.GetBot(j));</p><p>  if (t>=0

77、&& LandMine.m_aLandMine[t]->m_nStatus==MS_FLAG)</p><p><b>  Num1++;</b></p><p>  t=LandMine.GetRight(LandMine.GetBot(j));</p><p>  if (t>=0 && Land

78、Mine.m_aLandMine[t]->m_nStatus==MS_FLAG)</p><p><b>  Num1++;</b></p><p><b>  }</b></p><p>  if (Num1>0 && Num1==LandMine.m_aLandMine[j]->m_n

79、MineNum)</p><p><b>  {</b></p><p>  t=LandMine.GetLeft(j);//4鄰域</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL) </p><p>&l

80、t;b>  {</b></p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine

81、.m_aLandMine[t]->m_nY));</p><p>  IsChange=1;</p><p><b>  }</b></p><p>  t=LandMine.GetTop(j);</p><p><b>  if (t>=0)</b></p><p&

82、gt;<b>  {</b></p><p>  if (LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {</b></p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[t]->m_

83、nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  IsChange=1;</p><p><b>  }&l

84、t;/b></p><p>  t=LandMine.GetLeft(LandMine.GetTop(j));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {</b></p>

85、<p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</

86、p><p>  IsChange=1;</p><p><b>  }</b></p><p>  t=LandMine.GetRight(LandMine.GetTop(j));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==

87、MS_NORMAL) </p><p><b>  {</b></p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMin

88、e.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  IsChange=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  t=LandMine.GetRi

89、ght(j);</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {</b></p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[t]->m

90、_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  IsChange=1;</p><p><b>  }&

91、lt;/b></p><p>  t=LandMine.GetBot(j);</p><p><b>  if (t>=0)</b></p><p><b>  {</b></p><p>  if (LandMine.m_aLandMine[t]->m_nStatus==MS_N

92、ORMAL)</p><p><b>  {</b></p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMine.m_a

93、LandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  IsChange=1;</p><p><b>  }</b></p><p>  t=LandMine.GetLeft(LandMine.GetBot(j));</p><p>  if

94、 (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL)</p><p><b>  {</b></p><p>  OnLButtonDown(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->

95、m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  IsChange=1;</p><p><b>  }</b></p><p>  

96、t=LandMine.GetRight(LandMine.GetBot(j));</p><p>  if (t>=0 && LandMine.m_aLandMine[t]->m_nStatus==MS_NORMAL) </p><p><b>  {</b></p><p>  OnLButtonDown(1,CP

97、oint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY)); </p><p>  OnLButtonUp(1,CPoint(LandMine.m_aLandMine[t]->m_nX,LandMine.m_aLandMine[t]->m_nY));</p><p>  IsChange=1;

98、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></

99、p><p>  }while (IsChange);</p><p>  CTSDlg dlg;</p><p>  if (MineNum!=0 && LandMine.m_aLandMine[0]->m_nStatus!=MS_EXPLODE)</p><p>  dlg.DoModal();</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論