首页 > 解决方案 > 游戏中的while循环问题(python文本游戏)

问题描述

我一直在做一个游戏,我所拥有的就是我放在下面的东西。问题在于,无论你是否成功,无论何时你逃离敌人,你都会逃跑,我不知道如何阻止这种情况发生。有没有人有什么建议?

编辑:为了解决问题,我删除了 if slime_rank1_chances > 0: 因为它应该在游戏开始时是 100%,我将 while slime_rank1_health != 0: 更改为 while slime_rank1_health > 0:

import random

#rng
dice = random.randrange(1,7)
critical_hit_chance = 15
run_chance = 10

#characters
name_1_health = 10
name_1_attack = 10
name_1_luck = 10
name_1_exp = 0

#enemies
slime_rank1_health = 10
slime_rank1_attack = 1
slime_rank1_luck = 1
slime_rank1_exp = 5
slime_rank1_chances = random.randrange(1,10)

#simulating an attack by a slime rank 1
if slime_rank1_chances > 0:
    print("you are suddenly attacked by a slime rank 1!")
    while slime_rank1_health != 0:
        if random.randrange(1, 16) == critical_hit_chance:
            name_1_health = name_1_health - (slime_rank1_attack*2)
            print("Its a critical hit!")
            print("you have lost " + str(slime_rank1_attack*2) + " health")
        else:
            name_1_health = name_1_health - slime_rank1_attack
            print("you have lost " + str(slime_rank1_attack) + " health")
        print("your current health is " + str(name_1_health))
        slime_rank1_choice1 = input("What will you do?: A)Attack B)Run [A/B]")
        while True:
            if slime_rank1_choice1 in ["A","B"]:
                break
        if slime_rank1_choice1 == "A":
            print("You attack slime rank 1")
            if random.randrange(1, 16) == critical_hit_chance:
                slime_rank1_health = slime_rank1_health - (name_1_attack*2)
                print("You attack and deal "+str(name_1_attack*2)+" damage")
                print("Its a critical hit!")
            else: 
                slime_rank1_health = slime_rank1_health - name_1_attack
                print("You attack and deal "+str(name_1_attack)+" damage") 
        elif slime_rank1_choice1 == "B":
            print("you have chosen to run")
            if random.randrange(1,11) == run_chance:
                print("you have succesfully escaped!")
                slime_rank1_health = slime_rank1_health - slime_rank1_health
            else: 
                print("you failed to escape")
                if random.randrange(1, 16) == critical_hit_chance:
                    name_1_health = name_1_health - (slime_rank1_attack*2)
                    print("Its a critical hit!")
                    print("you have lost " + str(slime_rank1_attack*2) + " health")
                else:
                    name_1_health = name_1_health - slime_rank1_attack
                    print("you have lost " + str(slime_rank1_attack) + " health")
        break

标签: pythonwhile-loop

解决方案


我认为您的问题是每次尝试运行时代码都会结束,无论您是否成功。您的 if/else 语句看起来不错,但无论哪种方式,它都会在最后遇到中断。

考虑创建一个函数来管理你的游戏玩法和更小的函数来管理运行、攻击、改变生命值等机制。这可能有助于你更好地组织代码并使事情更清晰。坚持下去——看起来不错!


推荐阅读