在基于文本的游戏中多次重复代码部分

Repeating sections of code multiple times in my text-based game

我正在制作一个基于文本的游戏,它主要基于 if-、elif- 和 else- 语句。但是,我还在游戏中的不同“区域”使用 while 循环。 (Play_loop、Main_loop、Shop_loop、Fish_loop 等)。

最近我实现了管理命令,我在游戏中使用这些命令来随时随地更改内容,我希望这些命令在每个循环中都可用。我还有一些我希望可用的通用命令(帮助、离开、退出、注销、转到另一个区域、检查库存等)。

我面临的问题是知道应该避免重复代码,但我想知道在这种情况下是否有必要这样做。我已经做了很多功能,让每个命令代码都非常短,一般在2-15行左右。

我应该将代码块添加到执行相同操作的函数中,然后重复该函数,还是保持原样?或者也许我应该做一些我什至没有想过的事情?

示例代码:

elif command == '/user info':
    if user.admin:
        print(f'User-list: {users}')
        who = input('Name of user: ').strip()
        who_user = admin_load_user(who, users)
        if who_user:
            print(who_user.info())
            print(who_user.display_inv())
        else:
            print(DNEError)
    else:
        print(PError)
elif command == '/add coins':
    who = input('Who gets coins? ').strip()
    amount = int(input('How much? ').strip())
    admin_add_coins(who, amount, users)
    save_users(users)

重复的代码通常应该放在函数中,这样您就可以更好地了解和控制它们在做什么。在那里,您还可以轻松地为它们提供默认参数并扩展代码,而不会膨胀程序的主要功能。

Here 是使用函数的简洁论证。它是为 C 编写的,但也适用于 python。

然后,正如 Jason Chia 指出的那样,您应该考虑将您的游戏构建到 类 中,因为它们解决了您提到的一些问题,并且通常是您需要的大型程序的重要控制工具协调不同的状态(例如,根据玩家的动作改变房间中的某些东西)。

This tutorial 可以提供帮助。

这是否回答了您的问题?

你应该使用装饰器风格来使阅读和写作变得更好。 在这里获取灵感:

def requires_admin(f):
    def wrapper(f):
        @wraps(f)
        def wrapped(*args, **kwargs):
            #if not admin:
                #return render_template('error.html')
            return f(*args, **kwargs)
        return wrapped
    return wrapper


@app.route('/admin/action')
@requires_admin
def AdminAction():
    whatyouwant()