Python 3函数-列出其他函数的值

时间:2018-07-02 16:48:16

标签: python python-3.x

我正在开发一个非常简单的基于文本的冒险游戏。我已经能够做球员可以在一个房间到另一个房间移动的基础知识。为了增强游戏效果,我想要一个简单的战斗系统,但是在实现一个能够保持玩家健康得分的系统时遇到了麻烦。我提供了当前代码的示例,并添加了注释。

def update_score(x): #after the player has a combat round the variable 'a'is updated with remianing hit points
    a = []
    a.append(x)

def hit_points(): #when the player is in combat and takes a hit, 2 points are deducted and it is passed to the updated score function
    y -= 2
    updated_score(y)

def Continue():
    #how can i then reference the updated score in another function. If the player goes into another battle, the remaining battle points will have to be used and deducted from

我才刚刚开始熟悉函数,想知道是否可以将更新后的值从Updated_score函数传递给其他函数,或者何时再次调用命中点函数。

我试图避免使用全局变量。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:3)

尝试使用课程

class Player:
    def __init__(self):
        self.hit_points = 100

    def take_hit(self):
        self.hit_points -= 2

p = Player()

print(p.hit_points)
>>> 100

p.take_hit()

print(p.hit_points)
>>> 98

答案 1 :(得分:0)

写一堂课。考虑:

class GameState:
   score = 0
   life = 10

   def update_score(self, x):
      self.score += x  # you can use negative values here too and perform various checks etc.  

   def hit_points(self):
      self.life -= 2

您的数据存储在该类中,您可以使用这些方法进行操作。污染全球范围没有问题。

答案 2 :(得分:0)

我假设您的变量y是您以后需要更新并再次访问的变量。但是由于y的类型为int,因此不能通过引用传递给函数,这意味着除非将其定义为global,否则无法访问其更新值。这是全局变量的很好的介绍

https://www.geeksforgeeks.org/global-local-variables-python/

这是一篇非常详细的文章,关于哪些变量是通过值传递的,哪些是通过python中的引用传递的

https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/

对于您而言,您应该对hit_points

的定义进行以下更改
def hit_points():
    global y
    y -= 2
    updated_score(y)

但是,对于大型项目,我不建议使用global。这是典型的情况,您应该定义一个类并将y设置为成员变量

class Game:
    def __init__(self):
        self._y = 0

    def hit_point(self):
        self._y -= 2