疯狂java讲义ios_疯狂ios讲义疯狂连载之实现游戏逻辑(2)

13.6.5 定义获取通道的工具方法

这里所谓的通道指的是一个方块上、下、左、右4个方向上的空白方块图13.10显示了一个方块四周的通道。

55f6f00708b1b8b818314f380cd53fc6.png

图13.10 方块四周的通道

下面是获取某个坐标点四周通道的4个方法。

程序清单codes/13/Link/Link/sources/board/FKGameService.m

36ebeb7fbe2331bbaafdf939f177e435.png3c0f29fc59c63110cd97e350720a9ab7.png1b0c6e5bc7b26f81f2a2f5bb16a97374.png

13.6.6 没有转折点的横向连接

如果两个FKPiece在FKPiece二维数组中的第二维索引值相等那么这两个FKPiece就位于同一行如前面的linkWithBeginPiece:endPiece:方法中①号代码所示此时程序需要调用isXBlockFromP1: toP2:pieceWidth:判断p1、p2之间是否有障碍。下面是该方法的代码。

程序清单codes/13/Link/Link/sources/board/FKGameService.m

21939b0b1b3faff96a5b22445c07f0e8.png

从上面的判断可以看出如果两个方块位于同一行且它们之间没有障碍那么这两个方块就可以消除两个方块的连接信息就是它们的中心。

13.6.7 没有转折点的纵向连接

与之相似的是如果两个FKPiece在FKPiece二维数组中的第一维索引值相等那么这两个FKPiece就位于同一列如前面的linkWithBeginPiece:endPiece:方法中②号代码所示此时程序需要调用isYBlockFromP1: toP2:pieceHeight:方法判断p1、p2之间是否有障碍。下面是该方法的代码。

程序清单codes/13/Link/Link/sources/board/FKGameService.m

4ae559c6988967f97b6e2ef18963729e.png

13.6.8 一个转折点的连接

对于两个方块的连接线上只有一个转折点的情况程序需要先找到这个转折点。为了找到这个转折点程序定义遍历两个通道并获取它们交点的一个方法。

程序清单codes/13/Link/Link/sources/board/FKGameService.m

cb6cf0ca4f11788560c717099bec53f6.png

为了找出两个方块连接线上的连接点程序同样需要分析p1、p2两个点的位置分布。根据前面的分析我们知道p2要么位于p1的右上角要么位于p1的右下角。

注意

对于p2位于p1的左上角和左下角的情况只要把p1、p2交换即可。

对于p2位于p1的右上角的情形如图13.11所示。

从图13.11可以看出当p2位于p1的右上角时应该计算p1的左通道与p2的向下通道是否有交点p1的向上通道与p2的向左通道是否有交点。

对于p2位于p1的右下角的情形如图13.12所示。

从图13.12可以看出当p2位于p1的右上角时应该计算p1的向右通道与p2的向上通道是否有交点p1的向下通道与p2的向左通道是否有交点。

f5e37e5e8b89efec11b5053da620bbba.png

图13.11p2位于p1的右上角

904c07839a233a37597101badeabcb68.png

图13.12p2位于p1的右下角

考虑到p1与p2具有上面两种分布情形程序提供了如下方法进行处理。

程序清单codes/13/Link/Link/sources/board/FKGameService.m  57e2604f129e0c038570618b6dada259.png

b2d88b3d1febbb5b6427d5da20d81363.png

上面的两行粗体字代码分别处理了p2位于p1的右上和右下的两种情形。

程序中用到了isLeftUp、isLeftDown、isRightUp、isRightDown方法来判断p2位于p1的左上、左下、右上、右下4种情形这4个方法的实现比较简单只要对它们的X、Y坐标进行简单判断即可代码如下。

程序清单codes/13/Link/Link/sources/board/FKGameService.m

57922d9bae867e0f62a4c68f24d77fdd.png

——————本文节选自《疯狂ios讲义上》51d8d75ddca4bc2733a75b27e7df2c8a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值