五边形扫雷游戏,原创SVG + Javascript 实现

cuixiping 2013-10-22 09:50:09
加精
国庆期间,写了个SVG + Javascript 实现的五边形的扫雷游戏,在QQ群和微博公布了一下,一直懒得写到blog上面来,现在补上来。
这个是10月5号晚上写的,在QQ群发出来之后,根据朋友们的体验,以及自己的想法,后面几天又陆续修了一些bug,增加了一些功能。
没有截图的,都是耍流氓!
所以我先发个图,现在看起来是这样子:


有兴趣的可以戳开这里玩一玩:SVG + Javascript 实现的五边形的扫雷游戏。
五边形的扫雷你可能没有玩过吧,推理难度降低了,但是没有方块扫雷那么直观,挑战一下头脑吧。

和一般JS版的扫雷游戏相比,我这个扫雷游戏的特点:
这个扫雷游戏的每个格子都是五边形的。几何方面来讲,五边形是不能全等密铺的,这与六边形、四边形、三角形不同。
图形采用SVG来显示,带来的好处很多,处理任意形状的点击区域很方便,可以任意缩放还保持清晰,自动满窗显示,不需要图片文件了,红旗和地雷都是svg代码实现的。
地雷的生成放在了第一次点击之后,这样做的好处是避免了第一次就点击到雷的情况。
第一次点击,保证不触雷且一定会挖开一片区域,这样做避免了开始就要猜的情形。Win7的扫雷也是这样的,但XP的扫雷不是。
显示剩余要挖开的格子数!扫雷是否完成,主要是看这个数是否到0的,大部分js扫雷游戏的判胜逻辑是错的。
支持双键/双击翻雷,这个也提一下,虽然我扫雷很少用这个功能。
非递归实现。好处是可以高效处理更大局面而不会使浏览器卡死。
扫雷失败(触雷)后,显示答案。触雷的格子、所有不是雷但标了雷的、是雷而没有标雷的,都会区别显示出来。其实是很基本的功能。
没有标记可疑格子的功能,实在觉得这个不需要。
其它没有的功能,因为忙,因为懒。

关于程序的实现,也简介一下。
因为是五边形,就是上面图片那个形状,和经典的方块表格有很大的不同,导致了编程和数据结构都要比经典扫雷复杂一些。
因为全等五边形不能密铺平面,而六边形可以,所以我采用了将一个六边形切分为四个五边形,再由多个六边形构成整个局面。
扫雷游戏关键的一环是求一个格子的所有相邻格子,这四个五边形的相邻情况都不一样,需要区别对待,有别于经典扫雷。
数据结构采用了三维object的形式,每个格子的位置用3个量来表示,对这3个量进行加减,就能得到周围格子的度量。经典方格扫雷或者是六边形扫雷都是只需要行和列2个量的。
对于第一次点击保证不触雷且挖开一片的处理:点击后,生成随机的雷,对点击的格子以及相邻的几个格子进行判断,如果有雷,则随机交换到其它不是雷的格子去。

鉴于CSDN论坛JS版的人气情况,代码分析就省了,对代码有兴趣的,可去我的BLOG交流。

CSDN BLOG
...全文
8334 162 打赏 收藏 转发到动态 举报
写回复
用AI写文章
162 条回复
切换为时间正序
请发表友善的回复…
发表回复
郭列 2014-03-24
  • 打赏
  • 举报
回复
楼主,哈喽。 我们是来自深圳的创业团队,我们需要精通SVG图形编程的大牛加入我们,不知道你是否感兴趣祥聊下。 我们来自腾讯,团队已经拿到知名风投数百万投资,产品在国外有成功案例,非常给力,求回复 :)
u011043553 2013-12-07
  • 打赏
  • 举报
回复
引用 73 楼 51Crack 的回复:
cuixiping 2013-12-06
  • 打赏
  • 举报
回复
引用 169 楼 pengqian098 的回复:
楼主,有个bug,棋子可以无限插。可以到负数。。。。
真心不是bug!

负数是提醒你插雷插多了!让你知道插的数量超过了雷的总数!

给你个win7扫雷的截图吧:
a116 2013-12-05
  • 打赏
  • 举报
回复
不撒当时的
跳动de指尖 2013-12-05
  • 打赏
  • 举报
回复
楼主,有个bug,棋子可以无限插。可以到负数。。。。
  • 打赏
  • 举报
回复
高端 !!! 我去看看算法学习一下
大道曙光 2013-12-04
  • 打赏
  • 举报
回复
高端大气上档次 狂拽酷炫掉渣天 楼主牛叉
cuixiping 2013-12-04
  • 打赏
  • 举报
回复
引用 165 楼 mayadong7349 的回复:
高端大气上档次 狂拽酷炫掉渣天 楼主牛叉
cuixiping 2013-11-29
  • 打赏
  • 举报
回复
引用 155 楼 Giberson1 的回复:
给你提一个Bug:以截图形式吧,就是标红的地方啊, 明明只有两边了,却说有3个雷,明显不对吗
这个真不是bug,解释参考#134楼。
Giberson1 2013-11-29
  • 打赏
  • 举报
回复
给你提一个Bug:以截图形式吧,就是标红的地方啊,
明明只有两边了,却说有3个雷,明显不对吗

Giberson1 2013-11-29
  • 打赏
  • 举报
回复
有点崇拜啊,能说下您的思路吗,还有介绍下你自己呗,什么来头
blizzf99 2013-11-29
  • 打赏
  • 举报
回复
wan_bowen 2013-11-29
  • 打赏
  • 举报
回复
还挺好玩的,
cuixiping 2013-11-28
  • 打赏
  • 举报
回复
六边形的开发中……
dongchengxiaomin 2013-11-26
  • 打赏
  • 举报
回复
楼主有源码不,放个下载链接,让大家看看源码如何实现的波。
cuixiping 2013-11-26
  • 打赏
  • 举报
回复
引用 150 楼 dongchengxiaomin 的回复:
楼主有源码不,放个下载链接,让大家看看源码如何实现的波。
你想知道哪部分的实现原理?欢迎交流,我乐意探讨。
Anserhong 2013-11-25
  • 打赏
  • 举报
回复
挺新颖的,楼主很有想法啊! 晚上回家玩,公司的电脑只能访问几个网站。。。
雪国的花儿 2013-11-24
  • 打赏
  • 举报
回复
幽y 2013-11-23
  • 打赏
  • 举报
回复
赞一个!!!
人艰_不拆 2013-11-22
  • 打赏
  • 举报
回复
膜拜一下,果然是高手
加载更多回复(142)

87,903

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