在基于文本的游戏中多次重复代码部分
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()
我正在制作一个基于文本的游戏,它主要基于 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()