Я делаю игру, и один из методов вычисляет базовые числа попаданий персонажа на основе значений умений. В настоящее время метод рассчитывает каждое значение индивидуально, так как каждый навык может использоваться на короткой, средней и большой дистанции.
Первоначально я думал, что смогу объединить навыки в кортеж и перебирать его, динамически создавая каждое число попаданий. Но я не знаю, возможно ли это на самом деле, так как у меня в настоящее время каждый номер попадания назначен его собственной переменной.
Я также думал о создании метода для каждого диапазона и передаче кортежа в качестве аргумента. Я мог бы создать новый кортеж или список с результирующими значениями, а затем назначить их отдельным переменным, но я не вижу, как это будет лучше, чем делать это таким образом, за исключением того, что он не будет выглядеть так скопировано и вставлено .
Вот что у меня сейчас есть:
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 делает это вручную, не очень-то, и я также хочу «на будущее» сделать это на случай, если ситуация изменится в будущем.