私はゲームを作成していますが、方法の 1 つは、スキル値に基づいてキャラクターの基本ヒット数を計算します。各スキルは近距離、中距離、遠距離で使用できるため、この方法では現在、各値を個別に計算しています。
私は当初、スキルを組み合わせてタプルにし、それを繰り返し処理して、各ヒット数を動的に作成できると考えていました。しかし、現在、各ヒット番号を独自の変数に割り当てているため、実際に可能かどうかはわかりません。
また、範囲ごとにメソッドを作成し、タプルを引数として渡すことも考えました。結果の値を使用して新しいタプルまたはリストを作成し、それらを個々の変数に割り当てることもできますが、コピーして貼り付けたように見えないことを除いて、この方法よりも優れているとは思いません.
これが私が現在持っているものです:
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ではないように思われます。また、将来的に状況が変化した場合に備えて、これを「将来的に保証」したいと考えています。