扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
FKGameService类是整个游戏逻辑实现的核心它是一个可以复用的业务逻辑类它与游戏实现平台无关其实现原理与《疯狂Android讲义》书中Android版《疯狂连连看》游戏中GameService的实现原理相同。
成都网站设计、成都网站建设、外贸网站建设介绍好的网站是理念、设计和技术的结合。创新互联拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。13.6.1 定义FKGameService的接口代码
根据前面程序对FKGameService对象的依赖程序需要FKGameService对象包含如下方法。
start初始化游戏状态开始游戏的方法。
hasPieces判断FKPiece二维数组中是否还剩下FKPiece对象如果所有的FKPiece都被消除了游戏就算胜利。
(FKPiece*) findPieceAtTouchX:(CGFloat) touchX touchY:(CGFloat)touchY根据触碰点的X、Y坐标来获取FKPiece。
(FKLinkInfo*) linkWithBeginPiece:(FKPiece*)p1 endPiece: (FKPiece*)p2判断p1、p2两个方块是否可以相连。
为FKGameService类定义的接口部分代码如下。
程序清单codes/13/Link/Link/sources/board/FKGameService.h
13.6.2 实现FKGameService
FKGameService组件的前两个方法实现起来都比较简单。
程序清单codes/13/Link/Link/sources/board/FKGameService.m
面三个方法的实现都很简单相信读者很容易理解。下面详细介绍剩下的两个方法的实现。
13.6.3 获取触碰点的方块
当用户触碰游戏界面时事件监听器获取的是该触碰点在游戏界面上的X、Y坐标但程序需要获取用户触碰的到底是哪个方块。因此程序必须把界面上的X、Y坐标换算成在FKPiece二维数组中的两个索引值。
考虑到游戏界面上每个方块的宽度、高度都是相同的因此想将界面上的X、Y坐标换算成FKPiece二维数组中的索引也比较简单只要用X、Y坐标值除以图片的宽、高即可。下面的方法是根据触碰点X、Y坐标获取对应方块的代码。
程序清单codes/13/Link/Link/sources/board/FKGameService.m
上面的方法中两行粗体字代码用于根据触碰点X、Y坐标来计算它在FKPiece二维数组中的索引值。该方法调用了getIndexWithRelateive:size:进行计算。
getIndexWithRelateive:size:方法的实现就是用relative除以size只是程序需要判断可以整除和不能整除两种情况如果可以整除说明还在前一个方块内如果不能整除则对应于下一个方块。下面是getIndexWithRelateive:size:方法的代码。
程序清单codes/13/Link/Link/sources/board/FKGameService.m
13.6.4 判断两个方块是否可以相连
判断两个方块是否可以相连是本程序需要处理的最烦琐的地方因为两个方块可以相连的情形比较多大致可分为如下情况。
两个方块位于同一条水平线可以直接相连。
两个方块位于同一条竖直线可以直接相连。
两个方块以两条线段相连也就是有1个拐角。
两个方块以三条线段相连也就是有2个拐角。
- (FKLinkInfo*)linkWithBeginPiece:(FKPiece*)p1 endPiece:(FKPiece*)p2方法把这4种情况分开进行处理代码如下。
程序清单codes/13/Link/Link/sources/board/FKGameService.m
程序中的4处粗体字代码分别代表两个方块位于同一条水平线可直接相连、两个方块位于同一条竖直线可直接相连、两个方块需要两条线相连、两个方块需要3条线相连。上面的方法分别考虑了这4种情况但程序还需要为这4个方法提供实现。
为了实现上面4个方法可以对两个Piece的位置关系进行归纳。
p1与p2在同一行indexY值相同。
p1与p2在同一列indexX值相同。
p2在p1的右上角p2的indexX >p1的indexXp2的indexY < p1的indexY。
p2在p1的右下角p2的indexX >p1的indexXp2的indexY > p1的indexY。
至于p2在p1的左上角以及p2在p1的左下角这两种情况程序可以重新执行linkWithBeginPiece: endPiece:方法将p1和p2两个参数的位置互换即可。
——————本文节选自《疯狂ios讲义上》
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流