趣味编程:Java扫雷算法

精贴 置顶
1337 0

  1:建立一个雷区可以用一个一个的JButton按钮放在棋盘状的一个JFrame里或者JDialog里,当然JButton太难看了可以的话可以监听鼠标,盘子上可以放上自己制作的几张小图片。

  2:我们在雷区上随机地放上雷,可以用二维数组,用Math.Random()随即生成下标两个,在相应的数组里布上雷。

  3:注册监听。

  4:点击以后按下列的方式遍历数组:

  没有雷且被点击后就会慢慢的波及到类区如:

  0 1 2 3 4 5 6 7 8 9

  0 @ @ @ @ @ @ @ @ @ @

  1 @ @ @ & @ @ @ @ @ @

  2 @ @ @ @ @ @ $ @ @ @

  3 @ $ @ @ @ @ @ @ @ @

  假设点击了[0,6]位置:应该变成

  0 1 2 3 4 5 6 7 8 9

  0 @ @ @ @ 1 ~ ~ ~ ~ ~

  1 @ @ @ & 1 1 1 1 ~ ~

  2 @ @ @ @ @ @ $ 1 ~ ~

  3 @ $ @ @ @ @ @ 1 ~ ~

  在这里我把上图解释一下

  【0,5】 【0,6】 【0,7】

  【1,5】 【1,6】 【1,7】

  点击了【0,6】位置以后由于以06为基点向四周扩散一直到雷区的边沿!由于05,07,15,16,17都没有雷哪么就又以这5个几点向它们的四周扩散!以其中的任何一个为中心八个方向如果有雷的话就在这个地方标出它周围的雷数来提醒玩家!

  如到了:04位置:

  @(0.3) @(0.4) @(0.5)

  $(1.3) @(1.4) @(1.5)

  只有其 :西南位置有一个雷哪么【0,4】位置标注以其为中心 其北,南,西,东,东北,东南,西北,西南,方向一共有1个雷;

  【0,3】的八个方位只有其南方有一个雷哪么第一次扩展到此位置的下一个不能再展了!总而言之:

  @ @ @

  @ 【】@

  @ @ @

  以【】为中心找其周围的雷数,简化一下就是不断的画正方形!可要小心哦!不要把数字标在地雷上了,只是雷区的“边沿”特别注意:“边沿”二字就是提醒玩家“你现在处的位置朝八个方向走下一步有几个地雷在等着你去踏!”

  下面是网上的一个例子 ,以上是我的理解罢了!希望对你有帮助!

  如雷区:

  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]将被展开,一直波及到不可确定的雷区。这也是实现的关键。我们可以把数组的元素设定为一个类对象,它们所属的类设定这样的一个事件:在被展开时,检查周围的雷数是否与周围标示出来的雷数相等,如果相等则展开周围未标示的雷区。这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可展开的雷区。

  相信在了解以上两个要点后,把雷区这个类编写完全(如添加是否有雷标记,是否展开标记,周围雷数等,双击,左右单击的鼠标事件等),实现扫雷程序应是十分单的一件事。

  • 没有任何评论
今日天气 ···

···

···

···

热门排行
CSS cursor鼠标样式一览表 2012-06-25
.NET后台写JS代码 2011-11-03
网站地址多出jdfwkey的问题解析及... 2010-08-25
数据库xxx的日志已满,请备份该数... 2013-07-19
百度、google、Yahoo网站地图制作... 2011-01-30
<a>标签的伪类书写顺序问题... 2010-09-04
什么是长尾关键词? 2010-09-24
CEO名言 2010-08-31
Mysql 主从数据库同步 2010-09-12
用ASP实现网页BBS 2010-11-01
博主推荐
本个人博客微信公众平台上线啦~~... 2013-10-13
饼哥网络互联上线啦~~要买域名空... 2013-09-20
网站title标题如何正确修改不会被... 2013-08-26
饼哥通讯录系统上线啦,欢迎大家... 2013-08-24
ASP .NET MYSQL 的简单分页 并不... 2013-08-19
网站有弹窗广告这样的站点,百度... 2013-08-17
做淘宝SEO优化需要注意的8大问题 2013-08-17
淘宝网怎么做SEO优化 2013-08-17
站长们要学习的“苍井空精神” 2013-08-17
苹果公司今日发布了iOS 7第五个开... 2013-08-07
随便看看
搜索引擎对待英文字母大小写的区... 2013-08-30
使用asp.net 开发的网页程序,使... 2010-09-04
Sandbox-沙盒效应 2010-09-21
用Windows 7媒体中心 浏览照片更... 2011-01-20
C#中如何使用正则表达式 2013-06-18
点后退按钮显示"网页已经过期" 2013-09-06
一句代码解决IE8兼容问题 2010-10-14
网站被黑解决办法 2010-11-08
使用JAVA访问ACCESS数据库的方法 2013-06-24
站长们要学习的“苍井空精神” 2013-08-17
RSS新闻
传媒新闻
CSDN
八卦新闻
女性新闻
台湾新闻
互联网
军事-新浪博客
IT-新浪博客
汽车新闻
游戏新闻
国际新闻
国内新闻
体育新闻
我的微博
北京 上海 杭州 深圳 广州 成都