Mineclearance
目的(Purpose)
With Java generic under Windows 7 bring minesweeping game
用Java仿制win7下自帶游戲掃雷
打開游戲(OpentheGame)
首先會看到如下界面:
游戲規(guī)則(The rules of the game)
(本游戲沒有原版的選擇游戲難度功能债朵。)掃雷就是要把所有非地雷的格子揭開從而獲得勝利后专,踩到地雷則游戲失敗。
游戲區(qū)域由81個方格組成圃郊,鼠標(biāo)左鍵隨機單擊一個方格甫男,方格即被打開并顯示出方格中的數(shù)字茸塞;方格中數(shù)字則表示其周圍的8個方格隱藏了幾顆雷;如果點開的格子顯示數(shù)字0查剖,即其周圍有0顆雷,則其周圍格子自動打開噪窘;如果其周圍還有0笋庄,則會引發(fā)連鎖反應(yīng);在你認(rèn)為有雷的格子上倔监,點擊右鍵即可標(biāo)記雷字直砂,再點擊一次右鍵可把雷字變成問號;如果一個已打開格子周圍所有的雷已經(jīng)正確標(biāo)出浩习,則可以在此格上點擊鼠標(biāo)左鍵兩次以打開其周圍剩余的無雷格静暂。這里需要注意,如果有不是雷的方格被標(biāo)記了雷 ……當(dāng)自動排雷過后谱秽,標(biāo)記被取消洽蛀,依然顯示出周圍雷數(shù)的數(shù)字,不會出任何問題(好吧疟赊,我承認(rèn)這是個BUG)郊供,1代表1的上下左右及斜角合計有一顆雷,依次輪推近哟,2則有2顆驮审,3則有3顆...最后,游戲勝利和失敗分別會有如下提示:
游戲勝利:
點擊確定會重新開始游戲,點擊取消則退出程序疯淫。
游戲失數乩础:
點擊確定重新開始游戲,退出請在重新開始后單擊紅叉熙掺。
界面設(shè)置
private Need[] needs = new Need[82]; public static int INIT_GAME_WIDTH = 333; public static int INIT_GAME_HEIGHT = 333;
直接設(shè)定81個小方格未斑,設(shè)定寬高都為333.
方法摘要
Random r = new Random(); Set<Integer> bigbingnumber = new HashSet<Integer>(); for(int i=0; i<10; i++) { int temp = r.nextInt(81); while(temp == 0 || bigbingnumber .contains(temp)) {// 不能為0并且不重復(fù) temp = r.nextInt(81); } bigbingnumber.add(temp); }
隨機產(chǎn)生十個1-81范圍內(nèi)不重復(fù)的數(shù)字。
if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2)
設(shè)定鼠標(biāo)左鍵雙擊排雷的方法适掰,在里面進行方法的判斷颂碧。
public Need(Need[] needs) { this.needs = needs; }
持所有小方塊的引用,方便進行操作类浪。
public void moved(Set<Need> set)
遞歸,set是用來裝已經(jīng)翻過的小方塊的,不然會死循環(huán),為什么用set,因為set是不重復(fù)的