Quiz Spiel für TonUINO-TNG

Habe ich gemacht. Dabei habe ich auch noch die Ansagen geändert, welcher Spieler der schnellste war. Diese heißen jetzt nicht mehr „Spieler 1“ und „Spieler 2“ sondern „Spieler Vor“, „Spieler Zurück“, „Spieler Leiser“ und „Spieler Lauter“. Wenn man in der Hektik nicht verstanden hat, welcher Spieler der schnellst war, kann man die Tasten nochmal drücken. Nur bei dem schnellsten Spieler bewirkt die Taste, das der Satz wiederholt wird.

Aber man darf von den Buzzer nicht zu viel erwarten. Unsere Cycle Time ist 100 ms. Also Unterschiede beim Drücken der Tasten unter 100 ms werden nicht erkannt.
Vielleicht kann man die Cycle Time für die Tasten etwas verkleinern, muss ich mir mal genauer anschauen. Aber berichtet erst mal, ob das vielleicht so schon reicht.

1 „Gefällt mir“

@Boerge1 Ganz große Klasse :+1:
Hatte gerade ein Quiz-Verzeichnis für Buzzer vorbereitet und die Firmware geladen, nachdem ich sie schon für 4 Buzzer gepimpt hatte.
Der erste Test (also das erste Anspielen) verlief genau wie erwartet und ohne Auffälligkeiten oder gar Störungen.

Für den realen Spielbetrieb werde ich noch abgesetzte Buzzer-Einheiten bauen. Dafür allerdings bevorzuge ich dann die neutrale Bezeichnung Spieler 1 - 4, da dann ja der logische Bezug zu den Bedientasten eher keine Rolle mehr spielt.

Ich denke, die Unterscheidungsgenauigkeit von 100 ms für die Buzzer ist vollkommen ausreichend - schließlich geht es hier um Spiel und Spass und nicht um einen Millionengewinn :wink:

Super Lösung :+1:, die im Spiel gelegentlich sicher eingesetzt werden wird.

Zwischenzeitlich ist auch ein Plan für die externen Buzzer entstanden und in der Umsetzung. Eine entsprechende Anleitung / Beschreibung gibt es unter „Quiz-Buzzer für TonUINO - einfach

Hoffe bald von einer „echten“ Spielrunde berichten zu können.

Hier nun der versprochene Bericht über eine erste Spielrunde:

Gespielt haben wir mit 4 Erwachsenen beide Varianten.
Zunächst die Variante mit 4 Antwortvorschlägen und einer Erklärung auf Basis der Fragensammlung aus Quiz_5 und Quiz_6
Danach eine Runde mit Buzzern auf Basis der Fragensammlung Quiz_7
(Die Fragensammlungen sind im WiKi Fragensammlung für das TonUINO Quiz nachzulesen)

Gespielt haben wir mit 4 externen Buzzern, die in der Variante mit den Antwortvorschlägen dann je einem Vorschlag entsprochen haben.

Technisch lief alles einwandfrei und ohne wirkliche Störungen.
Aufgefallen sind dabei doch einige Dinge, die sich auf die Ansagetexte beziehen:

  1. Bei den Auflösungen / Erklärungen habe ich an vielen Stellen zuviel des Guten getan und die Texte wirken sehr langatmig. Daraus folgt, dass diese Texte die wichtigsten Fakten, aber kurz und knapp enthalten sollen.
  2. Die Ansagen für richtige / falsche Antworten sind zwar OK, aber wirken nach einer Weile doch monoton und langatmig, so dass ich mich entschlossen habe, die Texte deutlich einzukürzen.
  3. Da wir mit externen Tasten / Buzzern gespielt haben, war die ursprüngliche Bezeichnung „Spieler 1 usw.“ hierfür besser geeignet, da die eigentlichen Steuerfunktionen den Buzzern nicht mehr anzusehen sind.

Im Spielverlauf ist zudem der Wunsch entstanden, den Hinweis „nächste Frage mit der Pause-Taste“ nicht schon bei der Auswertung der Antwort zu erhalten, sondern erst nach Abspielen der Lösungs- / Erklärungsansage.
Meine Programmierfähigkeiten reichen nicht, den Code entsprechend zu ändern / ergänzen (@Boerge1 vielleicht hast Du da einen Tipp für mich)

Trotz meiner geringen Fähigkeiten habe eine kleine Änderung in meinem Code vorgenommen:

if (numAnswer == 0)
    mp3.enqueueMp3FolderTrack(mp3Tracks::t_509_quiz_game_buzzer_intro);
  else
    {
      if (numAnswer == 2)
      mp3.enqueueMp3FolderTrack(mp3Tracks::t_500_quiz_game_intro);
      else
      mp3.enqueueMp3FolderTrack(mp3Tracks::t_515_quiz_game_intro_4);
    }

Damit erhalte ich jetzt beim Auflegen der Karte eine Ansage, ob mit 2 oder 4 Antwortmöglichkeiten gespielt wird.
Mit einem weiteren Codeschnipsel ist es mir auch möglich, zwischen den Bezeichnungen für die Spieler / Buzzer über ein define „BUT_NAME“ umzuschalten:

    if (quizState == QuizState::playAnswer) {
      if (numAnswer == 0) {
        if ((actAnswer == 0xff) || (actAnswer == 1)) {
          #ifdef BUT_NAME
          LOG(state_log, s_debug, F("Buzzer 4"));
          mp3.enqueueMp3FolderTrack(mp3Tracks::t_513_quiz_game_buzzer_4);
          #else
          LOG(state_log, s_debug, F("Buzzer vol up"));
          mp3.enqueueMp3FolderTrack(mp3Tracks::t_508_quiz_game_buzzer_volu);
          #endif // BUT_NAME
          actAnswer = 1;
        }

Hier nun noch die geänderten / gekürzten Texte für meine Ansagen:

Intro 2:
Du spielst jetzt ein Quiz mit 4 Antwortvorschlägen. 
Drücke die Pause Taste, um eine neue Frage zu erhalten. 
Danach drücke die Vor, Zurück oder die Lautstärke Tasten, um die verschiedenen Antworten zu hören. 
Wenn du denkst, dass du die richtige Antwort gehört hast, kannst du mit der Pause Taste Prüfen, ob das stimmt. Wiederhole das Ganze so oft du willst.
Du kannst das Quiz mit dem langen Druck auf die Vor- und Zurück Taste beenden.

Intro 4:
Du spielst jetzt ein Quiz mit 4 Antwortvorschlägen. 
Drücke die Pause Taste, um eine neue Frage zu erhalten. 
Danach drücke die Vor, Zurück oder die Lautstärke Tasten, um die verschiedenen Antworten zu hören. 
Wenn du denkst, dass du die richtige Antwort gehört hast, kannst du mit der Pause Taste Prüfen, ob das stimmt. Wiederhole das Ganze so oft du willst.
Du kannst das Quiz mit dem langen Druck auf die Vor- und Zurück Taste beenden.

Quiz_OK mit Lösung:
Das war richtig!
Nach der Erklärung weiter mit der Pause-Taste.

Quiz_Bad:
Leider falsch!
Jetzt die Auflösung, dann weiter mit der Pause-Taste.

Spieler 1-4 (Buzzer):
Spieler 1 sagt die Lösung.
Überprüfe die Lösung mit der Pause-Taste.

Ob meine Texte wirklich besser sind, wird erst die nächste Spielrunde zeigen.
Sehr schön wäre tatsächlich, wenn nach der Auflösung erst der Hinweis „nächste Frage . …“ erfolgen würde, da dadurch auch eindeutig das Ende der Erklärungsansage für die Spieler markiert wäre.

Hat schon sonst jemand gespielt / getestet und mag seine Erfahrungen teilen und auch Antregungen geben ?

@Boerge1
Bei den ersten Spielrunden meinte ich zunächst ein unplausibles Verhalten festgestellt zu haben, konnte es aber nicht hinreichend genau beschreiben.

Inzwischen habe ich etwas getestet und den Bedienablauf festgehalten, der reproduzierbar zu einem solchen Verhalten führt:

In beiden Spielvarianten ist der Auslöser ein 2-facher kurzer Druck auf die Pause-Taste zur Überprüfung der Lösung:

  • In der Variante mit Antwortvorschlägen plus Lösung wird die Antwort zwar korrekt ausgewertet, jedoch erfolgt die Ansage der Lösung nicht sondern die Box bleibt stumm.
    In diesem Zustand bringt mich ein weiterer Druck auf die Pause-Taste nicht, wie erwartet, zur nächsten Frage, sondern es erfolgt sogleich die Auswertung der nächsten Frage, sogar mit Ansage der Lösung. Danach wird nach erneutem Druck der Pause-Taste eine neue Frage gestellt und alles ist wieder OK.

  • In der Spielvariante mit Buzzer wird zwar die richtige Lösung angesagt, der nächste Druck der Pause-Taste jedoch spielt nicht die nächste Frage, sondern gleich die Lösungsansage. Danach, bei korrekter Bedienung auch wieder OK.

In beiden Spielvarianten ist auch ein 2-facher kurzer Druck auf die Pause-Taste, um die nächste Frage zu erhalten, ebenfalls ein Auslöser für merkwürdiges Verhalten:

  • In der Variante ohne Buzzer wird zwar die nächste Frage gestellt, es folgt aber auch gleich ohne weiteren Tastendruck die Ansage der Lösung.
  • In der Variante mit Buzzer wird ebenfalls die nächste Frage gestellt, der nächste Tastendruck, der eigentlich die Lösungsansage auslösen sollte, übergeht diese und führt gleich zu nächsten Frage.

Ich hoffe, diese Beschreibung ist bei der Suche nach der Ursache einigermaßen hilfreich.

So, ich hatte jetzt wieder Zeit, mich mit dem Quiz zu beschäftigen. Zu dem Fehlverhalten beim 2-fachen Druck auf die Pause Taste. Das liegt am DF Player und man kann da in der Software nicht viel tun.

Wenn man zweimal kurz hintereinander auf die Pause Taste drückt, werden folgende Befehle kurz hintereinander an den Player geschickt: 1. Spiele die Antwort, 2. Spiele die nächste Frage. Das Resultat müsste dann sein, dass nur die nächste Frage abgespielt wird, der zweite Befehl müsste also den ersten „überschreiben“. Der DF Player ignoriert aber einfach Befehle, solange er mit dem ersten noch nicht fertig ist (nicht fertig mit dem Abspielen sonder fertig mit dem Analysieren des Befehls). Also wird nur die Antwort abgespielt und nicht die nächste Frage.

Aber es ist natürlich auch eine Fehlbedienung, wenn man die Pause Taste schnell zweimal hintereinander drückt. Wenn man solange wartet, bis die Antwort wenigsten angefangen hat, funktioniert alles richtig.
Also, ich denke, man kann damit leben.

Hatte ich schon befürchtet, dass es eine Befehlskollision sein könnte, aber gehofft, dass ein delay an der richtigen Stelle etwas helfen könnte.

Du hast aber vollkommen recht: Es ist eindeutig eine Fehlbedienung durch ungeduldige Spieler mit der man aber wirklich ganz gut leben kann - besonders, da ja mit dem nächsten Tastendruck wieder alles „in der Spur“ ist.
Danke an dieser Stelle für Deine Mühe und Erklärung.

Wie sieht es mit einer kurzen Ansage nach dem Abspielen der Lösung aus?
Wäre das ohne großen Aufwand möglich, und wo könnte ich das ev. sogar selbst einbauen?

Vielen Dank für die Tests!

Das habe ich jetzt implementiert. Mir war das auch schon aufgefallen, aber ich dachte erst, dass dies komplizierter ist zu korrigieren. Habe jetzt eine einfache Lösung gefunden.

Meiner Meinung nach ist diese Änderung nicht erforderlich. Man kann genauso gut die Anzahl der Antworten auf der Chip Karte vermerken.

Auch hier bin ich der Meinung, dass dies nicht notwendig ist. Entweder man beschriftet die Buzzer nicht mit 1, …, 4 sondern mit ‚vor‘, ‚zurück‘, ‚lauter‘ und ‚leiser‘ oder man ändert einfach die vier mp3 Dateien nach seinen Wünschen.

Ich denke, dass es nicht notwendig ist, die Ansagen zu kürzen. Wenn man das erste mal spielt, ist es gut alles erklärt zu bekommen. Wenn man das alles schon kennt, kann man ja mit einer Taste die nächste Aktion auslösen, auch wenn die Ansage noch nicht zu Ende ist.

1 „Gefällt mir“

Perfekt, dass Du das implementieren konntest (und Dir Zeit dafür genommen hast :grinning:). Ich denke, das wird ein deutlicher Gewinn an Spielkomfort sein.

Meine anderen „Spielereien“ am Code und den Texten waren eigentlich nicht als allgemeine Anregung zur Aufnahme in den offiziellen Code gedacht, sondern nur als Information über meine Individualisierungsversuche.

Natürlich hätte man das alles einfacher haben können, wenn man die mp3-Dateien anpasst, aber ich konnte die „Finger nicht vom Programmieren lassen“.
Für weitere Versionen werde ich tatsächlich die mp3-Dateien anpassen, da mir das erspart, die Code-Ergänzungen bei jedem Update nachzuführen.

Ich werde das Update gleich noch herunterladen und einspielen.

Aktuell habe ich großen Gefallen daran gefunden, eine Fragensammlung zusammenzustellen. Die Ergebnisse sind dann im Wiki nachzulesen.

1 „Gefällt mir“

@Boerge1 Das Update ist eingespielt und angetestet.
Funktioniert prima, genau, wie gewünscht :+1:

Nach anfänglichen Problemen hat sich herausgestellt, dass meine SD-Karte der Übeltäter war. Offenbar hatte ich zu oft Dateien ergänzt oder ersetzt, so dass in einigen Verzeichnissen der DF-Player kein Finish Signal gegeben hat und folgerichtig auch die Ansage nicht gekommen ist.
Nach Formatierung und neu bespielen der Karte (mit den vorherigen Strukturen) läuft nun ales wie es muss.

Nochmals vielen Dank für Dein Engagement :grinning:

1 „Gefällt mir“

Ich habe das Feature jetzt gemergt und es ist im neuen Release als optionales Feature enthalten.

1 „Gefällt mir“

@Boerge1 Beim Quiz Spiel ist mir nun mehrfach aufgefallen, dass Fragen in kurzer Folge erneut gestellt werden, vermutlich die Queue der Fragen nicht sauber erstellt wird.
Nach dem heutigen Abend habe ich den TonUINO an den Rechner angeschlossen und ein Log mitgeschrieben (Quiz mit Buzzer):

 _____         _____ _____ _____ _____
|_   _|___ ___|  |  |     |   | |     |
  | | | . |   |  |  |-   -| | | |  |  |
  |_| |___|_|_|_____|_____|_|___|_____|
TonUINO Version 3.1 - refactored by Boerge1

created by Thorsten Voß and licensed under GNU/GPL.
Information and contribution at https://tonuino.de.

V3.1.7 01.03.24


Ver:2
Vol:25 2 10
EQ:1
ST:0
IB:1
AL:0
AP:1111
PCR:0
Volume: 10
MFRC522:146
enter Idle
Command: 6
enqueue mp3 262 0
play mp3 262
Card Inserted
CardData:  31 73 3b 74 02 12 0c 00 01
enter Quiz
46 tr in folder 33
enqueue mp3 509 0
play mp3 509
Card Removed
Card Inserted
CardData:  31 73 3b 74 02 12 0c 00 01
enter Quiz
46 tr in folder 33
enqueue mp3 509 0
play mp3 509
Card Removed
Command: 7
enqueue 33-23  
play 33-23
Command: 10
enqueue mp3 511 0
play mp3 511
Command: 7
enqueue 33-24  
play 33-24
enqueue mp3 510 0
play mp3 510
Command: 7
enqueue 33-1  
play 33-1
Command: 10
enqueue mp3 511 0
play mp3 511
Command: 7
enqueue 33-2  
play 33-2
Command: 7
enqueue 33-41  
play 33-41
Command: 10
enqueue mp3 511 0
play mp3 511
Command: 7
enqueue 33-42  
play 33-42
Command: 7
enqueue 33-1  
play 33-1
Command: 7
enqueue 33-2  
play 33-2
Command: 7
enqueue 33-25  
play 33-25

Das Log zeigt, dass schon nach kurzer Zeit die Frage 33-1 nochmals gestellt wird.

Als Randinfo vielleicht noch wichtig:
In meinem TonUINO werkelt ein DF-Player mit Chip MH2024K24SS, für den ich den Wert dfPlayer_timeUntilStarts auf 3000 ms angepasst habe, damit es nicht zu „missing OnPlayfinished“ kommt.

Kannst du bitte den Algorithmus zur Erstellung der Queue nochmals prüfen? Einen Fehler bei der Aktivierung und Auswahl des Quiz-Spiels kann man doch eigentlich gar nicht machen, oder doch?
Könnte das ev. auch mit dem doch recht trägen Chipsatz des DF-Players zusammenhängen?
Wenn erforderlich könnte ich zur Überprüfung einen anderen TonUINO „freischaufeln“ in dem ein DF-Player der Leiterkartenpiraten seinen Dienst tut.

Das Log ist übrigens ganz bewusst ohne Fehlbedienung (zu hektische Tastendrücke) gemacht worden

Im Moment ist es so implementiert, das bei jeder neuen Frage wieder zufällig eine aus allen ausgewählt. Da kann es dann natürlich passieren, dass die gleiche Frage nochmal kommt. Das ist aber die sparsamste Methode bzgl. des Speichers (RAM). Und der ist bei dem Nano schon äußerst knapp. Wenn ich das als vorher erzeugte Queue implementiere, braucht man für diese eben 255/3=85 Byte.
Ich glaube, es ist besser den Nano zu unterstützen und die Fragen halt evtl. auch kurz hintereinander zu wiederholen als dass das Spiel mit dem Nano gar nicht geht.

Wie Zauberst du denn den Party Modus?
Wird da nicht auch einmal durchgewürfelt und sich die Reihenfolge gemerkt um nichts doppelt zu hören?

Ja, natürlich gibt es im mp3 Modul eine Queue dafür. Also, immer wenn man irgendwer was abspielen möchte, kann man diese Queue füllen und das wird dann abgespielt.
Aber hier bräuchte man eben eine neue Queue für die Fragen.

Aber wieso etwas neues?
Man wird ja nicht parallel quizzen und Party Modus brauchen.
Und der Queue wird doch egal sein ob sie sich fragen oder Lieder merkt

Diese Queue ist doch fest in das mp3 Modul eingebaut und steuert die Tracks, die alle abgespielt werden sollen. Die wird bei jedem Abspielen gebraucht (auch wenn nur ein Track gespielt wird), also auch im Quiz.

Ich habe aber noch ein bisschen nachgedacht und das jetzt mit einer Bitmap implementiert. Die benötigt natürlich 8 mal weniger als eine Queue. In der Bitmap wird sich gemerkt, welche Fragen noch nicht dran waren und es wird in jedem Schritt daraus eine neue gewählt. Ist auf dem Branch issue_182 implementiert - wer es ausprobieren möchte…

Absolut super, dass du eine Lösung gefunden hast. Leider komme ich erst am Montag dazu die neue SW zu flashen und zu testen.
Ist aber durchaus wichtig, da die Wiederholung von Fragen (was in einer Spielrunde mehrfach vorkam) gerade bei Kindern spürbar als „Spassbremse“ gewirkt hat.

Ahhhhh…
Das wusste ich noch nicht. Ich dachte es wird im Arduino erstellt und gespeichert

Na ja schon im Arduino. Aber halt in dem Software Teil, der sich mit dem Abspielen von den Tracks beschäftigt. Aber ich habe ja eine Lösung gefunden.

1 „Gefällt mir“

@Boerge1
Ich habe die neue SW schon heute geflasht und an einem Buzzer-Quiz mit 23 Fragen mehrfach getestet. Es kommt nicht mehr zu Wiederholungen während einer Quizrunde und es werden alle Fragen gespielt: :+1: :grinning: Die Überarbeitung und die gefundene Lösung waren erfolgreich.
Natürlich kommt es nach der vollständig gespielten Runde zu Wiederholungen, da sozusagen ein „zweiter Durchgang“ gespielt wird. Erfreulich zu bemerken dabei, dass die Queue der Fragen neu zusammengestellt wird und die Reihenfolge der Fragen eine andere ist.
Das ist mit Sicherheit ein nicht zu vernachlässigender „Spassgewinn“ für Groß und Klein an diesem Spiel. An dieser Stelle herzlichen Dank an @Boerge1 für den Einsatz und die guten Ideen :grinning:

1 „Gefällt mir“