2013-10-06 2 views
1

J'ai codé un jeu d'aventure de texte. Lorsque le programme est exécuté, la méthode Boot() est appelée, en lisant% APPDATA% .ilan \ texert pour définir les fichiers (en attendant, il n'y a que nom_utilisateur.txt). Après Boot(), il va à MainMenu(), où l'utilisateur peut choisir de jouer, aller à des options, ou quitter. Lorsque l'utilisateur accède au menu Options et revient, puis essaie de jouer au jeu ou de revenir au menu des options, le jeu se ferme, ce qui n'est pas supposé se produire. Source
Boot() = Ligne 455
MainMenu() = Ligne 579
Main() = Ligne 504
Je crois qu'il est parce que le int est déclaré dans la méthode elle-même, et parce que la méthode est appelée plusieurs fois la variable int conserve sa valeur précédente . Est-ce qu'il y a un moyen de réparer ceci?C# méthode de rappel conduit à la sortie du programme

+0

Vous n'avez pas de boucle dans 'public static void Main()'. Mettez un point d'arrêt dans cette méthode et passez à l'étape suivante, et vous verrez ce qui ne va pas. EDIT: Cela dit, vous avez sérieusement besoin de repenser votre * architecture * entière ... – dialer

+0

Je sais que mon architecture est nulle, je ne suis qu'un débutant .. (Je n'ai aucune idée de la façon d'améliorer mon code, donc je le fais) – Ilan321

Répondre

0

À la ligne 610 vous récupérez les résultats de votre méthode MainMenu, puis appelez votre méthode OptionMenu à la ligne 617, mais une fois la méthode OptionMenu() déclenchée, vous ne faites rien pour empêcher votre application de se terminer à la méthode Main(). Même si vous appelez MainMenu() dans votre méthode OptionMenu(), il n'y a rien d'évaluer les résultats de cet appel, tout ce que vous faites est d'écrire le menu sur la console et de revenir à Main(). Vous devez placer une boucle dans la méthode Main() qui appellera plusieurs fois votre méthode MainMenu(), en évaluant les résultats sélectionnés, et d'autres options de menu comme OptionMenu() retourneront simplement à cette boucle plutôt que d'appeler le menu principal eux-mêmes. Quelque chose comme ceci:

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

Je l'ai essayé, mais c'est toujours le même .. – Ilan321

+0

Si vous mettez à jour votre code à pastebin, je vais jeter un autre coup d'oeil. En fin de compte, tout devrait revenir à cette boucle qui devrait se déclencher et appeler à nouveau MainMenu() jusqu'à ce que l'utilisateur choisisse de quitter. Si vous avez d'autres endroits où vous appelez Environment.Exit(), cela pourrait contourner cette boucle. –

+0

[Voilà.] (Http://pastebin.ca/2463151) Je ne sais pas pourquoi ça ne marche pas, j'ai essayé de mettre le OptionMenu() dans une boucle while, mais le même problème. – Ilan321