如何在基于文本的Python游戏中将用户输入存储为用户名,而无需程序以输入提示启动?

问题描述 投票:0回答:2

我正在为我的编程课创建一个基于文本的角色扮演游戏。该游戏由许多自定义功能组成。当我调用函数player_World()时,会出现一条提示,要求用户/玩家为其角色命名,并存储为变量player_Name。在接下来的一行中,它欢迎玩家加入游戏并使用他们输入的名称。

由于该变量存储在player_World()函数中,因此在诸如east_Village()等函数中未定义,无法使用。

如何存储玩家的用户名,以便该变量可以在我的任何自定义函数中使用?

我看过一些关于全局变量的帖子,但我不确定这是否是正确的做法。

到目前为止,我已经尝试在文件顶部的#import 部分中定义

player_Name = input("What will this hero's new name be?\n")
。当然,这意味着在运行程序时,它首先要求用户输入(在我的游戏的“序幕”之前),这并不理想。在每个函数中定义变量是多余的,所以我不知道在这里要做什么。

我希望我的问题有意义,提前谢谢您!

python function variables game-development
2个回答
1
投票

这是问题的最简单形式:

def foo():
    x = input()

def bar():
    print(x)

在不使用全局变量的情况下,一个好的经验法则是问:“如何为每个函数提供所需的输入,并获取输出?”

通常,您可以将“输入”作为参数,将输出作为返回。在这个最小的例子中,我们可以像这样解决问题:

def foo():
    return input()

def bar(name):
    print(name)

要将其链接在一起,我们可以这样做:


If __name__ == "__main__":
    name = foo()
    bar(name)


1
投票

基于类的方法可以有效地管理游戏不同部分的玩家信息,包括他们的姓名。

以下是如何使用类来实现此目的的基本示例:

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)

为什么要使用类?

  1. 封装

    Player
    类封装了与玩家相关的数据和行为。这使您的代码更有条理且更易于理解。

  2. 可重用性:您可以在游戏的各个部分轻松重用

    Player
    类,而无需重新定义玩家的属性或方法。

  3. 可扩展性:随着游戏的发展,您可以向

    Player
    类添加更多属性和方法,而无需显着修改游戏的现有结构。

  4. 避免全局变量:使用类可以避免对全局变量的需要,这可能会导致代码难以调试和维护。全局变量可以在程序中的任何位置进行更改,因此很难追踪某些更改的位置。

  5. 灵活性:如果您决定扩展游戏以包含多个玩家或 NPC,基于类的方法可以更轻松地管理这些不同的实体。

总而言之,通过使用类,您可以为游戏维护干净且模块化的结构,从而更易于管理和扩展。

© www.soinside.com 2019 - 2024. All rights reserved.