这是一个上下文:一个RPG,其中我定义了一个"Dice“类,这样就可以很容易地获得随机数。我想让一个魔法法术造成伤害,因为掷骰子的结果。
import random
class Dice:
def __init__(self, name, value):
self.name = name
self.value = value
def get_dice(self):
return random.randrange(1, int(self.value + 1))
d4 = Dice("d4", 4)
d6 = Dice("d6", 6)
d8 = Dice("d8", 8)
dice = [d4, d6, d8]
class Spell:
def __init__(self, name, value):
self.name = name
self.value = value
def get_spell_damage(self):
return self.value
fire = Spell("fire", d8.get_dice())
ice = Spell("ice", d6.get_dice() + d6.get_dice())
wind = Spell("wind", d4.get_dice() + d4.get_dice() + d4.get_dice())
spellbook = [fire, ice, wind]问题是,当定义咒语时,骰子被滚动,而不是每次被调用时。如果我说:
print(str(ice.get_spell_damage()), str(ice.get_spell_damage()), str(ice.get_spell_damage()))当我得到像“7-7”这样的结果时,它告诉我,在spellbookice.value中,每个"d6.get_dice()“都给出了唯一的结果,但是现在它有了一个定义的值。
应该如何更改代码,以便每次调用该拼写时都对其进行评估?
发布于 2018-12-06 23:38:29
您可以让Spell的Spell方法获取一个Dice的列表,并使get_spell_damage调用列表中每个骰子的get_dice方法,并将滚动数之和:
class Spell:
def __init__(self, name, dices):
self.name = name
self.dices = dices
def get_spell_damage(self):
return sum(dice.get_dice() for dice in self.dices)
fire = Spell("fire", [d8])
ice = Spell("ice", [d6, d6])
wind = Spell("wind", [d4, d4, d4])如果需要具有静态损坏值的Spell,则可以创建Dice的子类,其get_dice方法总是返回一个固定值:
class StaticDice(Dice):
def get_dice(self):
return self.value这样您就可以创建一个具有静态伤害值的法术,如下所示:
earth = Spell("earth", [StaticDice('s10', 10)])https://stackoverflow.com/questions/53661175
复制相似问题