全局功能块?

时间:2013-08-07 23:44:08

标签: python function

我目前正在使用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()

所以我想知道是否有可能为所有级别创建一个全局功能块? 当您输入帮助时,您将获得帮助(),然后它会自动返回到您刚来的功能块。

我真的希望你能理解我的意思,我真的很感激能得到的所有帮助。

4 个答案:

答案 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行代码。