2017-09-28 3 views
-2

Ich arbeite derzeit an einem einfachen Rätsel-Spiel außerhalb der Klasse, und was ich tun möchte, ist eine Aussage, die überprüfen wird, was die Frage ist, und ob die Antwort, die eingegeben wurde richtig. Hier ist der Code, den ich bisher habe:If-Anweisung mit mehreren ODER-Werten

private void butt_Submit_Click(object sender, EventArgs e) 
     { 
      if (lab_Riddle.Text == "What Walks on 4 Legs in the Morning, 2 in the Afternoon and 3 in the Evening?") 

       if (TeBo_Ans.Text == "A Man") ; 
;    { 
       MessageBox.Show("Well Done"); 
       lab_Riddle.Text = ("I have an Eye but Cannot See- What Am I?"); 
      } 
      if (TeBo_Ans.Text == "Mankind") ; 
      { 
       MessageBox.Show("Good Words"); 
       lab_Riddle.Text = ("I have an Eye but Cannot See- What Am I?"); 
      } 
      if (TeBo_Ans.Text == "People") ; 
      { 
       MessageBox.Show("Yes"); 
       lab_Riddle.Text = ("I have an Eye but Cannot See- What Am I?"); 
      } 
      if (TeBo_Ans.Text == "A Person") ; 
      { 
       MessageBox.Show("Exactly"); 
       lab_Riddle.Text = ("I have an Eye but Cannot See- What Am I?"); 
      } 
      if (TeBo_Ans.Text == "Humankind") ; 
      { 
       MessageBox.Show("Exactly"); 
       lab_Riddle.Text = ("I have an Eye but Cannot See- What Am I?"); 
      } 
     } 

Hier lab_Riddle ist das Etikett die Frage enthält, und TeBo_Ans ist die Textbox der Benutzer die Antwort in. Dieser Code Art Works, sondern im Idealfall würde Ich mag es, wie

etwas kondensieren unten
If lab_Riddle.Text= [Riddle 1] 
{ 
    If TeBo_Ans == [a] OR [b] OR [d] 
    { 
    MessageBox.Show ("Correct") 
    lab_Riddle.Text [riddle 2] 
    } 
    Else 
    { 
    MessageBox.Show ("Incorrect") 
    } 
} 

Sprache sind C#, wenn ich nicht schon gesagt, und vertikale Linien. Dies ist wahrscheinlich eine sehr lange und komplizierte Art, dies zu tun, aber ich bin noch sehr neu im Codieren.

+1

Sie können ‚else if‘ verwenden einfach nicht alle Vergleiche zu tun – NicoRiff

+0

Sie nur für die '' || Betreiber suchen sind? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/ – David

+1

Auch hat Ihr Code einen ziemlich signifikanten Fehler darin, so sehe ich nicht, wie es * funktionieren könnte all * in seiner jetzigen Form. Diese Semikolons am Ende jeder Ihrer 'if'-Bedingungen beenden Ihre 'if'-Blöcke. Daher werden alle Ihre Bedingungen ignoriert und alle Ihre Codeblöcke werden ausgeführt. – David

Antwort

2

Nun könnten Sie ein Wörterbuch für die Antworten verwenden

wie

String answer = "a dog"; 
    Dictionary<string, string> riddleans = new Dictionary<string, string>(); 
    riddleans.Add("a man", "Well done"); 
    riddleans.Add("mankind", "Good words"); 
    answer = answer.ToLower(); 
    if (riddleans.ContainsKey(answer)) 
    { 
     Messagebox.Show(riddleans[answer]); 
     gotonextriddle(); 
    } 
    else 
    { 
     Messagebox.Show("Incorrect); 
    } 

aber Sie können sich erweitern, indem sie entweder Struktur oder Klasse, die mit, dass Sie dann eine Liste von Rätseln haben und so auf.

Eine Sache, auf die ich hier hinweisen konnte, war die Erleichterung der Antwort - es bedeutet, dass anstelle von "Menschheit", wenn ich "MANKIND" oder "Menschheit" schrieb, alles noch passt.

0

Da Sie verschiedene Textstücke, die Sie anzeigen möchten, je nachdem, was der Benutzer eingeben wird, können Sie es in einem Dictionary

var answers = new Dictionary<string, string>() 
{ 
    { "Mankind", "Good words" }, 
    { "People", "Yes" }, 
    { "A Man", "People" } 
}; 

var answerGiven = TeBo_Ans.Text; 

if (answers.ContainsKey(answerGiven)) 
{ 
    // user has the correct answer 
} 

Offensichtlich in diesem Fall speichern könnten Sie müssten Groß- und Kleinschreibung beachten Zum einen, aber es ist nur eine Art zu tun, was du willst. Ich nehme an, dass Ihre Frage in gewisser Weise besser auf den Code Review Stack Exchange gestellt werden kann.

https://codereview.stackexchange.com/