I’m with stupid

Hin und wieder kommt man in die Situation, dass man eigentlich was anderes machen sollte, und – schwupps – hat man wieder etwas völlig anderes programmiert, das die Menschheit einen weiteren kleinen Schritt voran bringt. Bei mir war es mal wieder soweit.

I’m with stupid ist ein Spiel, das man auch gut in Internetforen spielen kann. Die Regeln sind simpel:

Da Rulez1

In jeder Runde stellt die Spielleitung eine bestimmte Anzahl Fragen. Die Mitspielerinnen und Mitspieler geben nun geheim ihre Antworten ab.

Haben alle ihre Antworten abgegeben, so wird ausgezählt: Jede Antwort ist genau so viele Punkte wert, wie oft sie insgesamt abgegeben wurde – unabhängig davon, ob sie wahr ist. Ein Beispiel:

Frage: Welcher ist der größte Kontinent?
Antworten: 5x Afrika, 3x Asien, 1x Antarktis, 1x Pangäa.

Wer ‘Afrika’ geantwortet hat, bekommt also 5 Punkte gutgeschrieben, wer ‘Asien geantwortet hat 3 Punkte, ‘Antarktis’ und ‘Pangäa’ geben je 1 Punkt.

Die Punkte werden addiert und somit ein Rundensieger bzw. eine Rundensiegerin ermittelt (halt wer in der Runde die höchste Punktzahl hat, is klar).

Wer am Ende des Spiels die meisten Punkte hat, gewinnt.

Natürlich sagt vor Ende einer Runde niemand, was er/sie geantwortet hat, um die Spannung nicht zu zerstören. Bei ähnlichen Antworten (z. B. ‘Holland’/’Niederlande’) entscheidet die Spielleitung in ihrer allgütigen Weisheit, ob die Antworten zusammengefasst oder als unterschiedlich behandelt werden.

Das Problem

Wie man sich leicht vor Augen führen kann, ist die manuelle Auswertung mordsaufwändig: Für jede Person die mitspielt müssen die Antworten zur Berechnung der Punktzahlen zunächst mitgezählt werden, dann die Punktzahlen für jede Antwort errechnet und anschließend rückwärts die errechneten Punktzahlen für jede Antwort den entsprechenden Mitspielerinnen und Mitspielern gutgeschrieben werden. Bei X Personen bedeutet eine Änderung von einem einzigen Wert schlimmstenfalls die Anpassung von O(X) weiteren Werten. Vor Rundenschluss schon mal Teilergebnisse berechnen ist also auch nicht sinnvoll.

Lässt sich das Ganze automatisieren? Okay, das war eine rhetorische Frage. Eine kurze Recherche förderte leider keine fertigen out-of-the-box-I’m-with-stupid-Auswertungslösungen zu Tage. Doch die Problemstellung hatte mich gepackt, ein bedienbares Programm musste her.

Die Lösung

I’m with stupid schreit förmlich nach einer Datenbankanwendung mit Aggregatsfunktionen und Gruppierung (COUNT(), SUM() und GROUP BY) – SQL ist schon was tolles. 6 Datenbanktabellen ein bisschen PHP drumrum, und fertig ist die Multiuser-Multigame-I’m-with-stupid-Umgebung für die faule Spielleitung. Es folgen ein paar Screenshots. Geplant ist, das noch irgendwie öffentlich spielbar zugänglich zu machen, dazu muss ich allerdings noch austüfteln, auf welchem Server unter welcher Domain das laufen soll.

Nach dem Login wird man von einer Übersicht über alle eigenen Spiele begrüßt. Mehrere Personen können gleichzeitig mehrere Spiele leiten.

Nach dem Login wird man von einer Übersicht aller eigenen Spiele begrüßt. Mehrere Personen können gleichzeitig mehrere eigene Spiele leiten.

Hier lassen sich Spieler anlegen und löschen

Hier lassen sich Spieler anlegen und löschen. Die Rundenverwaltung ist übrigens in jedem Menü verfügbar.

Das Kernstück der Anwendung. Hier lassen sich für die Mitspielerinnen und Mitspieler die Antworten eintragen, sobald sie eintreffen. Eine Autovervollständigung hilft dabei, bereits vorhandene ähnliche Antworten zu erkennen.

Das Kernstück der Anwendung. Hier lassen sich für die Mitspielerinnen und Mitspieler die Antworten eintragen, sobald sie eintreffen. Eine Autovervollständigung hilft dabei, bereits vorhandene ähnliche Antworten zu erkennen.

Die Fragen lassen sich im entsprechenden Menüpunkt erstellen und notfalls wieder löschen.

Die Fragen lassen sich im entsprechenden Menüpunkt erstellen und notfalls wieder löschen.

Eine Übersicht über alle Antworten gibt es im Menü 'Antworten verwalten'.

Eine Übersicht über alle Antworten gibt es im Menü ‘Antworten verwalten’.

Was vor allem interessiert, sind natürlich die Ergebnisse. Hier haben wir Runden-...

Was vor allem interessiert, sind natürlich die Ergebnisse. Hier haben wir Runden-…

... und Gesamtpunktzahl im Angebot. Die Punkte werden immer frisch aus der Datenbank berechnet. Die Liste mit den Runden- und Gesamtplatzierungen lässt sich einfach herauskopieren.

… und Gesamtpunktzahl im Angebot. Die Punkte werden immer frisch aus der Datenbank berechnet. Die Liste mit den Runden- und Gesamtplatzierungen lässt sich einfach herauskopieren.

Detaillierte Rundenübersichten gibt es auch noch.

Detaillierte Rundenübersichten gibt es auch noch.

Die Entwicklung war schon spaßig. Das Ganze gibt es bereits im Quellcode auf GitHub, allerdings ist da eigentlich noch ein Refactoring nötig. Aber hey, es läuft 😉

Update: Natürlich will man auch wissen, wie viele Punkte die Antworten gebracht haben…

Die Punkteverteilung kann direkt mit leichter BBCode-Formatierung in beispielsweise einen Forenbeitrag kopiert werden.

Die Punkteverteilung kann direkt mit leichter BBCode-Formatierung in beispielsweise einen Forenbeitrag kopiert werden.

Update, 13.09.2013: Unter http://hscmi.de/iws/ kann man sich das ganze nun auch live und in Farbe ansehen.

  1. Ich wollte das schon immer mal schreiben!

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert