2017-09-28 1 views
-2

Je travaille actuellement sur un jeu de devinettes simples en dehors de la classe, et ce que je veux faire est d'avoir une déclaration qui permettra de vérifier quelle est la question, et si la réponse qui a été mis en correct. Voici le code que j'ai jusqu'à présent:Si Déclaration avec plusieurs valeurs OU

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?"); 
      } 
     } 

Ici, lab_Riddle est l'étiquette contenant la question, et TeBo_Ans est la zone de texte les types d'utilisateurs de la réponse en. Ce type de code de travaux, mais idéalement je voudrais condenser à quelque chose comme

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") 
    } 
} 

Le langage est C# si je ne l'ai pas déjà dit, et les lignes verticales. C'est probablement une façon très longue et alambiquée de le faire, mais je suis encore très novice dans le domaine du codage.

+1

vous pouvez utiliser « autre si » juste pour ne pas faire toutes les comparaisons – NicoRiff

+0

Vous cherchez juste pour l'opérateur '' || de? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/ – David

+1

De plus, votre code contient un bogue assez important, donc je ne vois pas comment cela pourrait fonctionner * tout * dans sa forme actuelle. Ces points-virgules à la fin de chacune de vos conditions «if» terminent vos blocs «if». Toutes vos conditions sont donc ignorées et tous vos blocs de code s'exécutent. – David

Répondre

2

Eh bien, vous pouvez utiliser un dictionnaire pour les réponses

tels que

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); 
    } 

mais vous pouvez développer qu'en ayant soit la structure ou la classe en utilisant ce que vous avez alors une liste d'énigmes et ainsi sur. Une chose à signaler ici était le tolower de la réponse - cela signifie qu'au lieu de "l'humanité" si j'ai écrit "MANKIND" ou "l'humanité" tout cela tient toujours.

0

Puisque vous avez différents morceaux de texte que vous souhaitez afficher en fonction de ce que l'utilisateur entre, vous pouvez stocker dans un 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 
} 

Il est évident que dans ce cas, vous auriez besoin de considérer la casse pour un, mais c'est juste une façon de faire ce que vous voulez. Je suppose qu'à certains égards, votre question pourrait être mieux placée sur l'échange de pile de révision de code.

https://codereview.stackexchange.com/