初始化游戏状态数据(1)

来源:互联网 发布:如何建立网络销售平台 编辑:程序博客网 时间:2024/05/21 12:44

13.3.2  初始化游戏状态数据(1)

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

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

  1. @interface FKBaseBoard : NSObject  
  2. - (NSArray*) createPieces:(NSArray*)pieces;  
  3. - (NSArray*) create;  
  4. @end 

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

  1. @implementation FKBaseBoard  
  2. // 定义一个方法, 让子类去实现  
  3. - (NSArray*) createPieces:(NSArray*)pieces  
  4. {  
  5.     return nil;  
  6. }  
  7. - (NSArray*) create  
  8. {  
  9.     // 创建FKPiece的二维数组  
  10.     NSMutableArray* pieces = [[NSMutableArray alloc] init];  
  11.     for(int i = 0 ; i < xSize ; i++)  
  12.     {  
  13.         NSMutableArray* arr = [[NSMutableArray alloc] init];  
  14.         for (int j = 0 ; j < ySize ; j++)  
  15.         {  
  16.             [arr addObject:[NSObject new]];  
  17.         }  
  18.         [pieces addObject:arr];  
  19.     }  
  20.     // 返回非空的FKPiece集合,该集合由子类实现的方法负责创建  
  21.     NSArray* notNullPieces = [self createPieces:pieces];  //①  
  22.     // 根据非空FKPiece对象的集合的大小来取图片  
  23.     NSArray* playImages = getPlayImages(notNullPieces.count);  
  24.     // 所有图片的宽、高都是相同的,随便取出一个方块的宽、高即可  
  25.     int imageWidth = [[playImages objectAtIndex:0] image].size.width;  
  26.     int imageHeight = [[playImages objectAtIndex:0] image].size.height;  
  27.     for (int i = 0; i < notNullPieces.count; i++)  // 遍历非空的FKPiece集合  
  28.     {  
  29.         // 依次获取每个FKPiece对象  
  30.         FKPiece* piece = [notNullPieces objectAtIndex:i];  
  31.         piece.image = [playImages objectAtIndex:i];  
  32.         // 计算每个方块左上角的X、Y坐标  
  33.         piecepiece.beginX = piece.indexX * imageWidth + beginImageX;  
  34.         piecepiece.beginY = piece.indexY * imageHeight + beginImageY;  
  35.         // 将该方块对象放入方块数组的相应位置处  
  36.         [[pieces objectAtIndex:piece.indexX]  
  37.             setObject:piece atIndex:piece.indexY];   
  38.     }  
  39.     return pieces;  
  40. }  
  41. @end 

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

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

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

0 0
原创粉丝点击