Python 无休止的循环,玩家和敌人互相攻击

Python 无休止的循环,玩家和敌人互相攻击,python,Python,当我尝试与玩家对抗敌人时,我会不断地得到一个无休止的循环。这是一个更大的基于文本的地下城爬虫,它可以让你得到物品和敌人变得更强大 import random import sys player = { 'name': 'unknown', 'class': 'unknown', # 'location': r1, 'HP': 100, 'ap': 1, 'dp': 1, 'mp': 1, 'ap_item': 1, 'dp

当我尝试与玩家对抗敌人时,我会不断地得到一个无休止的循环。这是一个更大的基于文本的地下城爬虫,它可以让你得到物品和敌人变得更强大

import random
import sys

player = {
    'name': 'unknown',
    'class': 'unknown',
    # 'location': r1,
    'HP': 100,
    'ap': 1,
    'dp': 1,
    'mp': 1,
    'ap_item': 1,
    'dp_item': 1,
    'ms_itme': 1
}

enemy1 = {
    'HP': 50,
    'ap': .2,
    'dp': .2,
    'name': 'Rat'
}

enemy2 = {
    'HP': 50,
    'ap': .2,
    'dp': .2,
    'name': 'Skeleton'
}

enemy5 = {
    'HP': 75,
    'ap': .5,
    'dp': .5,
    'name': 'Skeleton pack'
}

def enemy_attack(oppo1, player):
    while player['HP'] > 0:
        if oppo1['ap'] == .2:
            rand_damage = random.randint(8, 25)
            attack_damage = rand_damage * player['dp']
            final_damage = attack_damage * player['dp_item']
            player['HP'] - final_damage
            print(final_damage, "damage!")
            break
        elif oppo1['ap'] == .5:
            rand_damage = random.randint(16, 50)
            attack_damage = rand_damage * player['dp']
            final_damage = attack_damage * player['dp_item']
            player['HP'] - final_damage
            print(final_damage, "damage!")
            break
        else:
            print("enemy_attack is wrong")
            break

def attack(player, oppo1):
    while oppo1['HP'] > 0:
        rand_damage = random.randint(8, 32)
        attack = rand_damage / player['ap']
        attack_damage = attack / player['ap_item']
        final_damage = attack_damage * oppo1['dp']
        player['HP'] - final_damage
        print(final_damage, " damage!")
        break

def fight(player, oppo1):
    while (player['HP'] > 0) and (oppo1['HP'] > 0):
        print(player['name'], "attacks", oppo1['name'])
        attack(player, oppo1)
        if oppo1['HP'] <= 0:
            print(player['name'], "is winner")
            oppo1['HP'] = 0
            print(player['name'], "HP:", player['HP'])
            print(oppo1['name'], "HP:", oppo1['HP'])
            break
        else:
            print(oppo1['name'], "attacks", player['name'])
            enemy_attack(oppo1, player)
            if player['HP'] <= 0:
                print(oppo1['name'], "is winner")
                player['HP'] = 0
                print(player['name'], "HP:", player['HP'])
                print(oppo1['name'], "HP:", oppo1['HP'])
                print("game_over", player['name'])

def encounter(player, oppo1):
    print("You have come to a door, you open the door and slowly enter.")
    fight(player, oppo1)
    input('Press any key to continue')

def main():
    print("encounter 1")
    encounter(player, enemy1)
    input("press enter to continue")
    print("encounter 1")
    encounter(player, enemy2)
    input("press enter to continue")
    print("encounter 1")
    encounter(player, enemy5)
    input("press enter to continue")

main()
我真的需要一些帮助。我尝试了一系列不同的想法来获得乘数和所有的战斗逻辑,但它只是无休止地循环玩家和敌人互相攻击。

这场永无休止的战斗的原因是什么 在几个地方,您都有这样的功能:

player['HP'] - final_damage
while oppo1['HP'] > 0:
    # ...
    break
这段代码不会在播放器中存储任何值——它只是减去HP值,然后将该值扔掉。要存储该值,需要在其中输入等号:

player['HP'] -= final_damage
同时,你似乎没有尝试在任何地方降低对手的生命值。为此你需要

oppo1['HP'] -= final_damage
在代码中的某个点

因为玩家的血量和对手的血量永远不会减少,所以战斗功能中while循环中的条件始终为真,战斗将永远持续下去

关于while循环和break语句 顺便说一下。。。在我发表评论时,我注意到您可以做一些其他事情来改进代码

在攻击功能中,您有:

player['HP'] - final_damage
while oppo1['HP'] > 0:
    # ...
    break
这个break语句将使while循环在第一次运行时退出,因此您也可以使用if语句

if oppo1['HP'] > 0:
    # ...
希望这有帮助