找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5042|回復(fù): 0
收起左側(cè)

掃雷AI核心代碼(不讀內(nèi)存完全擬人按數(shù)字邏輯去解)

[復(fù)制鏈接]
ID:72008 發(fā)表于 2015-1-11 19:53 | 顯示全部樓層 |閱讀模式
這是掃雷算法的后臺(tái)數(shù)據(jù)處理,前臺(tái)的模擬按鍵和讀棋盤信息由按鍵精靈完成
解決了一個(gè)大家寫com組件時(shí)不能以數(shù)組做參數(shù)或返回值的難題
至于怎么處理的方法全在源碼中就不解釋了





  1. /*********************************************************************
  2. 歡迎您為按鍵精靈制作插件!
  3. 這是按鍵精靈的插件模板 091026版
  4. 請(qǐng)編譯Release版的插件使用,Debug版的插件會(huì)導(dǎo)致按鍵精靈出現(xiàn)異常錯(cuò)誤
  5.    如果有其他問題,歡迎通過以下方式和我們?nèi)〉寐?lián)系
  6. Email: hi@vrbrothers.com
  7. 論壇: bbs.ajjl.cn

  8. 插件模板更新記錄:
  9. 091026
  10. 解決由于MFC的功能不完善導(dǎo)致所有的插件函數(shù)都在主線程中執(zhí)行的問題。
  11. 這個(gè)問題會(huì)導(dǎo)致插件效率低下,而且可能互相阻塞,甚至阻塞主線程。
  12. *********************************************************************/
  13. #include "stdafx.h"
  14. #include "CQMPlugin.h"
  15. #include "QMLibraryStub.h"
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21. BEGIN_MESSAGE_MAP(CQMPlugin, CCmdTarget)
  22. //{{AFX_MSG_MAP(CQMPlugin)
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. #ifdef _DEBUG
  26. #pragma comment(lib,"CommonLibD.lib")
  27. #else
  28. #pragma comment(lib,"CommonLib.lib")
  29. #endif
  30. BEGIN_DISPATCH_MAP(CQMPlugin, CCmdTarget)
  31. DISP_FUNCTION(CQMPlugin, "Get_Plugin_Description", GetPluginDescription, VT_BSTR, VTS_BSTR)
  32. DISP_FUNCTION(CQMPlugin, "Get_Plugin_Interpret_Template", GetPluginInterpretTemplate, VT_BSTR, VTS_BSTR)
  33. //{{AFX_DISPATCH_MAP(CQMPlugin)
  34. DISP_FUNCTION(CQMPlugin, "tishi", tishi, VT_EMPTY, VTS_BSTR)
  35. DISP_FUNCTION(CQMPlugin, "leigeset", leigeset, VT_EMPTY, VTS_I4 VTS_I4 VTS_I4)
  36. DISP_FUNCTION(CQMPlugin, "leigeget", leigeget, VT_I4, VTS_I4 VTS_I4)
  37. DISP_FUNCTION(CQMPlugin, "leizhengjs", leizhengjs, VT_EMPTY, VTS_NONE)
  38. //}}AFX_DISPATCH_MAP
  39. END_DISPATCH_MAP()
  40. IMPLEMENT_OLECREATE(CQMPlugin, "QMPlugin.saoleiDLL", 0x1117E497, 0x126E, 0x4FC8, 0xB4, 0x30, 0x1C, 0x61, 0x43, 0x48, 0x4A, 0xA9)
  41. BOOL g_bEnablePluginValidate = TRUE;
  42. /*********************************************************************
  43. 按鍵精靈的每個(gè)插件可以支持若干條命令。
  44. 如果您需要寫一條自己的命令,需要遵循以下步驟:
  45. 1. 打開文件CQMPlugin.cpp,就是您現(xiàn)在看到的這個(gè)文件
  46. 2. 在Visual C++ 6.0的菜單中選擇 View->ClassWizard
  47. 3. 在彈出的對(duì)話框中選擇Automation面板,按Add Method按鈕
  48. 4. 依次填寫您的插件函數(shù)的名字、返回類型和參數(shù)類型
  49.     需要注意的是,如果返回值是字符串類型,請(qǐng)選擇BSTR
  50.     如果參數(shù)是字符串類型,請(qǐng)選擇LPCTSTR
  51.     如果需要傳地址的參數(shù)(可用于返回多個(gè)值),參數(shù)類型請(qǐng)選擇VARIANT*,如下面的GetScreenResolution插件函數(shù)所示
  52. 5. 按OK按鈕,您會(huì)看到CQMPlugin.cpp有了一個(gè)空白的函數(shù),您只需要填寫函數(shù)功能即可
  53. 6. 您也可以在Automation面板中選擇刪除某個(gè)已有的函數(shù),并同時(shí)在下面的程序中刪除對(duì)應(yīng)的函數(shù)體
  54. 7. 在下面的m_DescriptionList表格中填寫您的插件說(shuō)明和函數(shù)說(shuō)明
  55. 8. 編譯形成DLL文件,把DLL文件放在按鍵精靈的Plugin目錄下
  56. 9. 打開按鍵精靈,進(jìn)入編輯腳本界面,打開“插件命令”面板,編寫腳本測(cè)試你的插件!
  57. *********************************************************************/
  58. /*********************************************************************
  59. * 名稱:m_DescriptionList
  60. * 你可以把它看成一個(gè)表格,表格中的每一行代表了一條插件命令。
  61. * 每行第一個(gè)字符串是插件命令的名字(如果為空,則代表整個(gè)插件);第二個(gè)字符串是這條插件命令的解釋;
  62. * 第三個(gè)字符串是插件命令的顯示模板信息,其中的$1 $2 ... 等內(nèi)容在顯示時(shí)將用第一個(gè)參數(shù)、第二個(gè)參數(shù)、... 代替
  63. * 當(dāng)你需要新增一條插件命令的時(shí)候,就需要在表格里面加一行。
  64. *********************************************************************/
  65. CQMPlugin::DESCRIPTION_LIST CQMPlugin::m_DescriptionList[] =
  66. {
  67. {"","掃雷算法",""},
  68. {"tishi","彈窗提示","提示內(nèi)容"},
  69. {"leigeset","設(shè)置雷格狀態(tài)","雷格Y坐標(biāo)雷格X坐標(biāo)雷格狀態(tài)值"},
  70. {"leigeget","返回雷格狀態(tài)","雷格Y坐標(biāo)雷格X坐標(biāo)"},
  71. {"leizhengjs","計(jì)算雷陣信息返回能翻開的雷格坐標(biāo)",""},
  72. };
  73. //這行您不需要修改
  74. const int CQMPlugin::m_iDescriptionListSize = sizeof(CQMPlugin::m_DescriptionList) / sizeof(CQMPlugin::DESCRIPTION_LIST);
  75. /*********************************************************************
  76. * 下面是各個(gè)插件命令的處理函數(shù),函數(shù)名和插件名是對(duì)應(yīng)的。
  77. * 如果要增加一個(gè)插件命令,通常Visual C++會(huì)幫您寫一個(gè)空的處理函數(shù)
  78. * 如果要?jiǎng)h除一個(gè)插件命令,別忘了把對(duì)應(yīng)的處理函數(shù)也一起刪掉。
  79. *********************************************************************/
  80. /*********************************************************************
  81. * 下面是公共處理函數(shù)。
  82. * OnLoad 函數(shù)會(huì)在插件被加載時(shí)調(diào)用,返回值通常為TRUE。如果返回FALSE,表示插件拒絕被加載
  83. * OnLoad 函數(shù)的第一個(gè)參數(shù)表示加載動(dòng)態(tài)鏈接庫(kù)的Instance Handle,第二個(gè)參數(shù)暫時(shí)保留
  84. * OnExit 函數(shù)會(huì)在插件被卸載是調(diào)用,沒有返回值
  85. *********************************************************************/
  86. BOOL OnLoad(HMODULE hModule, int iReserved)
  87. {
  88. return TRUE;
  89. }
  90. void OnExit()
  91. {
  92. return;
  93. }
  94. //////////////////////////////////////////////////////////////////////
  95. //                      掃雷算法插件
  96. //                                   BY:DEBUG   2014/9/12
  97. //////////////////////////////////////////////////////////////////////
  98. void CQMPlugin::tishi(LPCTSTR str)
  99. {
  100. //提供一個(gè)彈窗口提示方法
  101. AfxMessageBox(str);
  102. }
  103. //////////////////////////////////////////////////////////////////////
  104. long leizheng[16][30]; //保存雷陣輸入信息的全局變量
  105. long leizhengout[16][30];//保存計(jì)算后雷陣的輸出信息
  106. /////////////////////////////////////////////////////////////////////
  107. void CQMPlugin::leigeset(long Y, long X, long zhi)
  108. {
  109. // 提供設(shè)置雷格信息的方法
  110. leizheng[Y][X]=zhi;
  111. }
  112. //////////////////////////////////////////////////////////////////////
  113. long CQMPlugin::leigeget(long Y, long X)
  114. {
  115. // 提供返回計(jì)算后的雷格信息的方法    88表示能翻開  44表示確定為雷格提示標(biāo)記 0不做任何操作
  116. // 必須先調(diào)用計(jì)算雷陣方法后再掉用這個(gè)方法
  117. return leizhengout[Y][X];
  118. }
  119. //////////////////////////////////////////////////////////////////////
  120. void CQMPlugin::leizhengjs()
  121. {
  122. // 提供一個(gè)雷陣信息計(jì)算的方法,在對(duì)象獲取玩所有雷格信息后才能調(diào)用此方法
  123.     long i;
  124. long j;
  125. for(i=0;i<16;i++)
  126.   for(j=0;j<30;j++)
  127.   {
  128.    //清零輸出數(shù)組
  129.    leizhengout[i][j]=0;
  130.   }
  131. //開始判定翻開與否
  132.     for(i=0;i<16;i++)
  133.   for(j=0;j<30;j++)
  134.   {
  135.             if(i>=1&&j>=1&&i<=14&&j<=28)
  136.    {
  137.     //不是邊界上的4行
  138.     long leibiao=0;//周邊已經(jīng)確定的地雷個(gè)數(shù)
  139.     //統(tǒng)計(jì)九宮格內(nèi)地雷的個(gè)數(shù)
  140.     if(leizheng[i-1][j-1]==9) leibiao++;//左上
  141.                 if(leizheng[i-1][j]==9) leibiao++;//上
  142.     if(leizheng[i-1][j+1]==9) leibiao++;//右上
  143.                 if(leizheng[i][j-1]==9) leibiao++;//左
  144.                 if(leizheng[i][j+1]==9) leibiao++;//右
  145.                 if(leizheng[i+1][j-1]==9) leibiao++;//左下
  146.                 if(leizheng[i+1][j]==9) leibiao++;//下
  147.                 if(leizheng[i+1][j+1]==9) leibiao++;//左下
  148.     long hei=0;//周邊未翻開的雷格數(shù)
  149.     //統(tǒng)計(jì)九宮格內(nèi)未翻開的雷格數(shù)
  150.                 if(leizheng[i-1][j-1]==10) hei++;//左上
  151.                 if(leizheng[i-1][j]==10) hei++;//上
  152.     if(leizheng[i-1][j+1]==10) hei++;//右上
  153.                 if(leizheng[i][j-1]==10) hei++;//左
  154.                 if(leizheng[i][j+1]==10) hei++;//右
  155.                 if(leizheng[i+1][j-1]==10) hei++;//左下
  156.                 if(leizheng[i+1][j]==10) hei++;//下
  157.                 if(leizheng[i+1][j+1]==10) hei++;//左下
  158.        ////////////////////////////////////////////////
  159.     if(leizheng[i][j]==1&&hei==1)
  160.     {
  161.      //周圍只有一個(gè)雷且周圍只剩一個(gè)未翻開的雷格確定一個(gè)地雷并在輸出數(shù)組中做標(biāo)記
  162.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=44;//左上
  163.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=44;//上
  164.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=44;//右上
  165.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=44;//左
  166.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=44;//右
  167.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=44;//左下
  168.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=44;//下
  169.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=44;//左下
  170.     }
  171.                 if(leizheng[i][j]==1&&leibiao==1)
  172.     {
  173.                  //周圍只有一個(gè)雷且周圍已經(jīng)標(biāo)記了一個(gè)地雷就把周圍其它未翻開的雷格翻開
  174.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=88;//左上
  175.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=88;//上
  176.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=88;//右上
  177.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=88;//左
  178.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=88;//右
  179.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=88;//左下
  180.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=88;//下
  181.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=88;//左下
  182.     }
  183.                 ////////////////////////////////////////////////////////////////
  184.                 if((leizheng[i][j]==2&&hei==2&&leibiao==0)||(leizheng[i][j]==(leibiao+hei)))
  185.     {
  186.      //周圍只有2個(gè)雷且周圍只剩2個(gè)未翻開的雷格,或者周圍未翻開和已經(jīng)標(biāo)記為地雷的和等于雷格狀態(tài)值則確定一組地雷并在輸出數(shù)組中做標(biāo)記
  187.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=44;//左上
  188.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=44;//上
  189.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=44;//右上
  190.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=44;//左
  191.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=44;//右
  192.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=44;//左下
  193.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=44;//下
  194.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=44;//左下
  195.     }
  196.                 if(leizheng[i][j]==2&&leibiao==2)
  197.     {
  198.                  //周圍只有2個(gè)雷且周圍已經(jīng)標(biāo)記了2個(gè)地雷就把周圍其它未翻開的雷格翻開
  199.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=88;//左上
  200.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=88;//上
  201.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=88;//右上
  202.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=88;//左
  203.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=88;//右
  204.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=88;//左下
  205.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=88;//下
  206.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=88;//左下
  207.     }
  208.     ////////////////////////////////////////////////////////////////////
  209.                 if((leizheng[i][j]==3&&hei==3&&leibiao==0)||(leizheng[i][j]==(leibiao+hei)))
  210.     {
  211.      //周圍只有3個(gè)雷且周圍只剩3個(gè)未翻開的雷格,或者周圍未翻開和已經(jīng)標(biāo)記為地雷的和等于雷格狀態(tài)值則確定一組地雷并在輸出數(shù)組中做標(biāo)記
  212.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=44;//左上
  213.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=44;//上
  214.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=44;//右上
  215.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=44;//左
  216.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=44;//右
  217.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=44;//左下
  218.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=44;//下
  219.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=44;//左下
  220.     }
  221.                 if(leizheng[i][j]==3&&leibiao==3)
  222.     {
  223.                  //周圍只有3個(gè)雷且周圍已經(jīng)標(biāo)記了3個(gè)地雷就把周圍其它未翻開的雷格翻開
  224.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=88;//左上
  225.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=88;//上
  226.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=88;//右上
  227.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=88;//左
  228.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=88;//右
  229.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=88;//左下
  230.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=88;//下
  231.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=88;//左下
  232.     }
  233.                 ////////////////////////////////////////////////////////////////////
  234.                 if((leizheng[i][j]==4&&hei==4&&leibiao==0)||(leizheng[i][j]==(leibiao+hei)))
  235.     {
  236.      //周圍只有4個(gè)雷且周圍只剩4個(gè)未翻開的雷格,或者周圍未翻開和已經(jīng)標(biāo)記為地雷的和等于雷格狀態(tài)值則確定一組地雷并在輸出數(shù)組中做標(biāo)記
  237.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=44;//左上
  238.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=44;//上
  239.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=44;//右上
  240.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=44;//左
  241.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=44;//右
  242.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=44;//左下
  243.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=44;//下
  244.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=44;//左下
  245.     }
  246.                 if(leizheng[i][j]==4&&leibiao==4)
  247.     {
  248.                  //周圍只有4個(gè)雷且周圍已經(jīng)標(biāo)記了4個(gè)地雷就把周圍其它未翻開的雷格翻開
  249.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=88;//左上
  250.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=88;//上
  251.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=88;//右上
  252.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=88;//左
  253.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=88;//右
  254.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=88;//左下
  255.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=88;//下
  256.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=88;//左下
  257.     }
  258.                 ////////////////////////////////////////////////////////////////////
  259.                 if((leizheng[i][j]==5&&hei==5&&leibiao==0)||(leizheng[i][j]==(leibiao+hei)))
  260.     {
  261.      //周圍只有5個(gè)雷且周圍只剩5個(gè)未翻開的雷格,或者周圍未翻開和已經(jīng)標(biāo)記為地雷的和等于雷格狀態(tài)值則確定一組地雷并在輸出數(shù)組中做標(biāo)記
  262.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=44;//左上
  263.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=44;//上
  264.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=44;//右上
  265.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=44;//左
  266.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=44;//右
  267.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=44;//左下
  268.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=44;//下
  269.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=44;//左下
  270.     }
  271.                 if(leizheng[i][j]==5&&leibiao==5)
  272.     {
  273.                  //周圍只有5個(gè)雷且周圍已經(jīng)標(biāo)記了5個(gè)地雷就把周圍其它未翻開的雷格翻開
  274.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=88;//左上
  275.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=88;//上
  276.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=88;//右上
  277.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=88;//左
  278.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=88;//右
  279.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=88;//左下
  280.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=88;//下
  281.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=88;//左下
  282.     }
  283.                 ////////////////////////////////////////////////////////////////////
  284.                 if((leizheng[i][j]==6&&hei==6&&leibiao==0)||(leizheng[i][j]==(leibiao+hei)))
  285.     {
  286.      //周圍只有6個(gè)雷且周圍只剩6個(gè)未翻開的雷格,或者周圍未翻開和已經(jīng)標(biāo)記為地雷的和等于雷格狀態(tài)值則確定一組地雷并在輸出數(shù)組中做標(biāo)記
  287.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=44;//左上
  288.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=44;//上
  289.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=44;//右上
  290.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=44;//左
  291.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=44;//右
  292.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=44;//左下
  293.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=44;//下
  294.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=44;//左下
  295.     }
  296.                 if(leizheng[i][j]==6&&leibiao==6)
  297.     {
  298.                  //周圍只有6個(gè)雷且周圍已經(jīng)標(biāo)記了6個(gè)地雷就把周圍其它未翻開的雷格翻開
  299.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=88;//左上
  300.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=88;//上
  301.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=88;//右上
  302.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=88;//左
  303.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=88;//右
  304.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=88;//左下
  305.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=88;//下
  306.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=88;//左下
  307.     }
  308.                 ////////////////////////////////////////////////////////////////////
  309.                 if((leizheng[i][j]==7&&hei==7&&leibiao==0)||(leizheng[i][j]==(leibiao+hei)))
  310.     {
  311.      //周圍只有7個(gè)雷且周圍只剩7個(gè)未翻開的雷格,或者周圍未翻開和已經(jīng)標(biāo)記為地雷的和等于雷格狀態(tài)值則確定一組地雷并在輸出數(shù)組中做標(biāo)記
  312.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=44;//左上
  313.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=44;//上
  314.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=44;//右上
  315.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=44;//左
  316.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=44;//右
  317.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=44;//左下
  318.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=44;//下
  319.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=44;//左下
  320.     }
  321.                 if(leizheng[i][j]==7&&leibiao==7)
  322.     {
  323.                  //周圍只有7個(gè)雷且周圍已經(jīng)標(biāo)記了7個(gè)地雷就把周圍其它未翻開的雷格翻開
  324.                     if(leizheng[i-1][j-1]==10) leizhengout[i-1][j-1]=88;//左上
  325.                     if(leizheng[i-1][j]==10) leizhengout[i-1][j]=88;//上
  326.           if(leizheng[i-1][j+1]==10) leizhengout[i-1][j+1]=88;//右上
  327.                     if(leizheng[i][j-1]==10) leizhengout[i][j-1]=88;//左
  328.                     if(leizheng[i][j+1]==10) leizhengout[i][j+1]=88;//右
  329.                     if(leizheng[i+1][j-1]==10) leizhengout[i+1][j-1]=88;//左下
  330.                     if(leizheng[i+1][j]==10) leizhengout[i+1][j]=88;//下
  331.                     if(leizheng[i+1][j+1]==10) leizhengout[i+1][j+1]=88;//左下
  332.     }
  333.    }
  334.   }
  335. }
復(fù)制代碼



相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表