我正在制作口袋妖怪的基本版本,我有一个看起来像这样的函数:
global userhp, comphp
userhp = 100
comphp = 100
def doturn(attacker, enemy, move, attackerhp, enemyhp):
from random import randint
if move == 1:
dmg = randint(18, 25)
enemyhp -= dmg
print("\t" + attacker, "have done", str(dmg), "damage")
print("\t" + enemy, "now have", enemyhp, "health\n")
if move == 2:
dmg = randint(8, 35)
enemyhp -= dmg
print("\t" + attacker, "have done", str(dmg), "damage")
print("\t" + enemy, "now have", enemyhp, "health\n")
if move == 3:
dmg = randint(15, 22)
attackerhp += dmg
print("\t" + attacker, "have healed", str(dmg), "health")
print("\t" + attacker, "now have", attackerhp, "health\n")
以下是一个示例电话:
doturn(user, comp, 3, userhp, comphp)
我遇到的问题是改变attackerhp和enemyhp不会影响userhp和comphp。它保持在100,游戏无法进展。我需要一种改变全局变量的方法,但也可以在不将变量硬编码到函数中的情况下进行,因为这样只会对用户或计算机起作用。
我已经能够解决它,但我的解决方案是返回损坏值并将其应用于userhp并在此函数外部进行comphp。我可以为user和comp编写单独的函数,或者使用if语句检查是谁转向它并按照这种方式执行,但我非常希望保持这种紧凑。任何反馈都将不胜感激。
答案 0 :(得分:1)
因此您不需要将全局语句放在第一行。您只需要在更改变量的任何函数内部。
我的理解是你的问题是用户或计算机可能是攻击者还是防御者?我做对了吗?
在这种情况下,为什么不为攻击者和防御者创建一个对象,它存储他们的名字和hp。这样,您可以更新函数内的attacker.hp和defender.hp,而无需担心哪个是用户,哪个是防御者。
像这样的东西
class Player:
def __init__(self, name, hp):
self.name = name
self.hp = hp
完全摆脱全局变量。