我正在制作一个简单的基于文本的游戏,我遇到了一些我不知道该怎么做的事情。在我的游戏中,当你在游戏中前进时,你会获得健康,力量,防守,xp和等级。每当有战斗时我都会这样做,我不需要将它全部重新输入到代码中,通过专门为战斗制作一个功能。因此,当我想要一场战斗发生时,我只需输入battle1()即可发生战斗序列。唯一的问题是stat变量经常变化,而且在我设置的代码中,所以如果你使用药水并受到攻击并且你的生命值高于你角色的最大生命值(从一个级别到另一个级别),它将会设置为你可以拥有的最大健康状态(例如,当玩家拥有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()。 谢谢!
答案 0 :(得分:1)
那么,有没有办法让它如此,例如,当你的等级为5时,你的最大生命值被设定为15而不是10?
是。除了他的“当前健康状况”之外,您还需要为玩家存储“最大健康状况”:
if player1.getHealth() > player.getMaxHealth()
player1.setHealth(player.getMaxHealth())
正如Padraic在评论中解释的那样,你不需要在Python中使用这样的getter和setter,它通常被认为是糟糕的风格。所以最好这样写:
if player1.health > player1.max_health:
player1.health = player1.max_health
您可以使用min
:
player1.health = min(player1.health, player1.max_health)
另外,如果你可以动态计算最大健康状况(也许10 + level
?),你可以为它编写一个函数,并在需要时调用该函数,而不是将其存储为额外的属性。
关于Python的一个简洁的事情是,你可以从属性开始,并使用@property
将其更改为计算值,而不必将其转换为函数:
@property
def max_health(self):
return 10 + self.level
答案 1 :(得分:0)
将责任移交给玩家,例如:
def changeHealth (self, delta):
self.__health += delta
maxHealth = 10 if self.__level < 5 else 15
if self.__health > maxHealth:
self.__health = maxHealth
elif self.__health < 0
self.__health = 0