用SilverLight实现 连连看 游戏 (3)

 

本节介绍这个游戏的核心,如何寻路!很有意思的一节!

  1. 在SL上显示若干个小图标
  2. 可以点击小图标并标识选中的图标
  3. 两个相同图标间的连线(寻路功能、判断是否存在两图标是可连接的)
  4. 计时功能,游戏开始后,需要显示离游戏结束时的剩余时间。

 

 

 

 

我这样考虑寻路功能:

 

对于一个表情A,它怎么知道存在另一个表情B是与它相连的呢?!

 

最简单的方法,从表情A连一条线出去,在规则(连线可以弯二次)允许下一直延伸,直到触及一个表情为止。

这条线延伸时,会存在无数不同的形状。我们需要把所有形状都演绎一次,把所有可连接的表情找出来,并判断是否存在相同的表情。

 

 

方法确定后,我再做一些补充解释,以让大家更明白:

对于一个表情,旁边的CELL如果没有被另一表情占有,则是可连线的

如上图,上面的一个表情有四个相邻CELL为空,即:有四条线可以连接出去

或者说:查询这个表情的可连接表情时,需要查询四次,每相邻的未占用CELL都需要做一次查询。

 

我们现在从上面 CELL 1 处连接一条线,当这条线从表情连接到CELL 1 时,这条线接下来有三个可能的延伸方案,如下图所示:

 

相同的,每个方案再次延伸都会碰到多个方案(好多分支啊!)

不过,用递归很容易满足要求!

 

 

OK,开始贴代码之前,还有一个要处理:

在CELL容器放置表情时,一定要成对成对的放置。(要不然,会有表情消除不掉)

并且,放置时,一定需要随机放置

 

 

 

看代码吧,相比上一部分,改动有点大

 

主要的初始化工作流程如下:

 

在程序运行过程中,每次点击都会判断是否有需要消除的表情。

当鼠标点击一个表情后,流程如下:

 

 

代码如下,这里是整个文件的代码:

欢迎各位问题

 

希望大家看明白了 :)

 

至此为止,已经主要功能完成了!剩下的都是一些完善的功能,如:计时功能、计分功能...

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值