我正在嘗試爲iPhone創建一個新的RPG,但是當我想出一種方法來構建我的技能系統時,我遇到了一些小問題。基本上,每一類角色都會有一套確定的技能,就像經典的RPG遊戲一樣。但是,我真的不知道如何編碼它們。一些技能會造成損害,一些會治癒,一些會應用狀態改變等等。所以我有想法創建一個帶有「activate()」函數的基本技能類來覆蓋,然後對於每種類型的技能,創建該類的一個子類。就像這樣:Objective-C - RPG技能設計模式
@implementation BasicSkill
- (id) initFromName:(NSString*)_name
{
int value = ...;
int chanceOfEffect = ...;
NSString *statusToChange = ...;
}
-(void) activate
{
//Do nothing
}
@end
@implementation DamageSkill : BasicSkill
-(void) activate
{
int damageToDeal = value;
//etc
}
@end
@implementation HealSkill : BasicSkill
-(void) activate
{
int damageToHeal = value;
//etc
}
@end
需要每個技能的每個變量將被存儲在數據庫中(我已經有該工作功能),但我很害怕,它可能會爲每一個類型的技能產生太多的子類,因爲我不知道有多少類型會有...
其他想法我是隻創建一個類,但每個技能將有它自己的功能,存儲在一個SEL,並激活()會叫它。 (對不起,我真的不知道該如何解釋)
@implementation BasicSkill
- (id) initFromName:(NSString*)_name
{
SEL action = NSSelectorFromString(@"Fireball");
int value = ...;
int chanceOfEffect = ...;
NSString *statusToChange = ...;
}
-(void) activate
{
[self performSelector:action];
}
-(void) fireball
{
int damageToDeal = value;
//etc...
}
@end
我不知道,如果這兩個模式都是很好的做法,或者,如果有另一種方式做到這一點,但如果你知道另一種解決方案,我會很高興閱讀它!
P.S每個球員的統計(HP,攻擊力,防守效率...)都存儲在一個字典,所以我沒有問題,操縱它們,但是我從字符串想要的。
技能(或法術)有*用戶*和*目標*。用戶是技能的用戶,並且目標是它的目標,並且目標可以與用戶相同(例如,自我修復)或是「空」(例如區域法術)。你可以將這些作爲參數傳遞給你的'activate'方法,並且在繼承的技能中只需要做任何需要的技能。 –
我應該如何使用我的第一個解決方案與您的解決方案?因爲否則,如果我只有一個班級,我怎樣才能知道哪一個將成爲目標? – RaphBlanchet