(参考までに、別の質問をしました-回答されました-同じスクリプトについてここで)
私は Python を学んでおり、これが私の最初のプログラムです。私は非常に基本的な RPG のようなゲームを作成しようとしています。キャラクターを選択し、そのキャラクターに武器を与えてから、キャラクターと武器の統計を使用する式に基づいたダメージで別のキャラクターを攻撃するように指示します。
私は明らかに間違ったことをしていると確信していますが、数式の右側で使用されている変数が独立して正しい値を返すにもかかわらず、[変数] = ______ 数式を取得して 1 以外を返すことはできません。
これは、私の「Char」(文字) クラスの外観です (提供しすぎている場合は申し訳ありませんが、役立つ可能性のあるものを何も除外しないようにしてください)。
def __init__(self, name):
self.name = name
self.hp = 300
self.mp = 10
self.strn = 1
self.dex = 1
self.armor = 0
self.xp = 0
self.items = []
self.spells = []
self.weapon = weapon
self.attack_speed = self.dex
self.intact_bones = ["right arm", "left arm", "right leg", "leg leg",
"skull", "sternum", "nose"] # JUST ASSUME RIGHT SIDE
# IS PRIMARY SIDE FOR NOW
self.broken_bones = [] ### define what to do per bone if bone is in this list
self.base_dmg = self.strn * self.weapon.wgt
self.break_bone_chance = (self.weapon.impact / 50) * 100
self.bleed_chance = (self.weapon.sharp / 50) * 100
self.strike_dmg = self.base_dmg # NEED TO ADD A RANDOM ELEMENT TO DAMAGE
def break_crit(self, target):
print "checking break_crit" # ALL THESE PRINTS ARE TEMPORARY TO TEST THE VARIABLES
print "self.break_bone_chance = %r" % self.break_bone_chance
print "self.base_dmg = %r" % self.base_dmg
print "self.strike_dmg = %r" % self.strike_dmg
print "len(target.intact_bones) = %r" % len(target.intact_bones)
print "self.weapon = %r" % self.weapon.name
print "self.weapon.impact = %r" % self.weapon.impact
print "self.weapon.wgt = %r" % self.weapon.wgt
if (randint(1, 100) <= self.break_bone_chance) and (self.strike_dmg > 0) and (len(target.intact_bones) != 0):
random.shuffle(target.intact_bones)
target.new_broken_bone = target.intact_bones.pop()
target.broken_bones.append(target.new_broken_bone)
print "%s hit %s square in the %s with his %s, cracking his %s!" % (self, target, target.new_broken_bone, self.weapon, target.new_broken_bone)
self.bleed_crit(target)
else:
self.bleed_crit(target)
def bleed_crit(self, target):
if randint(1, 100) <= self.bleed_chance and self.strike_dmg > 0:
pass
else:
pass # GO TO NEXT ACTION
def attack(self, target):
###self.strike_dmg = self.dmg - target.armor # NEED TO ADD A RANDOM ELEMENT TO DAMAGE###
if self.strike_dmg > 0:
target.hp -= self.strike_dmg
print "%s hit %s for %s damage!" % (self.name, target.name, self.strike_dmg)
self.break_crit(target)
else:
print "%s's strike did no damage!" % self.name
私の武器クラスは Equip トップレベル クラスに属しています。
class Equip(object):
wgt = 1
class weapon(Equip):
impact = 1
sharp = 1
def __init__(self, name):
self.name = name
desc = ""
chuck = weapon("Nun-chuck")
chuck.wgt = 3
chuck.impact = 6
chuck.sharp = 0
dean = Char("Dean")
dean.strn = 3
dean.dex = 8
dean.weapon = chuck
そして、単純に実行しています: dean.attack(hamilton) # hamilton は単に別の Char です
私を混乱させているのは、数字をテストするために「print ........」を使用すると、印刷された数字が正しいことです。たとえば、self.weapon.wgt は予想どおり 3 と表示され、self.strn は予想どおり 3 として出力され、self.weapon.impact は予想どおり 6 として出力されます。ただし、self.break_bone_chance では、self.weapon.impact が 1 として返されていることがわかり (一時的に self.break_bone_chance = self.weapon.impact のみにすることで)、self.strike_dmg も 1 として返されます。
繰り返しになりますが、問題の「武器」と「チャー」のコードを提供できますが、それがうまくいくかどうかはわかりませんが、不要なものはすべて省こうとしています。ここで提供した内容に基づいて、何か問題があるように見えますか?
ご協力ありがとうございました。