-1

だから私は次のコードを持っています:

    def monsterturn():
        global monster
        global playerhp
        turn = True
        print "Rolling for", monster, "...(14 or better to hit)"
        time.sleep(1)
        if r > 14:
            print r, "- The", monster, "hit you!"
            playerhp-=1
            time.sleep(0.5)
            print "Your HP:", playerhp
            if playerhp == 0:
                    turn = False
                    time.sleep(0.5)
                    print "YOU HAVE BEEN SLAIN."
            else:
                    turn = False
                    time.sleep(1.5)
                    playerturn()
        elif r < 14:
            print r, "- The", monster, "missed you."
            turn = False
            playerturn()
    r = randrange(1, 21)

関数は、グローバル変数 playerhp の代わりに Monsterhp、r の代わりに r2、およびモンスターの代わりにプレイヤーのダイアログを除いて、playerturn()まったく同じように構成されています。monsterturn()問題は、ランダムな整数を一度計算してからそれを保持することです。毎回異なるランダム整数を計算するにはどうすればよいですか?

また、関数playerturn()が呼び出され、最後に がトリガーされmonsterturn()、これが をトリガーplayerturn()し、というように、誰かが死ぬまで続きます。

4

2 に答える 2

1

問題が発生する可能性があるため、全体的な設計を再考する必要があると思います。これは主に理論的なものですが、戦いが長引くほど呼び出しスタックが深くなり、最終的にはスタック オーバーフローが発生する可能性があります (正常に実行し続けたとしても、メモリ消費量も増加します)。

代わりに、ゲームを続行するかどうかのブール値を返すように関数を作り直すことをお勧めします。その後、両方の関数が true を返す限り、ループすることができます。これは、基本的にゲームが続行されることを意味します。

while playerturn() and monsterturn():

各ヒット/攻撃をランダムにするには、r使用する直前にランダム値を再割り当てします:

...
time.sleep(1)
r = randrange(1, 21)
if r > 14
    ...
于 2013-07-22T16:41:48.127 に答える