2016-07-03 6 views
-1

Ich mache mein erstes Text-Adventure-Spiel mit C#, und ich habe mich nur gefragt, wie ich zu einer vorherigen if-Anweisung zurückkehren würde. Beispiel:Wie wird zurück zur vorherigen if-Anweisung übertragen?

if (x == 2 || y == 3) 
{ 
    //do this 

    if (z > 3 || v = 6) 
    { 
     //do this 
    } 
} 

Was würde ich verwenden, um es aus dem verschachtelten gehen zu machen, wenn, nach oben if-Anweisung?

EDIT: genauer gesagt:

 //start 
       System.Console.WriteLine("You awake in a stupor. The sun blinds you as you roll over to breathe the new day."); 
       System.Console.WriteLine(" "); 
       System.Console.WriteLine(" "); 
       System.Console.WriteLine("To your (west), you see a volcanic mountain, with a scraggly, dangerous looking path."); 
       System.Console.WriteLine(" "); 
       System.Console.WriteLine("In the (east), you see a thick forrest. there is nothing visible past the treeline."); 
       System.Console.WriteLine(" "); 
       System.Console.WriteLine("Looking (south), you see a long winding road that seems to have no end."); 
       System.Console.WriteLine(" "); 
       System.Console.WriteLine("Hearing a sound of celebration, you look to the (north). There appears to be a city, with a celebration going on."); 
       System.Console.WriteLine(" "); 
       System.Console.WriteLine(" "); 
       System.Console.WriteLine("Which direction would you like to travel?"); 
       string direction1 = Convert.ToString(Console.ReadLine()); 

