0

(参考までに、別の質問をしました-回答されました-同じスクリプトについてここで

私は 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 として返されます。

繰り返しになりますが、問題の「武器」と「チャー」のコードを提供できますが、それがうまくいくかどうかはわかりませんが、不要なものはすべて省こうとしています。ここで提供した内容に基づいて、何か問題があるように見えますか?

ご協力ありがとうございました。

4

1 に答える 1