我目前正在使用Python制作游戏。只要您在游戏中获得帮助,只需输入帮助,即可阅读帮助部分。
唯一的问题是,我需要为每个级别添加一个功能块。
def level_01():
choice = raw_input('>>>: ')
if choice=='help':
level_01_help()
def level_012():
choice = raw_input('>>>: ')
if choice=='help':
level_02_help()
所以我想知道是否有可能为所有级别创建一个全局功能块? 当您输入帮助时,您将获得帮助(),然后它会自动返回到您刚来的功能块。
我真的希望你能理解我的意思,我真的很感激能得到的所有帮助。
答案 0 :(得分:4)
您实际上可以将帮助功能作为参数传递,这意味着您的代码可以变为:
def get_choice(help_func):
choice = raw_input('>>>: ')
if choice == 'help':
help_func()
else:
return choice
def level_01():
choice = get_choice(level_01_help)
def level_02():
choice = get_choice(level_02_help)
理想情况下,您应该为所有与界面相关的任务设置单独的模块,以便游戏和界面将是两个单独的实体。这应该使那些2911行更清晰,如果您决定更改接口(例如从命令行更改为Tkinter或Pygame),您将有更轻松的时间。只是我2¢
答案 1 :(得分:4)
处理这类问题的一个非常好的方法是使用内置的python帮助。如果将docstrings添加到函数中,它们将存储在名为 doc 的函数对象的特殊属性中。您可以使用以下代码访问它们:
def example():
'''This is an example'''
print example.__doc__
>> This is an example
you can get to them in code the same way:
def levelOne():
'''It is a dark and stormy night. You can look for shelter or call for help'''
choice = raw_input('>>>: ')
if choice=='help':
return levelOne.__doc__
这样做是保持代码和内容之间关系更加清晰的一种很好的方法(尽管纯粹主义者可能会反对意味着你不能使用pythons内置帮助函数来编写程序员文档)
我认为从长远来看,你可能会发现级别想要成为类而不是函数 - 这样你可以存储状态(有人找到1级中的键吗?是2级中的怪物还活着)并且做最大代码重用。粗略的轮廓将是这样的:
class Level(object):
HELP = 'I am a generic level'
def __init__(self, name, **exits):
self.Name = name
self.Exits = exits # this is a dictionary (the two stars)
# so you can have named objects pointing to other levels
def prompt(self):
choice = raw_input(self.Name + ": ")
if choice == 'help':
self.help()
# do other stuff here, returning to self.prompt() as long as you're in this level
return None # maybe return the name or class of the next level when Level is over
def help(self):
print self.HELP
# you can create levels that have custom content by overriding the HELP and prompt() methods:
class LevelOne (Level):
HELP = '''You are in a dark room, with one door to the north.
You can go north or search'''
def prompt(self):
choice = raw_input(self.Name + ": ")
if choice == 'help':
self.help() # this is free - it's defined in Level
if choice == 'go north':
return self.Exits['north']
答案 2 :(得分:1)
更好的解决方案是将您所在的级别存储为变量,并让帮助函数处理所有帮助。
示例:
def help(level):
# do whatever helpful stuff goes here
print "here is the help for level", level
def level(currentLevel):
choice = raw_input('>>>: ')
if choice=='help':
help(currentLevel)
if ...: # level was beaten
level(currentLevel + 1) # move on to the next one
答案 3 :(得分:1)
当然,总是可以概括。但是,由于您提供的信息很少(并假设“帮助”是唯一的常用功能),原始代码非常简单。我不会牺牲这个属性只是为了每级保存1行代码。