熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java掃雷算法

2013-11-23 18:38:45  來源: Java核心技術 

  建立一個雷區可以用一個一個的JButton按鈕放在棋盤狀的一個JFrame裡或者JDialog裡當然JButton太難看了可以的話可以監聽鼠標盤子上可以放上自己制作的幾張小圖片

  我們在雷區上隨機地放上雷可以用二維數組用MathRandom()隨即生成下標兩個在相應的數組裡布上雷

  注冊監聽

  點擊以後按下列的方式遍歷數組

  沒有雷且被點擊後就會慢慢的波及到類區如

              

   @ @ @ @ @ @ @ @ @ @

   @ @ @ & @ @ @ @ @ @

   @ @ @ @ @ @ $ @ @ @

   @ $ @ @ @ @ @ @ @ @

  假設點擊了[]位置應該變成

                                     

   @ @ @ @     ~     ~     ~        ~      ~

   @ @ @ &                       ~      ~

   @ @ @ @ @ @   $            ~       ~

   @ $ @ @ @ @     @        ~     ~

  在這裡我把上圖解釋一下

  【】   【】 【

  【】    【】 【

  點擊了【】位置以後由於以為基點向四周擴散一直到雷區的邊沿!由於都沒有雷哪麼就又以這個幾點向它們的四周擴散!以其中的任何一個為中心八個方向如果有雷的話就在這個地方標出它周圍的雷數來提醒玩家!

  如到了位置

  @() @() @()

  $()   @()   @()

  只有其 西南位置有一個雷哪麼【】位置標注以其為中心 其北西東北東南西北西南方向一共有個雷

  【】的八個方位只有其南方有一個雷哪麼第一次擴展到此位置的下一個不能再展了!總而言之

  @ @ @

  @ 【】@

  @ @ @

  以【】為中心找其周圍的雷數簡化一下就是不斷的畫正方形!可要小心哦!不要把數字標在地雷上了只是雷區的邊沿特別注意邊沿二字就是提醒玩家你現在處的位置朝八個方向走下一步有幾個地雷在等著你去踏!

  下面是網上的一個例子 以上是我的理解罷了!希望對你有幫助!

  如雷區

                      

                      

                      

                      

                      

  我要知道a[]周圍有幾個雷就只有去檢測

  a[]a[]a[]

  a[]           a[]

  a[]a[]a[]

  這個雷區是否放上了雷仔細觀察它們成在數學關系

  抽象出來就是a[ij]的雷的個數就是由

  a[ij]a[ij]a[ij+]

  a[ i j]    a[ i j+]

  a[i+j]a[i+j]a[i+j+]

  (如果超出邊界再加以判斷)

  這樣的個雷區決定的

  掃雷程序還會自動展開已確定沒有雷的雷區如果a[]周圍雷數為a[]已被標示為地雷那麼a[]a[]a[]a[]a[]a[]a[]將被展開一直波及到不可確定的雷區這也是實現的關鍵我們可以把數組的元素設定為一個類對象它們所屬的類設定這樣的一個事件在被展開時檢查周圍的雷數是否與周圍標示出來的雷數相等如果相等則展開周圍未標示的雷區這樣新的雷區展開又觸發這個事件就這樣遞歸下去一直蔓延到不可展開的雷區

  相信在了解以上兩個要點後把雷區這個類編寫完全(如添加是否有雷標記是否展開標記周圍雷數等雙擊左右單擊的鼠標事件等)實現掃雷程序應是十分單的一件事


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25519.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.