0

我有一个模型,统计,它有 6 个字符模型的统计数据。用户可以输入力量、智力等值。我想要做的是根据用户输入的值自动分配奖金或罚款的值。例如,如果输入 10 或 11,则红利为 0。如果输入 14 或 15,则为 2。有关如何编写此方法的任何提示?谢谢!


这是一个很大的帮助,但我遇到了另一个障碍。我在 Characters 控制器的 Show 方法中这样定义:

@con_modifier = @character.statistic.con_modifier

所以我可以从我的角色视图(显示大部分信息)中调用它。我有一个用于 Fortitude 保存的 Fortitude 模型,我想在逻辑中使用 con_modifier 来计算总数。如何正确称呼外国模特?我有:

def total
  fortitude_base.to_i + ability.to_i + magic.to_i + misc.to_i
end

我尝试将其更改为:

def total
  fortitude_base.to_i + @con_modifier + magic.to_i + misc.to_i
end

但后来我得到这个错误:

nil can't be coerced into Fixnum

所以显然它没有调用正确的信息。有任何想法吗?我是否也需要在我的 Fortitude 控制器中定义它,或者我可以简单地在 Fortitude 模型中定义它并以这种方式在视图中调用它?

4

1 回答 1

1

闻起来像 D&D。查阅我的旧玩家手册表明,属性值的修饰符n是简单的(n - 10) / 2

因此,您只需通过那个简单的公式获得属性值,就可以得到修饰符。我可能在 Attribute 类中有一个类方法:

class Attribute
    #...
    def self.modifier_for(attribute_score)
        (attribute_score.to_i - 10) / 2
    end
end

然后将其连接到您的播放器,如下所示:

class Player
    #...
    def wis_modifier
        Attribute.modifier_for(wis)
    end
    def modifier(attr)
        self.send(attr.to_s + '_modifier')
    end
end

will_save += p.modifier(:wis)

如果你愿意,你可能会变得更漂亮,但简单是一个好的开始,如果有必要,你总是可以让你当地的牧师来治疗你的代码(或使用你的代码重构的 +3 火焰斧头)。

于 2011-09-16T02:17:20.710 回答