private const string CHEMIN_FICHIER = @"..\..\..\QCM.txt"; // Nous declarons le chemin du fichier comme une constante privée /// <summary> /// Methode statique GetQuestions : qui lit le fichier QCM.txt et renvoie une liste<QuestionQCM> /// chaque instance de <QuestionQCM> contient la question,la reponse, les possibilités de réponse et le numéro de la question /// </summary> /// <returns></returns> public static List <QuestionQCM> GetQuestions() { var liste = new List <QuestionQCM>(); var donnéesFichier = File.ReadAllLines(CHEMIN_FICHIER); int _indQ = 0; // Compteur Question initialisé a 0 for (int i = 0; i < donnéesFichier.Length; i++) // Parcourir les lignes du fichier QCM.txt { string phrase = donnéesFichier[i]; // Chaque phrase correspond a la ligne du fichier if (phrase.Contains("Question")) // Si la phrase contient le mot Question on instancie l'objet QuestionQCM { _indQ++; QuestionQCM q = new QuestionQCM(_indQ); //on instancie l'objet QuestionQCM liste.Add(q); //on le rajoute dans la liste<QuestionQCM> liste[_indQ - 1].TextQuestion += phrase + '\n'; // textQuestion correspond au texte de la question } if (phrase.Length > 0 && phrase[0] != 'Q' && (phrase[0] >= 65 && phrase[0] <= 90 || phrase[0] == '*') ) // Nous testons si la phrase ne contiens pas le mot "Question" : { if (phrase[0] == '*') // Si la phrase contient '*' ,c'est une bonne réponse { liste[_indQ - 1].TextQuestion += phrase.Substring(1) + '\n'; // nous rajouttons la phase sans l'*' dans le TextQuestion liste[_indQ - 1].RéponseQuestion += phrase[1]; //on rajoute la lettre qui suit l'*' dans RéponseQuestion liste[_indQ - 1].PossibilitésRéponse += phrase[1]; //on rajoute la lettre qui suit l'*' dans PossibilitéRéponse } else // Le cas inverse , { liste[_indQ - 1].TextQuestion += phrase + '\n'; //nous rajouttons la phase dans le TextQuestion liste[_indQ - 1].PossibilitésRéponse += phrase[0]; //on rajoute la premiere lettre dans PossibilitéRéponse } } } return(liste); // on retourne la liste qui contient toutes les questions et leurs propriétés }
/// <summary> /// Methode qui permets de tester la reponse du joueur en prenant en compte la reponse et la question(i) ; question (i) est une instance de QuestionQCM /// </summary> /// <param La reponse du joueur="reponse"></param> /// <param une instance de QuestionQCM ="question"></param> public void TesterRéponse(string reponse, QuestionQCM question) { if (reponse.Length == 0) // si le joueur ne répond pas à la question , nous levons une exception { throw new FormatException("Le format de la réponse est incorrecte vous devez choisir des lettres parmis celles qui sont proposées"); } for (int i = 0; i < reponse.Length; i++) // si la réponse n'est pas dans les possibilité de réponse , nous levons une exception { if (!question.PossibilitésRéponse.Contains(reponse[i])) { throw new FormatException("Le format de la réponse est incorrecte vous devez choisir des lettres parmis celles qui sont proposées"); } } if (string.Concat(reponse.OrderBy(c => c)) == question.RéponseQuestion) // si la réponse est correcte , nous incrémontons son score et le nombre des questions { NombreQuestions++; Score++; } else // Le cas inverse : Nous rajoutons le numéro de la question dans la liste des erreurs et on incrémonte le nombre des questions { NombreQuestions++; Erreurs.Add(question.Numéro); } }