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

Iphone开发中的设计问题-游戏奖金的通用实现,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,所以,我想就我的设计咨询你们,因为我觉得可能有更好的方法 我需要在我的应用程序中实现游戏奖金机制。 目前有9个奖金可用,每个奖金是基于不同的参数的主要游戏对象 我的想法是在应用程序启动时初始化9个GameBonus对象,而每个对象都有不同的SEL(shouldBonus),负责检查奖金是否有效 所以,在游戏的每一个结尾,我都会运行奖金数组,并使用MainGame对象调用isBonusValid()函数(每个游戏结束后都会有所不同) 听起来怎么样 我目前唯一的问题是,我需要确保,如果一些奖金被接受

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

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

我的想法是在应用程序启动时初始化9个GameBonus对象,而每个对象都有不同的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

听起来不错,我想的唯一改变是,如果它被移除了,也许会从数组中移除一个额外的奖励。这样以后就不会被检查了。这也适用于因其他原因不再可用的奖金。

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

因此,授予或拒绝奖金的逻辑应该在MainGame对象中。我会组织它,使GameBonus是一个简单的bucket类,逻辑都在主游戏中。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

谢谢你的评论。我想你误会我了。我确实希望玩家能够在不同的游戏中获得相同的奖金,我只是想确保如果他获得奖金“4”,例如,他不会在同一游戏中获得奖金“3”。例如,“4”是“获得40分以上奖金”,而“3”是“获得30分以上奖金”。关于如何在我当前的实现中做到这一点,有什么建议吗?嗯,您的解决方案根本不是通用的。假设我硬编码所有奖金支票,然后我想再添加一笔奖金,我需要向MainGame对象添加更多代码。(或就此罢免)。在我的解决方案中,您只需添加一个带有特定SEL的gameBonus。在我看来,这样更好。我唯一的问题是如何确保,如果一项奖金被接受,我可以拒绝另一项奖金。(见我对德里克的评论)谢谢你的回答。