【发布时间】:2014-10-03 13:16:27
【问题描述】:
我正在开发一个简单的基于文本的游戏,但遇到了一些我不知道该怎么做的事情。在我的游戏中,随着游戏的进行,你会获得健康、力量、防御、经验和等级。我做到了,所以每当发生战斗时,我都不必通过专门为战斗创建一个函数将其全部重新输入代码中。所以当我想要一场战斗发生时,我只需输入battle1() 就可以让战斗序列发生。唯一的问题是统计变量变化如此频繁,并且在我设置的代码中,如果您使用药水并受到攻击并且您的健康状况超过角色的最大健康状况(因级别而异),它将设置为您可以拥有的最大生命值(例如,玩家在拥有 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()。 谢谢!
【问题讨论】:
-
不是答案,但你不需要那些get和set方法,你可以直接访问属性。
-
@Robbie:直接使用变量即可。将其命名为
health而不是__health,然后使用player1.health而不是player1.getHealth()和player1.health = foo而不是player1.setHealth(foo)。 -
@Robbie:此外,即使您确实需要私有变量(在这种情况下不需要),您也不想使用双下划线。双下划线仅适用于您需要从子类中隐藏的方法(因此它们可以定义具有相同名称的方法而不会意外覆盖您的方法)。您可能想阅读PEP 8,Python 风格指南,其中解释了所有这些以及更多内容。
-
好吧,很抱歉我不小心删除了我的评论..
-
顺便说一句,我不知道为什么有人对你投了反对票,因为我认为这是一个合理的问题(新手不会让你变得愚蠢或懒惰,只会让你成为新手) .但是您绝对可以通过删除所有不相关的代码(请参阅MCVE)并更具体地了解您坚持的部分来改进它。
标签: python class variables object python-3.4