//first decision (north) 
      if (direction1 == "north" || direction1 == "North") 
      { 
       Console.WriteLine("You proceed towards the north, only to be stopped by a guard:"); 
       Console.WriteLine("Guard: 'the kingdom of al'arthar is off limits to outsiders today, its the queens birthday, and the kingdom is packed full"); 
       Console.WriteLine(" "); 
       Console.WriteLine(" "); 
       Console.WriteLine("you can either try to (swindle) the guard, or (leave). What will you do?"); 
       string guardConvo1 = Convert.ToString(Console.ReadLine()); 

Nehmen wir zum Beispiel, wenn jemand Nord in diesem Szenario gereist und wollte dann zurück gehen. Anstatt die vorherige if-Anweisung zu rekodieren, wie würde ich sie nur zur vorherigen if-Anweisung zurückführen lassen?

+2

Sie sollten einen praktischen Anwendungsfall für alles zeigen, was Sie tun möchten. – poke

+0

Komm schon Alter .. du musst mehr Informationen liefern als nur 2 'If' Anweisungen zu zeigen .. bist du mit Rekursion vertraut oder While-Schleifen oder For-Schleifen können nicht sagen, was du mit dem, was du gerade gepostet hast, machen willst .. – MethodMan

+0

meine Appologien. wird mit spezifischeren Informationen aktualisiert werden –

Antwort

2

Es ist schwer zu wissen, ohne mehr Kontext darüber zu wissen, was Sie zu tun versuchen. Sie möchten möglicherweise Code in eine eigene Methode extrahieren und an beiden Stellen aufrufen oder eine Schleife erstellen (for, while, usw.), um die Steuerung zu übernehmen. Es ist sogar möglich, einen goto Befehl zu verwenden, obwohl ich das fast nie empfehlen würde.

Vielleicht sollten Sie eine Art von state machine haben, die Ihr Spiel ausführt, um Bedingungen und Aktionen zu behandeln.


Update: Wie Sie gefunden haben, wie Sie den Code schreiben fast völlig undurchführbar für ein Text-Adventure-Spiel. Etwas, um dich in die richtige Richtung zu bringen, wäre folgendes: Refactoring jeden Raum in seine eigene Methode. Wenn Sie von einem Raum in einen anderen gehen möchten, rufen Sie die Methode für diesen Raum auf.

void StartingArea() 
{ 
    System.Console.WriteLine("You awake in a stupor. The sun blinds you as you roll over to breathe the new day."); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("To your (west), you see a volcanic mountain, with a scraggly, dangerous looking path."); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("In the (east), you see a thick forrest. there is nothing visible past the treeline."); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("Looking (south), you see a long winding road that seems to have no end."); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("Hearing a sound of celebration, you look to the (north). There appears to be a city, with a celebration going on."); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine(" "); 
    System.Console.WriteLine("Which direction would you like to travel?"); 
    string direction1 = Convert.ToString(Console.ReadLine()); 

    if (direction1 == "north" || direction1 == "North") 
    { 
     AlArtharGate(); 
    } 
} 
void AlArtharGate() 
{ 
    Console.WriteLine("You proceed towards the north, only to be stopped by a guard:"); 
    Console.WriteLine("Guard: 'the kingdom of al'arthar is off limits to outsiders today, its the queens birthday, and the kingdom is packed full"); 
    Console.WriteLine(" "); 
    Console.WriteLine(" "); 
    Console.WriteLine("you can either try to (swindle) the guard, or (leave). What will you do?"); 
    string guardConvo1 = Convert.ToString(Console.ReadLine()); 
    if (string.Equals(guardConvo1, "leave", StringComparison.CurrentCultureIgnoreCase)) 
    { 
     StartingArea(); 
    } 
} 

Dies ist nicht perfekt, aber es ist besser: Sie gemacht haben jeder Bereich seine eigene aufrufbare Einheit statt nur einen Abschnitt des Codes in einer if Aussage. Sie können den Code von this Python text adventure game base für ein fortgeschritteneres und vollständiges Beispiel studieren.

Übrigens, Sie möchten vielleicht den ganzen Fall ignorieren (wie ich es mit dem Vergleich am Ende gemacht habe), nicht nur nach "Norden" und "Norden" suchen.

+0

so wäre es sparsamer vielleicht eine Variable namens "Position" zuweisen, und eine while-Schleife wie "while position = x"?, und haben die Richtung, die sie gehen möchten zugewiesen zu positionieren? –

+0

@Deron Ich habe meine Antwort aktualisiert, bitte überprüfen Sie es. –

+0

danke, ihre antwort war sehr informativ, und ich werde sie verwenden, um zu wiederholen, was ive bisher getan und damit fortfahren. Danke nochmal. –

0

Hmm, hier gibt es nicht viel zu tun, aber es gibt viele Dinge, die man tun könnte.

Eine Zustandsmaschine wird erwähnt, aber es könnte ein wenig abstrakt sein, um zuerst zu wickeln. Aber denken Sie an Städte und Straßen, Sie als Person können an einem Ort sein und nur eine Straße nach der anderen gehen. Manchmal endet man im Kreis, manchmal erreicht man das Ende.

In Ihrem Spiel haben Sie eine Menge Aktionen oder wir können sie wählen, wenn Sie möchten. und vielleicht könnte dich dieser Pseudocode auf die richtige Spur bringen.

void Init(){ 
    Print("Select Choice") 
    int choice = Read() 
    if(choice == 1) 
    { 
     Choice1() 
    } 
    else if(choice == 2) 
    { 
     Choice2() 
    } 
    else 
    { 
     InvalidChoice() 
    } 
} 
void Choice1(){ 
    Print("Welcome to Choice1 perform action or choice") 
    int choice = Read() 
    if(choice == 1) 
    { 
     Choice2() 
    } 
    else if(choice == 2) 
    { 
     Choice3() 
    } 
    else 
    { 
     InvalidChoice() 
    } 
} 
void Choice2(){ 
    Print("Welcome to Choice2 perform action or choice") 
    int choice = Read() 
    if(choice == 1) 
    { 
     Choice3() 
    } 
    else if(choice == 2) 
    { 
     Choice1() 
    } 
    else 
    { 
     InvalidChoice() 
    } 
} 
void Choice3() 
{ 
    InvalidChoice() 
} 
void InvalidChoice() 
{ 
    Print("You died") 
} 
Verwandte Themen