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

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
游戏初始化模块是实现黄金矿工小游戏的第一步,它负责创建游戏窗口、加载游戏资源以及初始化游戏状态变量等任务。下面详细说明游戏初始化模块的步骤: 1. 创建窗口并设置游戏界面的大小和标题: 在C语言中,可以使用图形库如SDL或OpenGL来创建游戏窗口。首先,需要调用对应的库函数来初始化窗口系统,并设置窗口的大小和标题。 2. 加载游戏所需的资源: 游戏资源包括背景图片、矿工和金矿的图片、音效等。在初始化模块中,需要将这些资源加载到内存中,以便在游戏运行过程中能够快速访问和使用。 3. 初始化游戏状态变量: 游戏状态变量是保存游戏状态数据的变量,如分数、时间、金矿数量等。在初始化模块中,需要对这些变量进行初始化,通常设置为初始值或空值。 4. 设置游戏界面: 游戏界面包括背景、矿工、金矿以及其他游戏元素的布局和样式。在初始化模块中,可以设置背景图片、矿工和金矿的初始位置,并将它们绘制到游戏窗口上。 5. 设置游戏事件监听: 游戏事件监听是指对玩家的键盘输入和鼠标点击等操作进行监听,并根据不同的操作执行相应的游戏逻辑。在初始化模块中,需要设置对应的监听函数,以便在游戏运行过程中能够及时响应玩家的操作。 6. 设置游戏循环: 游戏循环是指游戏的主要逻辑循环,它负责不断更新游戏状态并重绘游戏界面。在初始化模块中,需要设置一个主循环函数,该函数会被不断调用,直到游戏结束。 7. 初始化模块结束: 在所有的初始化工作完成后,初始化模块即可结束。此时,游戏窗口已经创建并显示,游戏资源已经加载到内存中,游戏状态变量已经初始化完成,游戏事件监听也已经设置好。接下来,就可以进入游戏主循环,开始游戏的正式运行。 以上是详细说明游戏初始化模块的步骤。通过合理地设计和实现初始化模块,可以确保游戏在开始运行时处于一个良好的状态,并为后续的游戏逻辑提供必要的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值