掃雷
我以前分享的小項目和小遊戲,電影購票、坦克大戰、捕魚達人、貪吃蛇等,雖然已是耳熟能詳人盡皆知的項目和遊戲,可是保不齊真的有人沒接觸過。
今天分享的這個項目,我不相信沒人接觸過(僅限80後-00後)。掃雷,這幾乎全部電腦都有的一款超級小遊戲,在全國各地的微機課上飽受歡迎,玩法緊張刺激、老小皆宜,並且還益智。今天便分享用java怎麼實現這一款神做。(文末附帶源碼素材獲取方式)
遊戲介紹:
掃雷就是要把全部非地雷的格子揭開即勝利;踩到地雷格子就算失敗。
遊戲主區域由不少個方格組成。使用鼠標左鍵隨機點擊一個方格,方格即被打開並顯示出方格中的數字;方格中數字則表示其周圍的8個方格隱藏了幾顆雷;若是點開的格子爲空白格,即其周圍有0顆雷,則其周圍格子自動打開;若是其周圍還有空白格,則會引起連鎖反應;在你認爲有雷的格子上,點擊右鍵便可標記雷;若是一個已打開格子周圍全部的雷已經正確標出,則能夠在此格上同時點擊鼠標左右鍵以打開其周圍剩餘的無雷格。
1表明1的上下左右及斜角合計有一顆雷,依次輪推,2則有2顆,3則有3顆..
在確實是炸彈的方格上點了旗子,就安全了,不是炸彈的被點了旗子,後面會被炸死的..問號就先不肯定這裏有沒有炸彈,不會存在點錯了被炸死的情況..
有個小竅門,在數字旁同時點左鍵和右鍵能夠排雷..
第一下點的必定不是雷, 左鍵點開,右鍵用旗子標記雷,同時左右鍵點數字能夠判斷周圍的雷是否已經所有標出..
每一個數字表明 這個數字周圍九個格里,有幾顆雷!好比,1,周圍九個格里只有一顆雷,2 周圍九個格里就有兩顆雷,以此類推 ..經過單擊便可挖開方塊。若是挖開的是地雷,則您輸掉遊戲..若是方塊上出現數字,則表示在其周圍的八個方塊中共有多少顆地雷..要標記您認爲可能有地雷的方塊,請右鍵單擊它..
遊戲區包括雷區、地雷計數器和計時器..數字就是這個方塊周圍的8個方塊裏有的雷的數量,問號是本身弄上去的,能夠的地方能夠弄個問號,旗子就是肯定那裏有雷了..
代碼介紹:
主要運用java語言來完成。Java語言是一種跨平臺,適合於分佈式計算環境的面向對象編程語言,用Java寫的應用程序不用修改就可在不一樣的軟硬件平臺上運行。
一、設計整個遊戲的結構,通常採用MVC做爲整個遊戲的結構,結構清晰又容易理解。
二、通常來講,作這些遊戲的時候,咱們先從底層的model開始作起。在這裏,model部分就是由兩張二維數組表組成,其中一張是mine,他上面放的就是一些最底層的數據,也就是說雷得分佈狀況。另一張表是界面表chess,就是記錄一些顯示給用戶的數據。
三、而後要作的是對兩張表的初始化,這一步很是重要,對於第一張表mine的的初始化的方法爲先隨機n個不重複的雷,分佈到mine表中,而後,對雷周圍的格子進行賦值。這裏我用到方法爲:遍歷全部的雷,將雷周圍的格子加一,這樣就能達到賦數值這個工做了。其中,這裏有一個難點,就是如何斷定雷周圍的八個格子,其實方法不少,可是大多代碼繁瑣,或者處理邊界困難。這裏我用到的方法是,計算兩個格子之間的距離,若是與雷的距離爲1或者根號2的話,就能肯定該格子在雷的周圍。而後是對chess進行初始化,chess就是界面表,也就是說,這裏的數據是直接顯示給用戶看的。固然,初始化部分就是直接將賦值爲板,就是等待去掃雷的狀態。
四、 而後就是掃雷部分,就是點擊一個格子,利用jlabel的觸發器將格子座標傳送到controller中去,controller中根據mine表判斷點擊的是什麼,分三種狀況,若是是雷,那就將底層的全部數據都賦到chess中,而後gameover。若是是數字,那就直接把數字賦值到chess中去。若是是0,那就很是麻煩了,這也是這個遊戲中的一個難點,玩過掃雷的同窗應該都知道,點擊0時,會散開周圍全部的0.我這邊的解決方法是,將點到的0的座標加到list裏面去,在遍歷這個list,取出裏面的座標,查找他周圍的8個格子,若是是0,且座標不與list中的中的座標重複,就將第二次查找到的座標放到list裏面,而後取list的下一個值,點擊這個點,而後就是循環上面的語句。
5 、遊戲中的另外一個難點是,在遊戲過程當中,左右鍵同時點擊數字,會有一個提示,這裏的作法是若是若是是數字的格子,監聽到左右鍵同時點擊數字事件,查找這個格子周圍的8個格子的紅旗數,若是周圍的紅旗數正好是格子上的數字,那麼就將除紅旗以外的全部內容都顯示出來。
素材展現:
須要遊戲源碼和素材練手的小夥伴能夠私信我領取!
若是喜歡這樣文章的能夠關注我,我會持續更新,大家的關注是我更新的動力!
祝關注個人人都:身體健康,財源廣進,福如東海,壽比南山,早生貴子,從不掉髮!java