我正在开发一个非常简单的基于文本的冒险游戏。我已经能够做球员可以在一个房间到另一个房间移动的基础知识。为了增强游戏效果,我想要一个简单的战斗系统,但是在实现一个能够保持玩家健康得分的系统时遇到了麻烦。我提供了当前代码的示例,并添加了注释。
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函数传递给其他函数,或者何时再次调用命中点函数。
我试图避免使用全局变量。
非常感谢任何帮助
答案 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