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:
# ...
希望这有帮助