2013-08-04 69 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()方法。 這樣做的另一種方法是修改難度函數,以便當他們接收到來自用戶的輸入時,檢查輸入是否等於「菜單」,如果是,則調用菜單函數。 –