原谅我手残,扫雷基本就没赢过,测试的时候我是偷偷的把雷的数量从99改到50才赢了。。。
下面讲一下我的实现逻辑。
首先,如何表示雷和非雷,一开始想的是,建立一个二维数组表示整个区域,0表示非地雷,1表示地雷。后来一想不对,还有标记为地雷,标记为问号,还有表示周边雷数的数字,好多状态,干脆就做个类吧:
布雷就很简单了,随机取99个数,从上往下顺序排就是了:
我们点击一个格子的时候,只要根据点击的坐标,找到对应的 Mine,看它的值是多少,就知道有没有踩中雷了。
如果没踩中雷的话,要计算周边8个位置中有几个雷,以便显示对应的数字。
如果周边有雷,那么显示数字,这个简单,可是如果周边没有雷,那就要显示一片区域,直到有雷出现,如下图,我只点了当中一下,就出现了那么大一片区域
这个计算其实也容易,只要用递归就可以了,如果计算出周围的雷数为0,则递归计算周边8个位置的四周雷数,直到雷数不为0。
接下来还有一个麻烦的地方,我们经常鼠标左右键同时按下,如果雷被全部标记,则会一下子打开周围所有的格子,如果其中有标记错的,那么不好意思,GAME OVER。
如果没有全标记完,会有一个效果显示周围一圈未被打开和标记的格子
扫雷的主要逻辑就这么多,剩下来的就是一些杂七杂八的事件了。当然,这些杂七杂八的事件也还是够你折腾一番的。