疯狂ios讲义疯狂连载之游戏的状态数据模型-创新互联

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

成都创新互联公司是一家集网站建设,宕昌企业网站建设,宕昌品牌网站建设,网站定制,宕昌网站建设报价,网络营销,网络优化,宕昌网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

13.3.1 定义数据模型

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

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

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

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

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

13.3.2 初始化游戏状态数据

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

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

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

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

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

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

提示

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

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

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

提示  

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

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

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

1矩阵排列的方块

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

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

 

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

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

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

图13.7矩阵排列的方块

2竖向排列的方块

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

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

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

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

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

图13.8竖向排列的方块

3横向排列的方块

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

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

 

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

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

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

图13.9 横向排列的方块

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

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:疯狂ios讲义疯狂连载之游戏的状态数据模型-创新互联
网页网址:http://azwzsj.com/article/cegedg.html