我正在尝试为 iPhone 创建一个新的 RPG,但是当我想到一种构建我的技能系统的方法时,我遇到了一个小问题。基本上,每一类角色都会有一套确定的技能,就像在经典角色扮演游戏中一样。但是,我真的不知道如何对它们进行编码。
有些技能会造成伤害,有些会治疗,有些会应用状态变化,等等。所以我想创建一个基本技能类,并使用“activate()”函数覆盖,然后为每种类型的技能创建一个该类的子类。像这样 :
@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 中,并且 activate() 会调用它。(对不起,我真的不知道如何解释)
@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
我不知道这两种模式是否都是好的做法,或者是否有其他方法可以做到这一点,但如果您知道另一种解决方案,我会很乐意阅读!
PS 每个玩家的统计数据(HP、Atk、Def ...)都存储在字典中,所以我可以毫无问题地操纵它们,但是我想从字符串中获取。