2013-10-06 3 views
1

Я кодировал текстовую приключенческую игру. Когда программа запускается, вызывается метод Boot(), считая% APPDATA% .ilan \ texert для установки файлов (между тем есть только имя пользователя.txt). После Boot() он переходит к MainMenu(), где пользователь может выбрать игру, перейти к параметрам или выйти. Когда пользователь переходит в меню «Параметры» и возвращается, затем пытается сыграть в игру или вернуться в меню опций, игра завершается, что не должно происходить. Source
Boot() = Строка 455
MainMenu() = Строка 579
Main() = Строка 50 Я считаю, что это происходит потому, что int объявлен в самом методе, а потому, что метод вызывается несколько раз переменная int сохраняет свое прежнее значение , Есть ли способ исправить это?Метод вызова на C# приводит к выходу программы

+0

У вас нет цикла в 'public static void Main()'. Поместите контрольную точку в этот метод и используйте шаг за шагом, и вы увидите, что происходит не так. EDIT: Это говорит о том, что вам действительно нужно переосмыслить вашу * целую архитектуру ... – dialer

+0

Я знаю, что моя архитектура сосет, я всего лишь новичок .. (я понятия не имею, как улучшить свой код, поэтому я делаю то, что есть) – Ilan321

ответ

0

В строке 610 вы извлекаете результаты вашего метода MainMenu, а затем вызываете свой метод OptionMenu в строке 617, но после срабатывания метода OptionMenu() вы ничего не делаете, чтобы ваше приложение не прекращалось, как только управление возвращается назад к методу Main(). Даже несмотря на то, что вы вызываете MainMenu() в вашем методе OptionMenu(), нет ничего, оценивающего результаты этого вызова, поэтому все, что вы делаете, это написать меню на консоль и вернуться в 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

[Здесь это так.] (Http://pastebin.ca/2463151) Я не знаю, почему он не работает, я попытался поставить OptionMenu() в цикл while, но такую ​​же проблему. – Ilan321

Смежные вопросы