我正在制作游戏,其中一种方法根据技能值计算角色的基本命中数。该方法目前单独计算每个值,因为每个技能都可以在短距离、中距离和长距离上使用。
我最初认为我可以将技能组合成一个元组并对其进行迭代,动态创建每个命中数。但我不知道这是否真的可能,因为我目前将每个命中数分配给它自己的变量。
我还考虑为每个范围创建一个方法,并将元组作为参数传递。我可以使用结果值创建一个新的元组或列表,然后将它们分配给各个变量,但我不知道这样做会比这样做更好,只是它看起来不会那么复制和粘贴.
这是我目前拥有的:
def calcBaseHitNumbers(self, dict):
"""Calculate character's base hit numbers depending on skill level."""
self.skill_dict = dict
self.rifle = self.skill_dict.get('CRM', 0)
self.pistol = self.skill_dict.get('PST', 0)
self.big_gun = self.skill_dict.get('LCG', 0)
self.heavy_weapon = self.skill_dict.get('HW', 0)
self.bow = self.skill_dict.get('LB', 0)
#self.skill_tuple = (self.rifle, self.pistol, self.big_gun, self.heavy_weapon,
# self.bow)
#---Short range
## for skill in self.skill_tuple:
## self.base_hit_short = skill * 0.6
self.charAttribs.bhCRM_short = self.rifle * 0.6
self.charAttribs.bhPST_short = self.pistol * 0.6
self.charAttribs.bhHW_short = self.heavy_weapon * 0.6
self.charAttribs.bhLCG_short = self.big_gun * 0.6
self.charAttribs.bhLB_short = self.bow * 0.6
#---Med range
self.charAttribs.bhCRM_med = self.rifle * 0.3
self.charAttribs.bhPST_med = self.pistol * 0.3
self.charAttribs.bhHW_med = self.heavy_weapon * 0.3
self.charAttribs.bhLCG_med = self.big_gun * 0.3
self.charAttribs.bhLB_med = self.bow * 0.3
#---Long range
self.charAttribs.bhCRM_long = self.rifle * 0.1
self.charAttribs.bhPST_long = self.pistol * 0.1
self.charAttribs.bhHW_long = self.heavy_weapon * 0.1
self.charAttribs.bhLCG_long = self.big_gun * 0.1
self.charAttribs.bhLB_long = self.bow * 0.1
您将如何重构它以使其更具动态性?
编辑:我想我想做的是这样的:有一个元组(就像我注释掉的那个)并迭代它 3 次,每次根据每个特定的修饰符创建一个新值(对于每个技能)范围。然后将结果值自动分配给它各自的变量。
在我看来,这是有道理的。但是当我真正尝试编码时,我迷路了。我认为问题在于这是我编写的第一个“真正的”程序。我之前所做的只是小脚本。
这只是我程序的 0.1 版本,所以现在重构它并不重要。但是,手动执行此操作似乎非常不符合 Pythonic,我还想“面向未来”以防万一事情发生变化。