2013-10-06 18 views
1

我一直在編寫一個文本冒險遊戲。程序運行時,調用Boot()方法,讀取%APPDATA%.ilan \ texert來設置文件(同時只有username.txt)。在Boot()之後,它轉到MainMenu(),用戶可以選擇播放,轉到選項或退出。當用戶進入選項菜單並返回時,然後嘗試玩遊戲或返回到選項菜單,遊戲退出,這不應該發生。 Source
Boot() =線455
MainMenu() =線579
Main() =線504
我相信這是因爲int在方法本身聲明的,因爲該方法被調用多次int變量將保留其先前值。有沒有什麼辦法解決這一問題?C#調用方法導致程序退出

+0

您在'public static void Main()'中沒有循環。在這個方法中放置一個斷點並使用一步,然後你會發現哪裏出了問題。編輯:這就是說,你真的需要重新思考你的整個建築... – dialer

+0

我知道我的建築很爛,我只是一個初學者..(我不知道如何改善我的代碼,所以我照原樣) – Ilan321

回答

0

在第610行,您檢索MainMenu方法的結果,然後在第617行調用您的OptionMenu方法,但是一旦OptionMenu()方法觸發,您不會執行任何其他操作來防止您的應用程序在控制返回時結束到Main()方法。即使你在你的OptionMenu()方法中調用MainMenu(),也沒有什麼評估該調用的結果,所以你只需將菜單寫入控制檯並返回Main()。您需要在Main()方法中放置一個循環,它將重複調用MainMenu()方法,評估選定的結果,其他菜單選項(如OptionMenu())將返回到此循環,而不是自己調用主菜單。類似這樣的:

string whatToDo = "null"; 
bool exitApp = false; 
while (!exitApp) 
{ 
    whatToDo = AdvTime.MainMenu(); 
    if (whatToDo.Contains("play")) 
    { 
     Menu("null", false); 
    } 
    if (whatToDo.Contains("options")) 
    { 
     AdvTime.OptionMenu(); 
    } 
    if (whatToDo.Contains("exit")) 
    { 
     exitApp = true; 
    } 
    if (whatToDo.Contains("null")) 
    { 
     AdvTime.MMError("OM"); 
    } 
} 
+0

我試過了,但它仍然是一樣的。 – Ilan321

+0

如果您在pastebin更新代碼,我會再看一次。最終,所有東西都應該返回到這個循環,它應該循環並再次調用MainMenu(),直到用戶選擇Exit。如果你有其他地方你正在調用Environment.Exit(),那可能會繞過這個循環。 –

+0

[Here is is。](http://pastebin.ca/2463151)我不知道爲什麼它不工作,我試着把OptionMenu()放在while循環中,但同樣的問題。 – Ilan321