我正在为我的编程课创建一个基于文本的角色扮演游戏。该游戏由许多自定义功能组成。当我调用函数player_World()时,会出现一条提示,要求用户/玩家为其角色命名,并存储为变量player_Name。在接下来的一行中,它欢迎玩家加入游戏并使用他们输入的名称。
由于该变量存储在player_World()函数中,因此在诸如east_Village()等函数中未定义,无法使用。
如何存储玩家的用户名,以便该变量可以在我的任何自定义函数中使用?
我看过一些关于全局变量的帖子,但我不确定这是否是正确的做法。
到目前为止,我已经尝试在文件顶部的#import 部分中定义
player_Name = input("What will this hero's new name be?\n")
。当然,这意味着在运行程序时,它首先要求用户输入(在我的游戏的“序幕”之前),这并不理想。在每个函数中定义变量是多余的,所以我不知道在这里要做什么。
我希望我的问题有意义,提前谢谢您!
这是问题的最简单形式:
def foo():
x = input()
def bar():
print(x)
在不使用全局变量的情况下,一个好的经验法则是问:“如何为每个函数提供所需的输入,并获取输出?”
通常,您可以将“输入”作为参数,将输出作为返回。在这个最小的例子中,我们可以像这样解决问题:
def foo():
return input()
def bar(name):
print(name)
要将其链接在一起,我们可以这样做:
If __name__ == "__main__":
name = foo()
bar(name)
基于类的方法可以有效地管理游戏不同部分的玩家信息,包括他们的姓名。
以下是如何使用类来实现此目的的基本示例:
class Player:
def __init__(self):
self.name = None
def set_name(self):
self.name = input("What will this hero's new name be?\n")
def greet_player(self):
print(f"Welcome to the game, {self.name}!")
# Usage
player = Player()
def player_world(player):
player.set_name()
player.greet_player()
def east_village(player):
print(f"{player.name} enters the East Village...")
# Call the functions
player_world(player)
east_village(player)
封装:
Player
类封装了与玩家相关的数据和行为。这使您的代码更有条理且更易于理解。
可重用性:您可以在游戏的各个部分轻松重用
Player
类,而无需重新定义玩家的属性或方法。
可扩展性:随着游戏的发展,您可以向
Player
类添加更多属性和方法,而无需显着修改游戏的现有结构。
避免全局变量:使用类可以避免对全局变量的需要,这可能会导致代码难以调试和维护。全局变量可以在程序中的任何位置进行更改,因此很难追踪某些更改的位置。
灵活性:如果您决定扩展游戏以包含多个玩家或 NPC,基于类的方法可以更轻松地管理这些不同的实体。
总而言之,通过使用类,您可以为游戏维护干净且模块化的结构,从而更易于管理和扩展。