<p>感觉你真正想要的是一个代表武器的类,有处理基本值和使用各种修饰符计算命中值的属性。下面是一个简单的例子:</p>
<pre><code>SHORT_RANGE = 'S'
MEDIUM_RANGE = 'M'
LONG_RANGE = 'L'
SHORT_RANGE_MODIFIER = 0.6
MEDIUM_RANGE_MODIFIER = 0.3
LONG_RANGE_MODIFIER = 0.1
class Weapon(object):
def __init__(self, code_name, full_name, base_hit_value,
short_range_modifier=None, medium_range_modifier=None,
long_range_modifier=None):
self.code_name, self.full_name = code_name, full_name
self.base_hit_value = base_hit_value
self.range_modifiers = {
SHORT_RANGE: short_range_modifier or SHORT_RANGE_MODIFIER,
MEDIUM_RANGE: medium_range_modifier or MEDIUM_RANGE_MODIFIER,
LONG_RANGE: long_range_modifier or LONG_RANGE_MODIFIER,
}
def hit_value(self, range, modifier=1):
return self.base_hit_value * self.range_modifiers[range] * modifier
</code></pre>
<p>从那里,您可以在角色对象内创建武器实例,如下所示:</p>
^{pr2}$
<p>然后如果,比如说,角色在近距离发射手枪:</p>
<pre><code> hit_value = self.pistol.hit_value(SHORT_RANGE)
</code></pre>
<p>hit_value()方法的额外参数可用于传递特定于字符或情况的修改。在</p>
<p>当然,除此之外的下一步将是直接将武器建模为武器的子类(也许可以分解为特定类型的武器,如枪支、弓、手榴弹等,每个都有自己的基本值),并添加一个库存类来表示角色携带的武器。在</p>
<p>所有这些都是相当标准的、无聊的面向对象的设计过程,但是对于很多情况,这种类型的思考会让您快速起步,并提供至少一点基本的灵活性。在</p>