所以,我想咨询你们关于我的设计,因为我觉得可能有更好的方法。
我需要在我的应用中实现游戏奖励机制。 目前有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
答案 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