程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 掃雷程序思想講解

掃雷程序思想講解

編輯:Delphi
    在我大二的時候就編寫了一個掃雷程序,現在也有很多
  源程序下載,我不知道他們的算法是怎麼樣的,但我想我的
  算法應是最清晰和簡單的。下面就來講解我的掃雷程序思想。
      首先我們在雷區上隨機地放上雷,沒有雷的地方被點擊
  後就會顯示一個數字表示它周圍有幾個雷,這是怎麼實現的
  呢?我們可以把整個雷區看成一個二維數組a[i,j],如雷區:
   
   11  12  13  14  15  16  17  18
   21  22  23  24  25  26  27  28
   31  32  33  34  35  36  37  38
   41  42  43  44  45  46  47  48
   51  52  53  54  55  56  57  58
   
  我要知道a[34]周圍有幾個雷,就只有去檢測
   a[23],a[24],a[25]
   a[33],       a[35]
   a[43],a[44],a[45]
  這8個雷區是否放上了雷,仔細觀察它們成在數學關系。
  抽象出來就是:a[i,j]的雷的個數就是由
   a[i-1,j-1],a[i-1,j],a[i-1,j+1]
   a[ i ,j-1],           a[ i ,j+1]
   a[i+1,j-1],a[i+1,j],a[i+1,j+1] 
  (如果超出邊界再加以判斷)
  這樣的8個雷區決定的。
  

      掃雷程序還會自動展開已確定沒有雷的雷區。如果
  a[3,4]周圍雷數為1,a[2,3]已被標示為地雷,那麼
  a[24],a[25],a[33],a[35],a[43],a[44],a[45]
  將被展開,一直波及到不可確定的雷區。這也是實現的
  關鍵。我們可以把數組的元素設定為一個類對象,它們
  所屬的類設定這樣的一個事件:在被展開時,檢查周圍
  的雷數是否與周圍標示出來的雷數相等,如果相等則展
  開周圍未標示的雷區。這樣新的雷區展開又觸發這個事
  件,就這樣遞歸下去,一直蔓延到不可展開的雷區。
      相信在了解以上兩個要點後,把雷區這個類編寫完全
  (如添加是否有雷標記,是否展開標記,周圍雷數等,雙
  擊,左右單擊的鼠標事件等),實現掃雷程序應是十分簡
  單的一件事。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved