Eine weitere Änderung ist die Art der Fragen. Hierzu muss ich aber etwas weiter ausholen:
Ein Ziel bei meinem Quiz war und ist, dass die Implementierung von Fragen so einfach wie möglich gestaltet ist.
Zuerst habe ich mir überlegt, dass der Spieler die Antwort eintippt und das Quiz-Skript diesen String mit der richtigen Antwort vergleicht.
Das ist mir aber zu ungenau, da es ggf. mehrere Schreibweise gibt, jemand eine Abkürzung nimmt, den engl. Titel schreibt usw.
Somit müsste ich alle mir bekannten Möglichkeiten selber eintippen, was einen hohen Aufwand bedeuten würde.
Also bleibt nur die Möglichkeit, dem Spieler "feste" Antwort-Möglichkeiten zu bieten. (In meinem Fall habe ich mich für 5 Antwort-Möglichkeiten entscheiden.)
Dumm ist nur, dass auch die 4 Falsch-Antworten von mir erst eingetippt werden müssen, denn es wäre unsinnig, wenn ich nach dem Namen eines Schauspielers fragen würde und als Antwort-Möglichkeit "1974" angegeben ist.
Was habe ich also (in meinem ersten Quiz) gemacht? Ganz einfach: die Fragen wurden so gestellt, dass die Lösung immer ein Filmtitel war. Ich suche per Random einfach aus der Liste von Antworten (zu anderen Fragen) 4 aus, schreibe noch die richtige Lösung dazu und habe somit die 5 Antwort-Möglichkeiten.
Das hat alles einwandfrei geklappt, aber auch diese Lösung fand ich relativ unbefriedigend, denn es wäre schöner, wenn auch mal nach einem Schauspieler oder einer Filmrolle gefragt wird.
Also habe ich mein Quiz modifiziert. Ich erstellte 4 Datenbank-Tabellen:
- Fragen/Antworten nach Schauspieler-Namen
- Fragen/Antworten nach Jahreszahlen
- Fragen/Antworten nach Filmtiteln
- Fragen/Antworten nach Filmrollen
Das Quiz wird aufgerufen, der Spieler gibt seinen Namen und (optional) seine Mail-Adresse ein und es geht los.
Beim Start werden nicht nur die Spielerdaten initialisiert (Name des Spielers, Anzahl der Frage, aktuelle Punktzahl, Startzeit,...), sondern auch geprüft, wie viele Fragen es in den 4 Kategorien gibt.
Ich berechne nun die Anteile der Kategorien in Bezug auf die Gesamtanzahl der Fragen. Grund hierfür: In den Kategorien befinden sich nicht gleich viele Fragen. Somit muss die Wahrscheinlichkeit, dass eine Quiz-Frage aus der Kategorie mit den meisten Fragen kommt, auch am höchsten sein.
Nach dieser Initialisierung startet das "echte" Quiz. Es wird per (Pseudo-) Zufall eine Kategorie gewählt und danach eine Frage aus dieser Kategorie.
Da die Antworten in dieser Kategorie alle dasselbe Thema haben, kann ich die 4 falschen Antwort-Möglichkeiten auch aus dieser Kategorie holen. Somit ist gewährleistet, dass die falschen Antworten zur gestellten Frage passen.
Für die Implementierung neuer Fragen bedeutet das nun, dass ich lediglich die neue Frage und die richtige Antwort speichern muss. Weder muss ich alle mir bekannten Lösungen zu einer Frage definieren (Abkürzungen, engl. Titel,...), noch 4 "sinnvolle" Falsch-Antworten ausdenken.
Der Rest der Skriptes ist zwar relativ aufwendig (z.B. der Balken mit roten und grünen Elementen, die die richtigen/falschen Antworten repräsentieren oder die Auswertung für die Highscore-Liste), soll hier aber nicht näher erklärt werden.
Dass das Quiz (wie diese Webseite) auf einer SMARTY-Template basiert, soll zwar nicht ungenannt bleiben, aber auch hier verkneife ich mir weitere Erklärungen, da sie wohl nicht von "allgemeinem Interesse" sind.

Aber wer sich für irgendwas interessiert, kann mich ja anschreiben.
Das Quiz ist online und wird (so hoffe ich) von vielen Besuchern genutzt und getestet. Sollten mich überdurchschnittlich viele Mails von interessierten Programmierern erreichen, werde ich den Quellcode irgendwann mal freigeben.