Laden...

Probleme mit if und else

Erstellt von BoycottNestle vor einem Jahr Letzter Beitrag vor einem Jahr 556 Views
B
BoycottNestle Themenstarter:in
2 Beiträge seit 2022
vor einem Jahr
Probleme mit if und else

Hallo Community,
Ich versuche ein kleines RPG zu schreiben und nebenbei die Sprache C# zu lernen, habe aber Probleme mit der if - else - Schleife.
Seltsamerweise reagiert das Programm umgekehrt auf die Buchstaben 'u' für umsehen und 'f' für fliehen.
Könnt ihr mir sagen wo der Fehler liegt?


 //Wiederkehrende Ausgabe der Spieldaten
            string spieldaten = "Spieldaten:  " + "Game: " + play + "  Lv: " + lv + "  EP: " + ep + "  HP: " + hp +
                "  Rsk: " + rsk + "  laufen: " + laufen + "  sprechen: " + sprechen + "  hören: "
                + hören + "  sehen: " + sehen;
            Console.WriteLine("Du befindest dich in einem Zimmer ohne Fenster.\nDu hast keine Erinnerung an die " +
                "Vergangenheit, dein einziger Hinweis ist ein kleiner Zettel auf dem Boden.\nDu nimmst ihn auf und ließt:\n" +
                "Achte darauf, kein hohes Risiko einzugehen. Nur dann solltest du Fremden vertrauen und ohne weiteres nutzen " +
                "was du findest.\nGewalt ist meist nicht die beste Lösung.\nBegegnest du Fremden musst du dich entscheiden, ob" +
                "mit ihnen sprechen, kämpfen oder fliehen möchtest. \nViel Glück auf deinem Weg.");
            Console.WriteLine("\nDrücke irgend eine Taste um fortzufahren...");
            Console.ReadKey(true);

            Console.WriteLine("\nIm Raum herrscht große Unordnung, möchtest du dich näher umsehen oder durch die einzige Tür nach draußen gehen? " +
                "Drücke 'u' um dich umzusehen oder 'f' um zu fliehen/den Raum zu verlassen\n");
            Console.WriteLine(spieldaten);
            if (Console.ReadKey().Key != ConsoleKey.U)

                Console.WriteLine("\nDu findest einen Rucksack mit Nahrung und Wasser, \naußerdem liegt ein " +
                     "Schlüssel auf einem der niedrigen Tische.\nDrücke 'n' um direkt etwas zu trinken und zu essen, \ndrücke" +
                     "'f' um den Raum zu verlassen");

            else if (Console.ReadKey().Key != ConsoleKey.F)

                Console.WriteLine("\nDie Tür ist verschlossen. Drücke 'u' um dich umzusehen.");

            else Console.WriteLine("Falsche Taste!");

16.834 Beiträge seit 2008
vor einem Jahr

Dein Problem ist, dass Du Console.ReadKey() mehrfach ausführst.
Console.ReadKey() ist eine Methode, die eine Aktion erfordert und das als Rückgabe in eine Variable ablegt.
Was Dein Code macht ist, den Benutzer immer und immer wieder nach einer Aktion aufforderst, was quatsch ist.

Du musst den Wert von Console.ReadKey() in eine Variable legen, und mit der Variable arbeiten.
Methoden sind keine Datenspeicher, sondern führen etwas aktiv aus.

Und für Deine eigene Übersichtlichkeit solltest Du die Klammern von if Blöcken nicht weg lassen.
Auch die C# Guidelines empfehlen aktiv des Verwenden von Klammern in solchen Situationen.

4.939 Beiträge seit 2008
vor einem Jahr

Hallo und willkommen,

deine Abfrage

if (Console.ReadKey().Key != ConsoleKey.U)

ist falsch, benutze den Gleichheitsoperator ==.
Außerdem benutzt du Console.ReadKey() nicht korrekt - du solltest nur einmalig den Tastendruck abfragen und einer Variablen zuordnen (s.a. 2 Beispiel im Link), da du sonst für 'U' und 'F' zweimal auf einen Tastendruck wartest.

PS: Es heißt if - else-Anweisung (nicht Schleife)!

B
BoycottNestle Themenstarter:in
2 Beiträge seit 2022
vor einem Jahr

Danke, nach einigem probieren und ein bisschen Recherche nach Beispielcode habe ich es letztendlich hinbekommen. 🙂