private void InitializeQuiz() { db = new Database(); lblDisplayName.Text += User.Instance.DisplayName; lblScore.Text += User.Instance.Score.ToString(); // Daten holen listGeodata = db.GetData(QuizConfig.Instance.MaxQuestions, QuizConfig.Instance.Continent); // Objekt questions mit Abstrakter Klasse initialisieren questions = new Question[QuizConfig.Instance.MaxQuestions]; for (int i = 0; i < QuizConfig.Instance.MaxQuestions; i++) { // Den ersten Eintrag als Frage speichern GeoData question = listGeodata[i]; // Falsche Anworten holen (WHERE id != question.Id) List <GeoData> answers = db.GetFalseAnswers(question.Id, QuizConfig.Instance.Continent); // Je nach Fragentyp (Qt) wird das abstrakte Objekt // mit einem konkreten Objekt 'gefüllt'. // Als Parameter werden die Frage, die Antworten und der Antworttyp übergeben. switch (QuizConfig.Instance.Qt) { case QuestionType.Capital: questions[i] = new CapitalQuestion( question, answers, QuizConfig.Instance.At ); break; case QuestionType.Country: questions[i] = new CountryQuestion( question, answers, QuizConfig.Instance.At ); break; case QuestionType.Flag: questions[i] = new FlagQuestion( question, answers, QuizConfig.Instance.At ); break; } } }
// Nagut, die hier erkläre ich. // Beim Aufruf der Klasse wird diese Methode hier als erstes aufgerufen. // Deswegen heisst es Method Factory public override void CreateAnswers(GeoData question, List <GeoData> answers, AnswerType at) { // Da die Methode oft und schnell aufgerufen wird, kommt Random() // nicht so schnell hinterher um ein gutes Random Ergebnis zu erstellen. // Was Random() übrigens eh nicht tut. Siehe Birthday Paradox. // Daher die Übergabe der Guid. Random gen = new Random(Guid.NewGuid().GetHashCode()); At = at; gen = new Random(Guid.NewGuid().GetHashCode()); CorrectAnswer = question; CorrectAnswer.State = true; WrongAnswers = new List <GeoData>(); WrongAnswers = answers; AllAnswers = new List <GeoData>(); AllAnswers.Add(WrongAnswers[0]); AllAnswers.Add(WrongAnswers[1]); AllAnswers.Add(WrongAnswers[2]); AllAnswers.Insert(gen.Next(4), CorrectAnswer); switch (At) { case AnswerType.Country: Answers.Add(new CountryAnswer(AllAnswers[0])); Answers.Add(new CountryAnswer(AllAnswers[1])); Answers.Add(new CountryAnswer(AllAnswers[2])); Answers.Add(new CountryAnswer(AllAnswers[3])); break; case AnswerType.Capital: Answers.Add(new CapitalAnswer(AllAnswers[0])); Answers.Add(new CapitalAnswer(AllAnswers[1])); Answers.Add(new CapitalAnswer(AllAnswers[2])); Answers.Add(new CapitalAnswer(AllAnswers[3])); break; default: break; } }
public override void CreateAnswers(GeoData question, List <GeoData> answers, AnswerType at) { Random gen = new Random(Guid.NewGuid().GetHashCode()); At = at; gen = new Random(Guid.NewGuid().GetHashCode()); CorrectAnswer = question; CorrectAnswer.State = true; WrongAnswers = new List <GeoData>(); WrongAnswers = answers; AllAnswers = new List <GeoData>(); AllAnswers.Add(WrongAnswers[0]); AllAnswers.Add(WrongAnswers[1]); AllAnswers.Add(WrongAnswers[2]); AllAnswers.Insert(gen.Next(4), CorrectAnswer); switch (At) { case AnswerType.Capital: Answers.Add(new CapitalAnswer(AllAnswers[0])); Answers.Add(new CapitalAnswer(AllAnswers[1])); Answers.Add(new CapitalAnswer(AllAnswers[2])); Answers.Add(new CapitalAnswer(AllAnswers[3])); break; case AnswerType.Flag: Answers.Add(new FlagAnswer(AllAnswers[0])); Answers.Add(new FlagAnswer(AllAnswers[1])); Answers.Add(new FlagAnswer(AllAnswers[2])); Answers.Add(new FlagAnswer(AllAnswers[3])); break; default: break; } }
public FlagQuestion(GeoData question, List <GeoData> answers, AnswerType at) : base(question, answers, at) { Text = question.Flag.ToLower(); }
public Answer(GeoData data) { }
public CapitalAnswer(GeoData data) : base(data) { Text = data.Capital; State = data.State; }
public CountryQuestion(GeoData question, List <GeoData> answers, AnswerType at) : base(question, answers, at) { Text = question.Country; }
public CountryAnswer(GeoData data) : base(data) { Text = data.Country; State = data.State; }
public FlagAnswer(GeoData data) : base(data) { Text = data.Flag; State = data.State; }
// Die Factory Methode!! public abstract void CreateAnswers(GeoData question, List <GeoData> anwers, AnswerType at);
// Der Konstruktor ruft die Factory Methode auf. public Question(GeoData question, List <GeoData> anwers, AnswerType at) { CreateAnswers(question, anwers, at); }
public CapitalQuestion(GeoData question, List <GeoData> answers, AnswerType at) : base(question, answers, at) { Text = question.Capital; }