Iphone开发中的设计问题 - 游戏奖金的通用实现

时间:2011-01-16 11:35:40

标签: iphone objective-c cocoa-touch

所以,我想咨询你们关于我的设计,因为我觉得可能有更好的方法。

我需要在我的应用中实现游戏奖励机制。 目前有9个可用的奖金,每个奖金都基于MainGame对象的不同参数。

我想到的是在app启动时初始化GameBonus的9个对象,而每个对象都有不同的SEL(shouldBonus),负责检查奖金是否有效。

所以,游戏的每一端我都会跑过奖金数组并使用MainGame对象调用isBonusValid()函数(每次游戏后都会有所不同)。

那声音怎么样?

我目前唯一的问题是,我需要确保如果某些奖金被接受,其他一些不会(内部的东西)...任何建议如何做到这一点仍然保持通用实现?

@interface GameBonus : NSObject {

    int bonusId;
    NSString* name;
    NSString* description;
    UIImage* img;
    SEL      shouldBonus;


}

@implementation GameBonus

-(BOOL) isBonusValid(MainGame*)mainGame
{
    [self shouldBonus:mainGame];
}

@end

2 个答案:

答案 0 :(得分:0)

听起来不错,我考虑的唯一变化可能就是从阵列中删除奖金。这样就不会在将来检查。这也适用于因其他原因不再可用的奖金。

答案 1 :(得分:0)

玩家是否可以根据游戏规则获得特定奖励并不是个人奖金所知道的。这是游戏本身所知道的。例如,你可能有一个游戏允许奖金A和B在一起,但另一个游戏不允许。

因此授予或拒绝奖金的逻辑应该在MainGame对象中。我会组织它,以便GameBonus是一个普通的桶级类,逻辑都在MainGame中。 MainGame将是任何其他可能想要覆盖奖金逻辑的自定义游戏的超类。

一个起点:

typedef enum {
    BonusTypeA, BonusTypeB, BonusTypeC
} BonusId;

@interface GameBonus : NSObject {
    BonusId bonusId;
    NSString *name;
    NSString *description;
    UIImage *img;
}

@property (nonatomic,assign) BonusId bonusId;
@property (nonatomic,retain) NSString *name;
@property (nonatomic,retain) NSString *description;
@property (nonatomic,retain) NSString *img;
@end

@interface MainGame : NSObject {
    NSMutableSet *activeBonuses;
}

-(BOOL) tryToSetBonus:(BonusId)bonus; // tries to set, returns YES if successful.
-(BOOL) isBonusValid:(BonusId)bonus;  // has no side effect, just check validity.
@end
相关问题