1

LPTHWの演習 36 からゲームを動作させようとしています。

戦闘時以外は、ゲーム全体を機能させることができます。ここが私が問題だと思うところです。

def combat_engine():    
    global wins, hit_points, current_hp
    if monster_current_hp or current_hp > 0:
        print "You can type 'a' for attack, or 'q' for quit, choose one."
        answer = raw_input(":> ")
        if 'a' in answer:
            attack(monster)
            attack('player')
            combat_engine()
        elif 'q' in answer:
            print t.white_on_red("You give up and are devoured by the %s.") % monster
            exit(0)
        else:
            print "I dont understand %s." % answer
            next()
            combat_engine() 
    elif monster_hp == 0:
        print "You defeated the %s, congradulations %s!" % monster, name
        wins = wins + 1
        if wins == 5:
            you_win()
        elif victim == 'player':
            hit_points = hit_points + d6()
            current_hp = hit_points
            print "You feel hardier."
            next()
            barracks()
    elif current_hp == 0:
        print "You have been deafeted by the %s, better luck next time." % monster
        next()
        exit(0)

    else: 
        print "Bug Somewhere"

バグはこの関数のどこかにあると思います。各キャラクターのHP値をプリントアウトすると、モンスターのHPが-2になった後も戦闘が続いていました。多分それはブール値の問題ですか?

私がやりたいことは、勝つためにすべての統計調整を行い、負けた場合はゲームを終了することです. 私はこれを乗り越えて、私の人生をより簡単にするクラスとディクテーションについて学び始めたいと思っています。もっと情報を投稿する必要があるかどうか教えてください。私はこれが初めてで、ここに質問を投稿するのはまだ得意ではありません。

前もって感謝します!

4

2 に答える 2

1

コードの最後の部分では、関数d100()を呼び出すのではなく、値 d100 を呼び出します。それは確かにあなたがやりたいことではありません。

   if d20() >= monster_to_hit and d100() <= monster_crit:
        print "The %s scored a critical hit against you!" % monster
        hit_points = hit_points - (monster_dmg * 3)
        next()
    elif d20 >= monster_to_hit and d100() > crit:
        print "The %s strikes you!"
        hit_points = hit_points - monster_dmg
        next()

Pythonでデバッグするときのメインワードは「印刷」です。何が起こっているのかを理解するために、できるだけ自由に印刷してください。

例:

# attack function
def attack(victim):
    dice20 = d20()
    dice100 = d100()

    print "victim == monster", victim == monster    

    print dice20
    print dice100
    print to_hit
    print crit
    print monster_current_hp
    print mod_dmg 
    print mod_dmg * 3
    print monster_to_hit
    print monster_crit
    print hit_points
    print monster_dmg
    print monster_dmg * 3

    global monster_current_hp, current_hp, to_hit, crit, hit_points
    if victim == monster:
        if dice20 >= to_hit and dice100 <= crit:
            print "You scored a critical hit against the %s!" % monster
            monster_current_hp = monster_current_hp - (mod_dmg * 3)
            next()
        elif dice20 >= to_hit and dice100 > crit:
            print "You strike the %s!" % monster
            monster_current_hp = monster_current_hp - mod_dmg
            next()
        else:
            print "The %s evades your attack!" % monster
            next()
    else:
        if dice20 >= monster_to_hit and dice100 <= monster_crit:
            print "The %s scored a critical hit against you!" % monster
            hit_points = hit_points - (monster_dmg * 3)
            next()
        elif dice20 >= monster_to_hit and dice100 > crit:
            print "The %s strikes you!"
            hit_points = hit_points - monster_dmg
            next()

戦闘エンジンで同じことを行い、無限ループが表示されるのを確認します。次に、ループする理由が明確にわかるまで、役に立たない情報でトレースを肥大化させる役に立たないプリントを削除します。何らかの値が原因で、ブール値の if テストが期待どおりに動作しないためです...そのようなものです。

于 2012-10-11T21:10:46.540 に答える