掃雷
我之前分享的小項目和小游戲,電影購票、坦克大戰(zhàn)、捕魚達(dá)人、貪吃蛇等,雖然已經(jīng)是耳熟能詳人盡皆知的項目和游戲,但是保不齊真的有人沒接觸過。
今天分享的這個項目,我不相信沒人接觸過(僅限80后-00后)。掃雷,這幾乎所有電腦都有的一款超級小游戲,在全國各地的微機課上飽受歡迎,玩法緊張刺激、老少皆宜,而且還益智。今天便分享用java怎么實現(xiàn)這一款神作。(文末附帶源碼素材獲取方式)
游戲介紹:
掃雷就是要把所有非地雷的格子揭開即勝利;踩到地雷格子就算失敗。
游戲主區(qū)域由很多個方格組成。使用鼠標(biāo)左鍵隨機點擊一個方格,方格即被打開并顯示出方格中的數(shù)字;方格中數(shù)字則表示其周圍的8個方格隱藏了幾顆雷;如果點開的格子為空白格,即其周圍有0顆雷,則其周圍格子自動打開;如果其周圍還有空白格,則會引發(fā)連鎖反應(yīng);在你認(rèn)為有雷的格子上,點擊右鍵即可標(biāo)記雷;如果一個已打開格子周圍所有的雷已經(jīng)正確標(biāo)出,則可以在此格上同時點擊鼠標(biāo)左右鍵以打開其周圍剩余的無雷格。
1代表1的上下左右及斜角合計有一顆雷,依次輪推,2則有2顆,3則有3顆..
在確實是炸彈的方格上點了旗子,就安全了,不是炸彈的被點了旗子,后面會被炸死的..問號就先不確定這里有沒有炸彈,不會存在點錯了被炸死的狀況..
有個小竅門,在數(shù)字旁同時點左鍵和右鍵可以排雷..
第一下點的一定不是雷, 左鍵點開,右鍵用旗子標(biāo)記雷,同時左右鍵點數(shù)字可以判斷周圍的雷是否已經(jīng)全部標(biāo)出..
每個數(shù)字代表 這個數(shù)字周圍九個格里,有幾顆雷!比如,1,周圍九個格里只有一顆雷,2 周圍九個格里就有兩顆雷,以此類推 ..通過單擊即可挖開方塊。如果挖開的是地雷,則您輸?shù)粲螒?.如果方塊上出現(xiàn)數(shù)字,則表示在其周圍的八個方塊中共有多少顆地雷..要標(biāo)記您認(rèn)為可能有地雷的方塊,請右鍵單擊它..
游戲區(qū)包括雷區(qū)、地雷計數(shù)器和計時器..數(shù)字就是這個方塊周圍的8個方塊里有的雷的數(shù)量,問號是自己弄上去的,可以的地方可以弄個問號,旗子就是確定那里有雷了..
代碼介紹:
主要運用java語言來完成。Java語言是一種跨平臺,適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言,用Java寫的應(yīng)用程序不用修改就可在不同的軟硬件平臺上運行。
1、設(shè)計整個游戲的結(jié)構(gòu),一般采用MVC作為整個游戲的結(jié)構(gòu),結(jié)構(gòu)清晰又容易理解。
2、一般來說,做這些游戲的時候,我們先從底層的model開始做起。在這里,model部分就是由兩張二維數(shù)組表組成,其中一張是mine,他上面放的就是一些最底層的數(shù)據(jù),也就是說雷得分布情況。另外一張表是界面表chess,就是記錄一些顯示給用戶的數(shù)據(jù)。
3、然后要做的是對兩張表的初始化,這一步非常重要,對于第一張表mine的的初始化的方法為先隨機n個不重復(fù)的雷,分布到mine表中,然后,對雷周圍的格子進行賦值。這里我用到方法為:遍歷所有的雷,將雷周圍的格子加一,這樣就能達(dá)到賦數(shù)值這個工作了。其中,這里有一個難點,就是如何判定雷周圍的八個格子,其實方法很多,但是大多代碼繁瑣,或者處理邊界困難。這里我用到的方法是,計算兩個格子之間的距離,如果與雷的距離為1或者根號2的話,就能確定該格子在雷的周圍。然后是對chess進行初始化,chess就是界面表,也就是說,這里的數(shù)據(jù)是直接顯示給用戶看的。當(dāng)然,初始化部分就是直接將賦值為板,就是等待去掃雷的狀態(tài)。
4、 然后就是掃雷部分,就是點擊一個格子,利用jlabel的觸發(fā)器將格子坐標(biāo)傳送到controller中去,controller中根據(jù)mine表判斷點擊的是什么,分三種情況,如果是雷,那就將底層的所有數(shù)據(jù)都賦到chess中,然后gameover。如果是數(shù)字,那就直接把數(shù)字賦值到chess中去。如果是0,那就非常麻煩了,這也是這個游戲中的一個難點,玩過掃雷的同學(xué)應(yīng)該都知道,點擊0時,會散開周圍所有的0.我這邊的解決方法是,將點到的0的坐標(biāo)加到list里面去,在遍歷這個list,取出里面的坐標(biāo),查找他周圍的8個格子,如果是0,且坐標(biāo)不與list中的中的坐標(biāo)重復(fù),就將第二次查找到的坐標(biāo)放到list里面,然后取list的下一個值,點擊這個點,然后就是循環(huán)上面的語句。
5 、游戲中的另一個難點是,在游戲過程中,左右鍵同時點擊數(shù)字,會有一個提示,這里的做法是如果如果是數(shù)字的格子,監(jiān)聽到左右鍵同時點擊數(shù)字事件,查找這個格子周圍的8個格子的紅旗數(shù),如果周圍的紅旗數(shù)正好是格子上的數(shù)字,那么就將除紅旗之外的所有內(nèi)容都顯示出來。
素材展示:
需要游戲源碼和素材練手的小伙伴可以私信我領(lǐng)?。?br/>如果喜歡這樣文章的可以關(guān)注我,我會持續(xù)更新,你們的關(guān)注是我更新的動力!
祝關(guān)注我的人都:身體健康,財源廣進,福如東海,壽比南山,早生貴子,從不掉發(fā)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。