I'm trying to find a nice API for a Quiz Engine. This is what I have so far:
Implementation:
public class Question
{
public string Title { get;set; }
public List<Answer> Answers { get; set; }
public Answer CorrectAnswer { get; set; }
}
public class Answer
{
public bool IsCorrect { get; set; }
public string Content { get; set; }
}
public class QuizzEngine{
Queue<Question> questions;
public QuizzState QuizzState { get; set; }
public QuizzEngine(IEnumerable<Question> questions)
{
this.questions = new Queue<Question>(questions);
QuestionCount = this.questions.Count;
}
void StartQuizz()
{
QuizzState = QuizzState.Going;
while(QuizzState == QuizzState.Going)
{
MoveToNextQuestion();
if(QuizzState == QuizzState.Going) return;
Answer answer = GetAnswer();
TryAcceptAnswer(answer);
}
}
Answer GetAnswer()
{
Answer answer;
GetAnswerFromUI(out answer);
return answer;
}
void GetAnswerFromUI(out Answer answer)
{
// somehow gets Answer through the UI
answer = null;
}
public void TryAcceptAnswer(Answer answer)
{
var isCorrectAnswer = CurrentQuestion.CorrectAnswer.Equals(answer);
if(isCorrectAnswer) CorrectAnswerCount++;
}
public void MoveToNextQuestion()
{
if(questions.Count == 0)
{
QuizzState = QuizzState.Finished;
CurrentQuestion = null;
return;
}
CurrentQuestion = questions.Dequeue();
}
public Question CurrentQuestion { get; private set; }
public int CorrectAnswerCount { get; private set; }
public int QuestionCount { get; private set; }
}
public enum QuizzState{
Going,
Finished
}
How could this be improved?