2011-01-16 12 views
0

Also, ich dachte, Sie über mein Design zu beraten, weil ich denke, es könnte eine bessere Möglichkeit, es zu tun.Design-Problem in Iphone Dev - Generic-Implementierung für Game Boni

Ich muss Spiel Boni Mechanismus in meiner App implementieren. Momentan gibt es 9 Boni, jeder basiert auf verschiedenen Parametern des MainGame-Objekts.

Was ich im Sinn hatte, war beim App-Start, um 9 Objekte von GameBonus zu initialisieren, während jeder einen anderen SEL (sohnBonus) haben wird, der dafür verantwortlich sein wird, ob der Bonus gültig ist.

Also, jedes Ende des Spiels werde ich einfach über den Bonus-Array laufen und rufen Sie die IsBonusValid() -Funktion mit dem MainGame-Objekt (das ist nach jedem Spiel anders).

Wie klingt das?

Das einzige Problem, das ich derzeit habe, ist, dass ich sicherstellen muss, dass, wenn einige Boni akzeptiert werden, andere nicht (innere Sachen) ... irgendeinen Rat, wie man das tut und noch allgemeine Implementierung behält?

Antwort

0

Hört sich gut an, die einzige Änderung, die ich in Betracht ziehen würde, ist vielleicht einen Bonus aus dem Array zu entfernen, sollte er akzeptiert werden. So wird es in Zukunft nicht überprüft. Dies würde auch für einen Bonus funktionieren, der aus anderen Gründen nicht mehr verfügbar sein sollte.

+0

Dank für Sie einen Kommentar. Ich glaube du hast mich falsch verstanden. Ich möchte, dass der Spieler in der Lage ist, die gleichen Boni zu einem anderen Spiel zu bekommen, ich möchte nur sicherstellen, dass wenn er zum Beispiel Bonus "4" bekommt, er auch nicht "3" bekommt. zum Beispiel "4" ist "mehr als 40 Punkte Bonus" und "3" ist "hat mehr als 30 Punkte Bonus". Irgendwelche Vorschläge, wie man das mit meiner aktuellen Implementierung macht? – Idan

0

Ob der Spieler einen bestimmten Bonus gemäß den Regeln Ihres Spiels erhalten kann, ist nicht etwas, über das die einzelnen Boni Bescheid wissen. Das würde das Spiel selbst wissen. Zum Beispiel können Sie ein Spiel haben, das Bonus A und B zusammen erlaubt, aber ein anderes Spiel, das nicht würde.

Also sollte die Logik, um einen Bonus zu gewähren oder zu verweigern, im MainGame-Objekt sein. Ich würde es so organisieren, dass GameBonus eine einfache Bit-Bucket-Klasse ist und die Logik alles im MainGame ist. MainGame wäre eine Oberklasse aller anderen benutzerdefinierten Spiele, die die Bonuslogik außer Kraft setzen könnten.

Ein Ausgangspunkt:

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 
+0

Nun, Ihre Lösung ist überhaupt nicht generisch. Lassen Sie uns sagen, dass ich alle Bonus-Checks fest codiere, dann möchte ich einen weiteren Bonus hinzufügen, ich muss mehr Code zum MainGame-Objekt hinzufügen. (oder entfernen Sie für diese Angelegenheit). In meiner Lösung fügen Sie einfach ein GameBonus mit einem bestimmten SEL hinzu. Meiner Meinung nach ist das besser. Das einzige Problem, das ich habe, ist, wie man sicherstellen kann, dass, wenn ein Bonus akzeptiert wird, ich einen anderen leugnen kann (siehe meinen Kommentar zu Derek). Danke für die Antwort. – Idan