Python 3.4中如何使函数改变变量?

2024-10-03 11:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个简单的基于文本的游戏,我遇到了一些我不知道该怎么做的事情。在我的游戏中,你获得生命值,力量,防御,经验值和等级。我做了这样的事情,每当有一场战斗,我不必重新输入所有的代码,通过专门为战斗做一个函数。我只想在战斗中发生一场战斗。唯一的问题是统计变量经常变化,在代码中我设置了它,所以如果你使用药剂被攻击,并且你的生命值超过了你的角色的最大生命值(每个级别的生命值不同),它将被设置为你能拥有的最大生命值(例如,玩家在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()。 谢谢!在


Tags: 代码nameselfreturndefstrengthplayerprint
2条回答

把责任推给玩家,例如:

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

So, is there any way to make it so, for example, when you're level 5 your max health is set to 15, rather than ten?

是的。除了玩家的“当前生命值”之外,你还需要为他存储一个“最大生命值”:

if player1.getHealth() > player.getMaxHealth()
    player1.setHealth(player.getMaxHealth())

正如Padraic在一篇评论中解释的那样,在Python中不需要这样的getter和setter,而且它通常被认为是不好的风格。所以最好这样写:

^{2}$

您可以使用min将其写得更简洁一些:

player1.health = min(player1.health, player1.max_health)

另外,如果max health是可以动态计算的(可能是10 + level?),您可以为此编写一个函数,并在需要时调用该函数,而不是将其存储为一个额外的属性。在

Python的一个精妙之处在于,您可以从一个属性开始,然后通过使用@property将其更改为计算值,而不必将其转换为函数:

@property
def max_health(self):
    return 10 + self.level

相关问题 更多 >