我正在做一个简单的基于文本的游戏,我遇到了一些我不知道该怎么做的事情。在我的游戏中,你获得生命值,力量,防御,经验值和等级。我做了这样的事情,每当有一场战斗,我不必重新输入所有的代码,通过专门为战斗做一个函数。我只想在战斗中发生一场战斗。唯一的问题是统计变量经常变化,在代码中我设置了它,所以如果你使用药剂被攻击,并且你的生命值超过了你的角色的最大生命值(每个级别的生命值不同),它将被设置为你能拥有的最大生命值(例如,玩家在15点生命值时使用药剂,他们的最大生命值是15,它将保持在15生命值,而不是增加到17)。这是我的代码:
class player:
def __init__ (self, name, health, strength, defense):
self.__health = health
self.__strength = strength
self.__defense = defense
self.__name = name
def getName(self):
return self.__name
def getHealth(self):
return self.__health
def getStrength(self):
return self.__strength
def getDefense(self):
return self.__defense
def getPotion(self):
return self.__potion
def subHealth(self, num):
self.__health -= num
return self.__health
def setHealth(self, h):
self.__health = h
def main():
name1 = input("What would you like your name to be?")
print("Hello,", name1, "you are on a quest to save otis from the evil Dongus. You must slay him, or Otis will poop.")
player1 = player(name1, 10, 2, 1)
enemy = player("Rat", 15, 0, 0)
print("Your stats are, health:", player1.getHealth(), "strength:", player1.getStrength(), "and defense:", player1.getDefense())
print("Fight.")
attack =input("Type 1 to attack.")
if attack == "1":
enemy.subHealth(player1.getStrength()-enemy.getDefense())
**if enemy.getHealth()>15:
enemy.setHealth(15)**
print(enemy.getName()+"'s health is",enemy.getHealth())
player1.subHealth(enemy.getStrength()-player1.getDefense())
**if player1.getHealth()>10:
player1.setHealth(10)**
main()
粗体部分是我所说的代码部分。那么,有没有什么办法可以做到呢,比如,当你5级的时候,你的生命上限被设定为15,而不是10?记住,在战斗中你的敌人会伤害你,所以你不能只做player1.getHealth()。 谢谢!在
把责任推给玩家,例如:
是的。除了玩家的“当前生命值”之外,你还需要为他存储一个“最大生命值”:
正如Padraic在一篇评论中解释的那样,在Python中不需要这样的getter和setter,而且它通常被认为是不好的风格。所以最好这样写:
^{2}$您可以使用
min
将其写得更简洁一些:另外,如果max health是可以动态计算的(可能是
10 + level
?),您可以为此编写一个函数,并在需要时调用该函数,而不是将其存储为一个额外的属性。在Python的一个精妙之处在于,您可以从一个属性开始,然后通过使用
@property
将其更改为计算值,而不必将其转换为函数:相关问题 更多 >
编程相关推荐