2013-06-22 34 views
0

我正在嘗試爲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,攻擊力,防守效率...)都存儲在一個字典,所以我沒有問題,操縱它們,但是我從字符串想要的。

+3

技能(或法術)有*用戶*和*目標*。用戶是技能的用戶,並且目標是它的目標,並且目標可以與用戶相同(例如,自我修復)或是「空」(例如區域法術)。你可以將這些作爲參數傳遞給你的'activate'方法,並且在繼承的技能中只需要做任何需要的技能。 –

+0

我應該如何使用我的第一個解決方案與您的解決方案?因爲否則,如果我只有一個班級,我怎樣才能知道哪一個將成爲目標? – RaphBlanchet

回答

3

我不是RPG遊戲的專家(除了玩其中的一些)。然而,我認爲你有點過度思考。 對於治療和傷害技能,你甚至不必關心技能的效果是傷害治療還是交易傷害。 傷害影響生命值。所以你可以說技能X是+100 HP,技能Y是-100 HP。

你可以像這樣做所有種類的屬性(例如速度,指數,魔術點)。

與技能的影響可能在兩個技能激活和技能目標,這可能是同一類,但不同的實例(編程類,而不是人物類)進行處理。

因此,要回答你的問題,你可以做到這一點古典的方式,你繼承從基礎技能類的所有技能。 如果他們做類似的事情,你可以將技能分成許多級別。 (就像治療等級1一樣,治療等級2是治療等級的子類。)

或者如果你有這麼多技能,你可以將技能傳播到一個能力表中。 例如,我將創建表是這樣的:

Skill_ID, Skill_Name, HP_Target, MP_Target, Speed_Target, HP_Self, MP_Self, Speed_Self 
     1,  Punch, -50 , 0  , -10  , 0  , 0 , 0 
     2,  Kick, -100 , 0  , -10  , 0  , 0 , -10 
     3,  Magic, -120 , 0  ,  0  , 0  , -25 , 0 
     4,  Heal, +500 , 0  ,  0  , 0  , -25 , -10 

然後,你可以只讀取由從這些表中的技能影響的參數值和應用目標和自我他們。 這樣,你可能只有少數技能類。 如果你有其他修改器或技能的副作用(如充電時間),你也可以把它們放在桌子上。

同樣,我不是這方面的專家,但我希望它有幫助。

+0

完美!修改了一下你的想法,但我完全贊同這一點!非常感謝你! :d – RaphBlanchet