from random import randint
from time import sleep
pminatk = 0
pmaxatk = 4
playerhp = 15
def atk(minatk, maxatk):
return randint(minatk, maxatk)
def playerAtk(monsterhp):
dmg = atk(pminatk, pmaxatk)
monsterhp -= dmg
print ("Du gjorde %i skade. Monsteret har nå %i liv igjen" % (dmg, monsterhp))
sleep(1)
return monsterhp
def monsterAtk(mminatk, mmaxatk):
global playerhp
dmg = atk(mminatk, mmaxatk)
playerhp -= dmg
print ("Monsteret gjorde %i skade. Du har nå %i liv igjen" % (dmg, playerhp))
sleep(1)
def fight(monsterhp, mminatk, mmaxatk):
global playerhp
while monsterhp > 0 and playerhp > 0:
playerAtk(monsterhp)
if monsterhp > 0:
monsterAtk(mminatk, mmaxatk)
if playerhp > 0:
print ("Gratulerer! Du beseiret monsteret!")
else:
print ("Du døde!")
fight(5, 1, 2)
fight(6, 0, 2)
这应该是一个简单的战斗系统在一个文本为基础的冒险。现在我的问题是,怪物惠普总是回到原来的山谷后,playerAtk被执行。如果我选择monsterhp作为全局变量,那么在fight()结束后它将保持为0,其他所有怪物的hp也将保持为0。现在我可以有多个变量将不同的hp值分配给不同的怪物,但是有没有任何方法可以使用fight()函数的参数来实现这一点
你的直接问题是在你的
while
循环中当你调用playerAtk()
时,你从中返回monsterhp
,但实际上并没有在这个循环中使用它,这就是为什么你会看到怪物的生命值回到原来的值。第28行需要改为:而不是:
不过,正如一篇评论中所建议的,定义自定义类是值得研究的。我根据您的代码编写了以下示例来激发您的食欲:
有很多方法可以做到这一点。为了简单起见,我只编写了一个通用的
Character
类,我们可以用于玩家和怪物,但即使我们开始用子类来定制它们,例如战斗现在更通用了一些,我们也可以让怪物攻击玩家,因为它刚刚成为两个战斗角色的函数对于您最初的问题,尽管这里追求的好处是属性与它们的实例对象一起保持和持久化,这通常比处理和跟踪全局变量要容易得多
相关问题 更多 >
编程相关推荐