2013-08-04 62 views
1

因此,我定义了我的游戏作为mainmenu的初始开放,并在其中打印了几个选项,可以选择一些选项,比如关卡的级别,或者他们可以看到游戏的帮助。当他们去帮忙时,我希望他们可以选择回到主菜单,因此我做了main mainmenu()。然而,在我的帮助菜单中,即使我已经声明,如果他们键入菜单或菜单,它应该在mainmenu上回拨,它不会执行任何操作。我们有一个模块,我们必须使用,这就是为什么我要使用的东西,如p.next()这实际上意味着它监听用户输入,这样就忽略这个问题:)如何调用一个类内的def

这里的代码

 def mainmen(): 
     p.write("Welcome to 'The Great Escape'!\n") 
     p.write("\nPlease type what dificulty you would like to play the game,\nthe options  are Easy, Medium or Hard\n") 
     p.write("\nHowever, if you need help please type Help for instructions\n") 
     p.write(">>>") 

     dificulty = p.next() 

     if dificulty == "easy" or dificulty == "Easy": 
      p.clear() 
      p.write("The Great Escape") 
      easy() 

     elif dificulty == "medium" or dificulty == "Medium": 
      p.clear() 
      p.write("The Great Escape") 
      medium() 

     elif dificulty == "hard" or dificulty == "Hard": 
      p.clear() 
      p.write("The Great Escape") 
      hard() 


     elif dificulty == "help" or dificulty == "Help": 
      p.clear() 
      p.write("Welcome to 'The Great Escape' instructions\n") 
      p.write("\nTo complete the level you must move your Turtle around the\nline without touching the line itself\n") 
      p.write("\nControls\n") 
      p.write("Forward - 'W'\n") 
      p.write("Left  - 'A'\n") 
      p.write("Backwards - 'S'\n") 
      p.write("Right  - 'D'\n") 
      p.write("\nPlease type 'Menu' to go back to the main menu,\nor 'Exit' to quit the game\n") 
      p.write(">>>") 

**`here is my help menu if statements, I want it so that if they type Menu or menu they get taken back to the main menu.`** 

helpmenu = p.next() 
if helpmenu == "Menu" or helpmenu == "menu": 
    p.clear() 
    mainmenu() **<<This should call on the mainmenu but it doesn't??** 

elif helpmenu == "Exit" or helpmenu == "exit": 
    p.clear() 
    p.write("Hope you play soon!") 
+0

我确定这是重复的,但我找不到其他问题... –

+0

我也推荐一本好的Python书籍来帮助您学习基础知识。现在看来最好的一个,至少对那些免费的人来说,就是Zed Shaws“以艰难的方式学习Python”。 http://learnpythonthehardway.org/ –

+3

你甚至不需要上课。只需将mainmenu()定义为顶层函数并简化代码即可。 (请注意,如何在方法内部不使用'self' - 这暗示着你根本不需要它是一种方法)。 –

回答

0

你必须对类实例化​​为一个对象:

menu = mainmenu() 
menu.mainmen() 
+0

谢谢你的回答Lennart不幸的是,Python shell指出菜单没有定义。所以我也尝试了mainmen.mainmenu,但它再次表明主人没有定义。 – Daniel

+1

@丹尼尔:不,你现在说的是不正确的。第一行定义了“菜单”。它不能说它没有被定义。你做错了。 –

0

在一般笔记,然后才能调用类的方法,你必须实例化类,然后你可以调用与点符号不同的方法。

回到你的情况,变量p是什么?如果你的代码不起作用,Lennart的答案就是如何做到这一点,这是你底部if语句的问题。您正在执行语句

helpmenu = p.next() 

然后您正在if语句中检查helpmenu的值。不知道什么p是和它的next()方法做什么,我不能给一个真正有用的答案,但让我们说,

p.next() 

返回或者“菜单”或“退出”。在这种情况下,你应该写代码的最后部分如下:

# Note that helpmenu is either "menu" or "exit", so either the if block will be 
# executed or the elif block will be executed. 
if helpmenu == "Menu" or helpmenu == "menu": 
    p.clear() 
    m = mainmenu() 
    m.mainmen() 

elif helpmenu == "Exit" or helpmenu == "exit": 
    p.clear() 
    p.write("Hope you play soon!") 

话虽如此,我建议你插入打印语句helpmenu = p.next(后),这样就可以检查什么价值该行之后的帮助菜单。

其他的东西,我在你的代码注意:

  • 您可以使用difficulty.lower()==“易”(和helpmenu类似),这样你就不必写出所有可能的选择。
  • 考虑在if语句块中添加else语句。如果没有匹配if/elif块,您的代码将不会执行任何操作,并且用户不会知道它们做错了什么。
  • 在这里定义一个类是很没用的。你可以直接编写mainmen()函数,它可以工作。您不需要为此使用创建一个对象。

我希望这可以帮助,如果您需要任何进一步的帮助,请让我知道,我会尽力帮助尽我所能。

+0

你好lbanoglu,这是一个非常详细和伟大的投入!但是我真的错过了人们需要知道我的整个场景才能提供帮助的观点。所以在大学他们已经创建了一个名为Py110的模块,它包含了我们可以使用的所有东西(它确保它不可能从Internet复制粘贴)因此,在我的代码开始时,我有p = Py110.Py110在Py110文件中我们有一个巨大的函数库等等。所以,当我写入>> p.next()<<这是定义,以便它从键盘读取一个字符串。 – Daniel

+0

所以当我输入mainmenu = p.next()时,它实际上是我们说mainmenu =用户输入的方式。如果我们想要听一个整数,我们也有nextInt,要做到这一点,我们将使用p.nextInt()我想你现在得到的主旨:)但除此之外,我需要了解如何创建主菜单,以便它显示游戏何时打开,但我也想要一种方式,以便我可以再次调用相同的代码,所以我不会最终得到污点代码。最初我使用了class mainmenu:然后把它下面的所有代码都捆绑起来,代码在启动时执行,但是当我尝试调用它时,我得到错误 – Daniel

+0

啊,你可以为整个游戏创建一个类并定义方法medium(), easy()和hard()以及menu()和run()方法,以便在实例化游戏对象后调用run()方法。 这样做的另一种方法是修改难度函数,以便当他们接收到来自用户的输入时,检查输入是否等于“菜单”,如果是,则调用菜单函数。 –