疯狂ios讲义疯狂连载之游戏的状态数据模型

简介:

对游戏玩家而言在游戏界面上看到的“元素”千差万别、变化多端但对游戏开发者而言游戏界面上的元素在底层都是一些数据不同的数据所绘制的图片有所不同。因此建立游戏的状态数据模型是实现游戏逻辑的重要步骤。


13.3.1 定义数据模型


《疯狂连连看》的游戏界面是一个n×m的“网格”每个网格上显示一张图片对游戏开发者来说这个网格只需要用一个二维数据来定义而每个网格上所显示的图片对底层的数据模型来说不同的图片对应于不同的数值即可。图13.6显示了数据模型的示意。


092233_BBQ5_262659.jpg


13.6《疯狂连连看》的数据模型

对于图13.6所示的数据模型只要让数值为0的网格上不绘制图片其他数值的网格则绘制相应的图片就可显示出《疯狂连连看》的游戏界面。


本程序实际上并不是直接使用int[][]数组来保存游戏的状态数据而是采用NSArray来保存游戏的状态模型而NSArray的元素又是NSArray相当于创建二维数组数组元素是FKPiece。因为FKPiece对象封装的信息更多不仅包含了该方块左上角的XY坐标还包含了该FKPiece所显示的图片、图片ID这个图片ID可作为该FKPiece的数据。


13.3.2 初始化游戏状态数据


为了初始化游戏状态程序需要创建一个NSArray数组为此程序定义一个FKBaseBoard基类该基类的代码如下。


程序清单codes/13/Link/Link/sources/board/FKBaseBoard.h

wKiom1L8I7mDfMGVAAB0wo944LI255.jpg

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


wKioL1L8I66S3h_YAAU-9S6Y2aQ817.jpg

上面的粗体字代码块用于初始化NSArray代表的二维数组为有方块的FKPiece元素的beginXbeginYimage属性赋值beginXbeginY根据该方块在二维数组中的位置动态计算得到。


提示

上面程序中用到了 xSize ySize 等常量这两个常量用于代表该游戏在横向和纵向上各包含多少个方块。程序专门定义了一个 Constants.h 文件来记录这些常量的值后面有些类也用到了该头文件中的常量请读者参考本书配套光盘中的 Constants.h 文件。

程序中的①号代码调用了createPieces:方法来创建一个NSArray集合该方法将会交给其子类去实现这里是典型的“模板模式”的应用。FKBaseBoard基类完全可以根据FKPiece对象在二维数组中的位置动态地计算它的beginXbeginYFKBaseBoard不确定NSArray代表二维数组的哪些元素是有方块的。

由于《疯狂连连看》游戏的初始状态可能有很多种比如横向分布的方块、竖向分布的方块、矩阵排列的方块、随机分布的方块等该程序为了考虑以后的扩展性此处只采用了模板模式FKBaseBoard基类负责完成通用的代码对于暂时无法确定的需要子类实现的部分可定义成createPieces:方法。

提示  

由于Objective-C没有提供抽象类和抽象方法的概念因此此处将createPieces:方法定义成返回nil的空方法。


上面的程序中还用到了一个ImageUtil工具类它的作用是自动搜寻项目包的图片并根据需要随机读取该目录下的图片。后面会详细介绍该工具类的用法。


下面为该FKBaseBoard实现三个子类。

1矩阵排列的方块


矩阵排列的方块会填满二维数组的每个数组元素只是把四周留空即可该子类的代码实现如下接口部分几乎没有代码因此此处不再给出。

程序清单/Users/yeeku/publish/codes/13/Link/Link/sources/board/FKFullBoard.m

 

wKiom1L8JBnw2ZNwAAKNkjkLCcc079.jpg

该子类初始化的游戏界面如图13.7所示。

092508_qFH5_262659.jpg

13.7矩阵排列的方块

2竖向排列的方块

竖向排列的方块以垂直的空列分隔开该子类的代码实现如下接口部分几乎没有代码因此此处不再给出。

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

wKiom1L8JDqRorNqAAKPjZZ1-JY014.jpg

程序中的粗体字代码控制了只设置i % 2 == 0的列也就是只设置索引为偶数的列该子类初始化的游戏界面如图13.8所示。

092551_ZIgR_262659.jpg

13.8竖向排列的方块

3横向排列的方块

横向排列的方块以水平的空行分隔开该子类的代码如下。

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

 

wKioL1L8JCigzoqhAAK1x1mbx1g900.jpg

程序中的粗体字代码控制了只设置j % 2 == 0的行也就是只设置索引为偶数的行该子类初始化的游戏界面如图13.9所示。

092640_fPE4_262659.jpg


13.9 横向排列的方块


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

092715_G9aH_262659.jpg

 

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

相关文章
|
BI 开发工具 Android开发
和iPhone玩家对战吧,Google Play游戏服务将支持iOS平台
Google今天在游戏开发者大会上宣布了若干与Google Play游戏服务的相关更新,其中和游戏玩家关系最大的也许就是Google Play Game Services将支持iOS平台,这也就意味着回合制和实时多人游戏将同时支持Android和iOS,以后这两个平台的玩家也就可以互动了。显然,这对于游戏开放商也是个好消息——让原本被割裂的用户参与到同场竞技中来。
267 0
和iPhone玩家对战吧,Google Play游戏服务将支持iOS平台
|
算法 开发工具 git
iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法(二)
iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法
153 0
iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法(二)
|
算法 iOS开发
iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法(一)
iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法
152 0
|
开发工具 git iOS开发
iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计(二)
iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计
197 0
|
算法 iOS开发
iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计
iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计
137 0
|
存储 开发框架 C#
iOS数据持久化之二——归档与设计可存储化的数据模型基类(二)
iOS数据持久化之二——归档与设计可存储化的数据模型基类
194 0
iOS数据持久化之二——归档与设计可存储化的数据模型基类(二)
|
存储 iOS开发 开发者
iOS数据持久化之二——归档与设计可存储化的数据模型基类(一)
iOS数据持久化之二——归档与设计可存储化的数据模型基类
140 0
iOS数据持久化之二——归档与设计可存储化的数据模型基类(一)
|
测试技术 Android开发 iOS开发
Unity3D-实现连续点击两次返回键退出游戏(安卓/IOS)
Unity3D-连续点击两次返回键退出游戏 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例...
2811 0