我用Python做了一個(gè)Windows掃雷游戲,附帶源碼下載
Windows XP 上的掃雷是無數(shù)80/90后的集體回憶,今天我們就用 Python 來制作一個(gè)高仿版的掃雷游戲。

原諒我手殘,掃雷基本就沒贏過,測(cè)試的時(shí)候我是偷偷的把雷的數(shù)量從99改到50才贏了。。。
下面講一下我的實(shí)現(xiàn)邏輯。
首先,如何表示雷和非雷,一開始想的是,建立一個(gè)二維數(shù)組表示整個(gè)區(qū)域,0表示非地雷,1表示地雷。后來一想不對(duì),還有標(biāo)記為地雷,標(biāo)記為問號(hào),還有表示周邊雷數(shù)的數(shù)字,好多狀態(tài),干脆就做個(gè)類吧:

布雷就很簡單了,隨機(jī)取99個(gè)數(shù),從上往下順序排就是了:

我們點(diǎn)擊一個(gè)格子的時(shí)候,只要根據(jù)點(diǎn)擊的坐標(biāo),找到對(duì)應(yīng)的 Mine,看它的值是多少,就知道有沒有踩中雷了。
如果沒踩中雷的話,要計(jì)算周邊8個(gè)位置中有幾個(gè)雷,以便顯示對(duì)應(yīng)的數(shù)字。
如果周邊有雷,那么顯示數(shù)字,這個(gè)簡單,可是如果周邊沒有雷,那就要顯示一片區(qū)域,直到有雷出現(xiàn),如下圖,我只點(diǎn)了當(dāng)中一下,就出現(xiàn)了那么大一片區(qū)域

這個(gè)計(jì)算其實(shí)也容易,只要用遞歸就可以了,如果計(jì)算出周圍的雷數(shù)為0,則遞歸計(jì)算周邊8個(gè)位置的四周雷數(shù),直到雷數(shù)不為0。

接下來還有一個(gè)麻煩的地方,我們經(jīng)常鼠標(biāo)左右鍵同時(shí)按下,如果雷被全部標(biāo)記,則會(huì)一下子打開周圍所有的格子,如果其中有標(biāo)記錯(cuò)的,那么不好意思,GAME OVER。
如果沒有全標(biāo)記完,會(huì)有一個(gè)效果顯示周圍一圈未被打開和標(biāo)記的格子

掃雷的主要邏輯就這么多,剩下來的就是一些雜七雜八的事件了。當(dāng)然,這些雜七雜八的事件也還是夠你折騰一番的。




























