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

简介:

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

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

100108_BDc6_262659.jpg

13.10 方块四周的通道


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

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

wKioL1MFZlfiF-uQAAPNUHG6n3M698.jpgwKioL1MFZoyz_V3oAAOdxwp2s9s526.jpgwKioL1MFZuLRKB-2AANwJ2jdqLA543.jpg

13.6.6 没有转折点的横向连接

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

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

wKioL1MFZvaxbfzNAAIqxHENaAY269.jpg

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

13.6.7 没有转折点的纵向连接

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

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

 

wKioL1MFZweS5Q36AAIwZuAt82E407.jpg

13.6.8 一个转折点的连接

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

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


wKioL1MFZ3mx5ObIAAJbCJ0V3js390.jpg


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


注意

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


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

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

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

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

100323_xe1e_262659.jpg

13.11p2位于p1的右上角

100341_phy8_262659.jpg


13.12p2位于p1的右下角

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

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

  wKiom1MFZ9yCjxNsAAV9RSOfQCo795.jpg

wKiom1MFZ-aRDbuQAAOTMLf9m7U537.jpg

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

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

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

wKiom1MFZ_ii0NdRAAOcJoWbIpE502.jpg

——————本文节选自《疯狂ios讲义上》

100459_CAHg_262659.jpg


 

本文转自 

fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/1360987 ,如需转载请自行联系原作者

相关文章
|
安全 数据安全/隐私保护 iOS开发
iOS小技能:【发红包】使用tweak和lua脚本结合进行实现
我们开发的大部分越狱程序,都是编译成动态链接库(`例如:介绍的越狱程序(Tweak)开发,就是动态链接库。`),然后通过越狱平台的MobileSubstrate(iOS7上叫CydiaSubstrate)来加载进入目标程序(Target),通过对目标程序的挂钩(Hook),来实现相应的功能。
263 0
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
220 0
|
存储 数据处理 iOS开发
iOS开发-本地推送实现方法和数据处理方案(二)
iOS开发-本地推送实现方法和数据处理方案(二)
169 0
|
存储 数据处理 iOS开发
iOS开发-本地推送实现方法和数据处理方案(一)
iOS开发-本地推送实现方法和数据处理方案(一)
211 0
|
iOS开发
iOS开发 - 不通过import引入类名实现push或present
iOS开发 - 不通过import引入类名实现push或present
75 0
|
Android开发 iOS开发
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
355 0
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
|
存储 安全 iOS开发
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
400 0
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
|
Swift 数据安全/隐私保护 iOS开发
iOS开发 - swift通过Alamofire实现https通信
iOS开发 - swift通过Alamofire实现https通信
350 0
iOS开发 - swift通过Alamofire实现https通信
|
开发者 iOS开发
iOS开发 - 用AFNetworking实现https单向验证,双向验证
iOS开发 - 用AFNetworking实现https单向验证,双向验证
343 0
iOS开发 - 用AFNetworking实现https单向验证,双向验证
|
iOS开发
iOS小技能:自动布局实现兄弟控件N等分且宽高比例是1:N(xib 上实现)
本文为 iOS视图约束专题的第三篇:xib上使用自动布局教程
140 0