我正在构建基于浏览器的RPG,我希望能够根据其他对象属性以不同的方式计算对象的属性。
更具体地说。我有一个单元模型,其中包含健康,力量,防御等属性。
我希望有一个单独的技能模型,其中每个实例提供一种不同的方式来计算技能的总伤害,基于单位属性。
实施例
火球:
total_damage = unit.intelligence * 2 + 5
投掷斧:
total_damage = unit.strength + unit.precision
如何有效地将其存储在数据库中? 感谢
答案 0 :(得分:0)
如果这些变体的数量与您说的一样多,那么请查看表达式解析器,例如https://github.com/rubysolo/dentaku
在每个表达式中仅提供您认为可能使用的变量列表并对其进行评估。表达式当然可以存储在数据库中。
请记住,它会有一定的性能开销。
答案 1 :(得分:0)
对于您描述场景的方式,在我看来,您的不同类型的单元将共享相同的属性但需要不同的行为。这非常适合单表继承。请注意,现在它可能只是total_damage
对每种单位的计算方式不同,但稍后可能是您希望不同的单位走不同。例如,大象单位将比侦察兵慢慢行走。
假设您已经拥有单位型号。您想在该Units
表中添加类型列。该列将指定单位的kind
。
您的模型现在看起来应该是这样的:
class Unit < ActiveRecord::Base
def total_damage
end
end
class Chariot < Unit
def total_damage
# Whatever damage a chariot can do!
end
end
class Scout < Unit
def total_damage
# Whatever damage a scout can do!
end
end
如果所有子模型都应该共享相同的属性,那么STI是一种很好的方法。如果您认为只有一个子模型使用了20列,则可能需要创建不同的表。