扫雷程序思想讲解

王朝delphi·作者佚名  2006-01-08
宽屏版  字体: |||超大  

扫雷程序思想讲解

在我大二的时候就编写了一个扫雷程序,现在也有很多

源程序下载,我不知道他们的算法是怎么样的,但我想我的

算法应是最清晰和简单的。下面就来讲解我的扫雷程序思想。

首先我们在雷区上随机地放上雷,没有雷的地方被点击

后就会显示一个数字表示它周围有几个雷,这是怎么实现的

呢?我们可以把整个雷区看成一个二维数组a[i,j],如雷区:

11 12 13 14 15 16 17 18

21 22 23 24 25 26 27 28

31 32 33 34 35 36 37 38

41 42 43 44 45 46 47 48

51 52 53 54 55 56 57 58

我要知道a[34]周围有几个雷,就只有去检测

a[23],a[24],a[25]

a[33], a[35]

a[43],a[44],a[45]

这8个雷区是否放上了雷,仔细观察它们成在数学关系。

抽象出来就是:a[i,j]的雷的个数就是由

a[i-1,j-1],a[i-1,j],a[i-1,j+1]

a[ i ,j-1], a[ i ,j+1]

a[i+1,j-1],a[i+1,j],a[i+1,j+1]

(如果超出边界再加以判断)

这样的8个雷区决定的。

扫雷程序还会自动展开已确定没有雷的雷区。如果

a[3,4]周围雷数为1,a[2,3]已被标示为地雷,那么

a[24],a[25],a[33],a[35],a[43],a[44],a[45]

将被展开,一直波及到不可确定的雷区。这也是实现的

关键。我们可以把数组的元素设定为一个类对象,它们

所属的类设定这样的一个事件:在被展开时,检查周围

的雷数是否与周围标示出来的雷数相等,如果相等则展

开周围未标示的雷区。这样新的雷区展开又触发这个事

件,就这样递归下去,一直蔓延到不可展开的雷区。

相信在了解以上两个要点后,把雷区这个类编写完全

(如添加是否有雷标记,是否展开标记,周围雷数等,双

击,左右单击的鼠标事件等),实现扫雷程序应是十分简

单的一件事。

zg

nozg@263.net

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有