Tobias Leupold
tobias . leupold at gmx . de
10.11.2020
3.4.1
Inhaltsverzeichnis
Muckturnier ist ein Programm für die Turnierleitung eines Muckturniers, mit dem sowohl das Anmelden der Teilnehmer als auch das Auswerten der Ergebnisse einfach, schnell und zuverlässig vorgenommen werden können – für kleine und große Turniere gleichermaßen.
Wer bisher sein Muckturnier mit Stift, Papier und Taschenrechner, einer Excel-Tabelle oder Ähnlichem auswertet, sollte sich das Muckturnier-Programm ansehen! Mittlerweile sind einige Jahre an Erfahrung im Organisieren und Durchführen verschiedener Muckturniere in die Entwicklung eingeflossen; der erste Code für das Programm wurde Anfang 2011 geschrieben.
Es werden verschiedene Turniertypen unterstützt: Es können sowohl feste Paare als auch einzelne Spieler angemeldet werden. Die Paare, die gegeneinander antreten, können in jeder Runde ausgelost, oder nach einem festen Schema für den Turnierablauf zugeordnet werden. Die Anzahl der Runden, Bobbl pro Runde und Punkte pro Bobbl sind frei wählbar (vgl. Regeln für das Turnier).
Insbesondere für große Turniere besteht die Möglichkeit, mehrere Rechner (per LAN oder WLAN) miteinander zu vernetzen. So können dann sowohl die Anmeldung als auch die Auswertung an mehreren Computern durchgeführt werden. Das beschleunigt die Anmeldung erheblich und bietet die Möglichkeit, Eingabefehler zu finden (notfalls auch ohne Netzwerk).
Um Unklarheiten zu beseitigen vorab ein paar Definitionen:
Eine Runde ist ein Turnierabschnitt, der aus mehreren (oft zwei) Bobbln besteht. I. d. R. wird vor dem Turnierbeginn die zu spielende Anzahl an Runden festgelegt. Es kann eine Zeitbegrenzung pro Runde festgelegt werden (nach Ablauf der Zeit können Bobbl abgebrochen werden, vgl. Abgebrochene Bobbl und Zeitbegrenzung).
Der Bobbl hat zwei Bedeutungen: Zum einen steht er für einen Turnierabschnitt, der aus mehreren Spielen besteht. Den Bobbl hat das Team gewonnen, welches zuerst eine definierte Punktezahl (i. d. R. 21) erreicht. Diese wird normalerweise nicht mehr aufgeschrieben (es zählt das Gewinnen des Bobbls).
Der Verlierer bekommt den Bobbl (das ist die andere Bedeutung), einen dicken Punkt, der hinter den letzten Punktestand der Verlierer gemalt wird.
Wird ein Bobbl zu Null gewonnen, wird oftmals zur Verdeutlichung ein doppelter Bobbl beim Verlierer gemalt, der mittels Steg und Bügeln zur Brille ausgestaltet wird. Eine Brille wird wie ein normaler Bobbl gezählt (ein doppeltes Werten einer Brille ist bei einem Muckturnier nicht üblich und wird daher nicht unterstützt).
Ein Spiel wird angesagt („Wenz“, „Schneidermuck“ etc.) und besteht, wenn mit dem üblichen kurzen Blatt gespielt wird, aus sechs Stichen. Es muss eine definierte Anzahl an Punkten (jede Karte hat einen definierten Punktwert) erreicht werden, um das Spiel zu gewinnen.
Aufgeschrieben werden nicht die durch die Stiche erreichten Punkte, sondern ein für das Spiel definierter Punktwert, der für gewöhnlich die Art und Weise der Ansage („Schneider“ oder „Schwarz“ angesagt) und den Ausgang des Spiels („Schneider“ oder „Schwarz“ gewonnen) berücksichtigt.
Die geschossenen Tore bezeichnen die Punkte, die das jeweilige Team in seinen verlorenen Bobbln erreicht hat. Diese Punkte werden bei der Auswertung berücksichtigt: Wenn mehrere Teams gleich viele Bobbl gewonnen haben, wird nach geschossenen Toren sortiert. Je mehr, desto besser: Viele Tore heißen viele Spiele gewonnen, also gut gespielt in den verlorenen Bobbln.
Die gegnerischen geschossenen Tore bezeichnen die Punkte (also „geschossenen Tore“), die die Gegener jeweils in den eigenen gewonnenen Bobbln erreicht haben. Sind sowohl die gewonnenen Bobbl, als auch die geschossenen Tore gleich, dann können diese Punkte zum Aufstellen der Rangliste herangezogen werden: Je weniger Tore die Gegner geschossen haben, desto weniger Spiele haben sie gewonnen und desto besser hat das jeweilige Team in den gewonnenen Bobbln gespielt.
Die genauen Regeln („Wenz über Muck“, „Muck über Wenz“, mit oder ohne Geier, doppelt nach Einwerfen oder nicht etc.) sind für die Auswertung nicht von Belang, solang Bobbl bis zu einer definierten Punktzahl gespielt werden.
Das Turnier in mehrere Runden mit einer definierten Anzahl Bobbl pro Runde einzuteilen ist üblich, aber nicht zwingend nötig: Es kann auch nur eine Runde (dann also das ganze Turnier) mit entsprechend vielen Bobbln gespielt werden. Prinzipiell wäre auch nur ein einziger, großer Bobbl möglich.
Die Punktwertung ist unabhängig vom Turniertyp:
Gespielt wird pro Runde eine definierte Anzahl Bobbl (evtl. auch nur eine große Runde).
Jeder Bobbl wird bis zu einer definierten Zahl von Punkten gespielt. Gewonnen hat das Paar, das zuerst die nötige Punktezahl erreicht bzw. überschreitet. Das Verliererpaar bekommt den Bobbl.
Der gewonnene Bobbl wird immer nur mit der für den Bobbl definierten Punktezahl gewertet – auch dann, wenn durch das letzte Spiel eigentlich mehr Punkte erreicht worden wären.
„Brillen“ (doppelte Bobbl, wenn ein Bobbl zu Null gewonnen wird) werden nicht doppelt, sondern wie ein normaler Bobbl gewertet.
Die in den verlorenen Bobbln erreichten Punkte bekommt das Verliererteam (resp. jeweils die Spieler) als „geschossene Tore“ (vgl. Begriffsdefinitionen) gutgeschrieben.
Die vom Preisschafkopf/Schafkopfrennen bekannten Auswertungsverfahren „Plus“ und „Plus-Minus“ eignen sich für das Auswerten eines Muckturniers nicht. Beide berücksichtigen nur die Ergebnisse der gespielten Spiele, nicht aber das Gewinnen von Bobbln. Aber genau darum geht es ja gerade beim Mucken!
Ein ausführlicher Artikel mit Rechenbeispielen zu „Plus“ und „Plus-Minus“ kann auf muckturnier.org nachgelesen werden: Warum man ein Muckturnier nicht wie ein Schafkopfrennen auswerten kann.
Zu den Begrifflichkeiten „Bobbl“, „geschossene Tore“ und „gegnerische geschossene Tore“ siehe auch vgl. Begriffsdefinitionen.
Die Rangliste wird nach gewonnenen Bobbln aufgestellt (je mehr, desto besser).
Bei gleich vielen gewonnenen Bobbln entscheiden die „geschossenen Tore“ über die Platzierung (je mehr, desto besser).
Bei Gleichstand von Bobbln und Toren können weiterhin (optional) auch noch die „gegenerischen geschossenen Tore“ zur Unterscheidung der Platzierung herangezogen werden (je weniger, desto besser).
Es kann sowohl ein Turnier mit festen Paaren als auch mit einzelnen Spielern ausgewertet werden.
Es kann eine Auslosung eingegeben werden, über die eine automatische Paar- und Tischauswahl (am einfachsten über die Tischnumer) erfolgen kann, und/oder die Auswahl kann aufgrund der bisher eingegebenen Ergebnisse erfolgen, vgl. Automatische Auswahl.
Wenn nach dem Schema „Paar 1 bleibt sitzen, Paar 2 rückt einen Tisch weiter“ gespielt wird, dann kann für das ganze Turnier eine automatische Auswahl erfolgen und die Eingabe der Ergebnisse ist sehr schnell durchführbar.
Sofern die Auslosung vor dem Turnier bekannt ist und auch eingegeben (resp. mittels des Programms erzeugt) wurde, ist die automatische Auswahl bereits ab der 1. Runde möglich, ansonsten ab der 2., wenn die Auslosung über die Eingabe der Ergebnisse der 1. Runde klar ist.
Das Programm enthält keine gewollten Beschränkungen. Im Realeinsatz ist Muckturnier noch nie an irgendwelche Grenzen gestoßen.
Die Punkte pro Bobbl und die Anzahl der Bobbl pro Runde sind auf maximal 9 999 eingestellt (das Bedienelement braucht einen Maximalwert). Ich kann mir nicht vorstellen, dass jemand jemals mehr brauchen könnte, aber auch in dem Fall könnte man den Wert durch das Editieren der Datei shared/DefaultValues.h
(die alle hart kodierten Werte enthält) beliebig im Rahmen der Grenzen der Datentypen erhöhen. Natürlich muss Muckturnier danach neu kompiliert werden).
Nur der Vollständigkeit halber: Die verwendeten Datentypen setzen faktisch Grenzen. Allerdings wird man diese mit sehr großer Wahrscheinlichkeit niemals erreichen. Für Punktzahlen, Runden, IDs etc. wird beispielsweise der Datentyp int
benutzt, dessen Maximalwert bei 2 147 483 647 liegt.
Folgerichtig gibt es de facto keine relevanten Beschränkungen.
Muckturnier benutzt eine SQLite-Datenbank. Die Grenzen von SQLite (bezüglich der maximalen Zeilen pro Tabelle etc.) wird man noch viel unwahrscheinlicher erreichen, als die durch die Datentypen gesetzten.
Abgesehen davon ist mir bis dato nur eine einzige womöglich praxisrelevante Einschränkung bekannt: Eine SQLite-Datenbank mit Schreibzugriff auf einer Windows-Netzwerkfreigabe bzw. einem Samba-/CIFS-Share funktioniert nicht richtig. Das liegt weder am Muckturnier-Programm, noch an SQLite selbst; es liegt an dem Dateisystem-Protokoll, das Windows-Netzwerkfreigaben bzw. Samba-Shares nutzen.
Das Anlegen einer Datenbank bzw. das Öffnen einer Datenbank mit Schreibzugriff auf einem solchen Netzwerklaufwerk ist deswegen nicht möglich.
Ist noch kein Turnier geöffnet, werden nur die Knöpfe zum Anlegen bzw. Öffnen eines Turniers angezeigt (alternativ kann man das auch über „Datei“ → „Neues Turnier starten“ bzw. „Turnier öffnen“ machen). Sobald ein Turnier geöffnet ist bzw. ein neues angelegt wurde, wird die „Paare“- bzw. „Spieler“-Seite angezeigt. Wenn die nötige Anzahl an Paaren bzw. Spielern angemeldet wurde, wird die „Ergebnisse“-Seite, und nach der Eingabe des ersten Ergebnisses schließlich die „Rangliste“-Seite angezeigt.
Standardmäßig werden die Seiten als Tabs (also hintereinander) angezeigt. Sie können aber auch (durch Ziehen mit der Maus) neben- oder übereinander angezeigt werden, sofern das Fenster groß genug ist. Weiterhin können alle Seiten aus dem Hauptfenster herausgezogen, und dann als eigene Fenster angezeigt werden. Das ist z. B. nützlich, wenn man die Rangliste live über einen Beamer (etwa auf einem virtuellen zweiten Desktop) anzeigen will o. Ä.
Mit jeder Dateneingabe oder -änderung wird die Datenbank aktualisiert. Man muss also den jeweils aktuellen Zustand der Datenbank nicht extra speichern.
Jeder Schreibvorgang ist „atomar“, d. h., dass ein Datensatz entweder vollständig oder gar nicht gespeichert wird. Es sollte also auch bei einem Stromausfall (Netzteilstecker wird versehentlich aus dem Notebook gezogen, Akku leer) nicht zu Inkonsistenzen in der Datenbank kommen.
Trotzdem ist natürlich jeder selbst für seine Datensicherung verantwortlich (vgl. auch Backup der Datenbank anlegen und wiederherstellen)!
Durch Klicken auf den großen Splash-Screen-Button links oder „Datei“ → „Neues Turnier starten“ kann eine neue Turnierdatenbank angelegt werden.
Alle Einstellungen können als Vorlage für neue Turniere gspeichert werden, damit sie beim nächsten Mal nicht wieder erst ausgewählt werden müssen. Weiterhin kann man auch die Einstellungen des laufenden Turniers als Vorlage übernehmen, das geht via „Extras“ → „Einstellungen“ auf der Seite „Vorlage Turniereinstellungen“. Die Vorlage für Markierungen muss immer aus einem laufenden Turnier übernommen werden.
Per Voreinstellung zeigt der „Neues Turnier starten“-Dialog nur die „Grundeinstellungen“-Seite. Hier werden Einstellungen festgelegt, die während des Turniers nicht mehr verändert werden können. Namentlich sind das: Der Turniertyp (feste Paare oder einzelne Spieler) und die Punkte pro Bobbl sowie die Bobbl pro Runde.
Wenn die Auswahlbox „Erweiterte Optionen“ angehakt ist, wird links eine Liste weiterer Seiten neben der „Grundeinstellungen“-Seite eingeblendet. Hier können Voreinstellungen für Werte und Optionen eingestellt werden, die auch noch während des Turniers verändert werden können.
Wo die Werte verändert werden können, und was die Einstellungen bedeuten, ist jeweils auf der Seite erklärt.
Über „Datei“ → „Turnierinformationen“ wird für das laufende (offene) Turnier die gewählte Konfiguration angezeigt.
Hier können die Paare bzw. Spieler gespeichert werden. Es wird jeweils ein Name vergeben. Bei einzelnen Spielern sollte dies sinnvollerweise einfach der Name des Spielers sein, bei Paaren die Namen der Paarmitglieder. Übersichtlich ist z. B. „Nachname Vorname / Nachname Vorname“. Das erleichtert die Suche, wenn später auf einem Spielstandzettel z. B. nur noch „Vorname / Vorname“ steht. Der Name kann frei gewählt werden.
Ändern kann man einen Paar- oder Spielernamen jederzeit (auch, wenn bereits Spielstände eingegeben wurden), indem man ihn in der Liste doppelt anklickt (alternativ auch per Rechtsklick über das Kontextmenü). Gespeichert wird die Änderung durch das Drücken der Return- bzw. Enter-Taste.
Wenn mit dem Turnier noch nicht begonnen wurde (also noch keine Spielergebnisse gespeichert wurden), können Paare oder Spieler gelöscht werden. Hierzu einfach das Paar oder den Spieler mit der rechten Maustaste anklicken und im Kontextmenü „[Paar|Spieler] löschen“ auswählen. Liegen bereits Spielergebnisse vor, ist nur noch das Ändern des Paar- bzw. Spielernamens möglich.
Es können beliebig viele Markierungen erstellt werden. Für jede Markierung kann eine Farbe und ein Name vergeben werden. Bei der Sortierung kann zwischen „neuer Block“ und „fortlaufend“ gewählt werden. Ein neuer Block gruppiert alle entsprechend markierten Namen, mit einer „fortlaufenden“ Markierung markierte Namen werden mit in den vorhergehenden Block einsortiert. Die Reihenfolge der Markierungen bestimmt die Reihenfolge der Anzeige.
Über das Kontextmenü der Paar-/Spielerliste können einzelne Paare/Spieler oder die ganze Liste markiert werden, bzw. es können Markierungen entfernt oder auch entsprechend markierte Einträge gelöscht werden.
Markierungen sind z. B. sinnvoll, wenn man vorangemeldete Spieler als noch nicht erschienen kennzeichnen will, Paare/Spieler, die das Startgeld noch nicht bezahlt haben etc.
Bei Feste-Paare-Turnieren können allein gekommene Spieler gesondert behandelt werden. Es muss eine Markierung als „Allein da“ definiert werden. Diese kann bei der Anmeldung auch automatisch gestezt werden, z. B. dann, wenn der Name keinen Schrägstrich enthält.
Allein gekommene Spieler können per Kontextmenü zu einem Paar zusammengeführt werden. Es wird immer angezeigt, wie viele Paare und/oder Spieler noch fehlen, damit das Turnier gestartet werden kann.
Die Eingabe einer Auslosung ist optional, bringt aber vor allem für große Turniere organisatorische Vorteile.
Im Normalfall wird erst fertig angemeldet, und dann wird (per Zettel) ausgelost. Man muss entsprechend vorher wissen, wie viele Tische besetzt sind, damit keine Lücken in der Platzvergabe entstehen.
In diesem Fall ist die Auslosung zunächst nicht bekannt und ergibt sich erst aus der Eingabe der 1. Runde. Bei sehr vielen Teilnehmern dauert der zusätzliche Auslosungsschritt sehr lang, und die Tatsache, dass man nicht weiß, wer wo sitzt, birgt organisatorische Unwägbarkeiten. Es kann natürlich eine „Zettel-Auslosung“ auch manuell übertragen werden, aber das dauert dann noch länger. Deswegen bietet das Programm ein Konzept zum Auslosen direkt bei der Anmeldung.
Sinnvollerweise blendet man auf der „Anmeldung“-Seite (sofern noch nicht geschehen) zunächst die entsprechende Spalte über den „Einstellungen“-Knopf und „Angezeigte Spalten“ ein. Eine Auslosung kann man durch einen Klick auf diese Spalte (oder optional über das Kontextmenü) eingeben. Es wird eine Auslosung voreingestellt, die Werte können aber frei verändert werden.
Eine Übersicht über alle bisher zugelosten Plätze und die Belegung der Tische kann über „Extras“ → „Übersicht Auslosung“ eingeblendet werden.
Die Einstellungen für die Auslosung (also die voreingestellten Werte des „Auslosung eingeben“-Dialogs) können in diesem Menü über „Einstellungen für die Auslosung“ und auch über die Vorlage des „Neues Turnier starten“-Dialogs eingestellt werden.
Es stehen verschiedene Optionen zur Auswahl:
Ist die Option „Fortlaufend“ gewählt, dann findet streng genommen keine Auslosung statt. Es wird immer der erste freie Platz voreingestellt. Es entstehen keine Lücken, und die Auslosung ist zwangläufig fortlaufend und – die passende Antzahl an Anmeldungen natürlich vorausgesetzt – auch vollständig. Allerdings fehlt natürlich hierbei der Zufall.
Für die zufällige Vergabe der Plätze gibt es drei Optionen:
Die komplett zufällige Vergabe ist dann sinnvoll, wenn die Anzahl der Tische bekannt ist, oder es zumindest sicher ist, dass eine gewisse Anzahl an Tischen auf jeden Fall vergeben wird. Der einstellbare Tisch ist der letzte Tisch, bis zu dem alle Plätze komplett zufällig ausgelost werden.
Es werden immer zunächst alle Plätze vergeben, die durch diese Angabe definiert sind, sofern sie aktiviert ist.
Weiterhin kann eine komplette, lückenlose und fortlaufende Auslosung für alle Anmeldungen über das Kontextmenü erzeugt werden, sofern die passende Anzahl an Anmeldungen vorliegt.
Diese Variante bietet sich an, wenn nicht klar ist, wie viele Tische besetzt sein werden, aber die Auslosung gleich bei der Anmeldung gemacht soll, also vor allem für sehr große Turniere. Hierbei handelt es sich um einen gangbaren Kompromiss zwischen Zufäligkeit und Handhabbarkeit.
Das Vergabefenster definiert sich durch den ersten Tisch mit einem freien Platz und die eingestellten darauf folgenden Tische.
Zur Veranschaulichung ein Beispiel: Die komplett zufällige Vergabe ist deaktiviert, es liegen noch keine Auslosungen vor und der Bereich wird auf „+4 Tische“ eingestellt. Es werden so lange Plätze an den Tischen 1, 2, 3, 4 und 5 ausgelost, bis Tisch 1 voll besetzt ist. Dann rückt das Vergabefenster weiter, und es werden Plätze an den Tischen 2, 3, 4, 5 und 6 verlost. Wenn Tisch 2 voll besetzt ist dann an den Tischen 3, 4, 5, 6 und 7 etc.
Viel Zufälligkeit und nur wenige nötige Änderungen an der Auslosung bietet die Voreinstellung „+4“ (also die Vergabe in einem Fenster von 5 Tischen). Im Schnitt ist damit oft nur das Umsetzen von zwei Paaren bzw. Spielern vor dem Beginn des Turniers nötig. Dies kann ebenfalls computergestützt geschehen und ist unter Auslosung bereinigen beschrieben.
Eine statistische Betrachtung dieser Funktion ist in einem News-Beitrag auf muckturnier.org zu finden.
Ist die komplett zufällige Vergabe deaktiviert oder bereits vollständig vergeben, werden die Plätze nach der Fenster-Vergabe ausgelost, sofern sie aktiviert ist.
Unabhängig von den anderen Einstellungen kann ein Limit der zufälligen Vergabe (komplett zufällig oder in einem Vergabefenster) eingestellt werden. Wenn alle Plätze, die für die zufällige Vergabe definiert wurden, vergeben sind, werden nur noch fortlaufende Plätze voreingestellt.
Die Einstellung „1“ für diese Option bewirkt das selbe wie die „Fortlaufende Vergabe“.
Ungeachtet der anderen Optionen kann eine maximale Tischanzahl eingestellt werden. Die einstellbaren Werte für die komplett zufällig Auslosung und das Limit für die zufällige Vergabe richten sich danach. Wenn die Fenster-Vergabe aktiviert ist, dann werden keine Tische oberhalb des Tisch-Limits ausgelost.
Ist die Option aktiviert und alle verfügbaren Plätze wurden vergeben, dann erfolgt nur noch eine sequenzielle (fortlaufende) Platzvegabe und es wird ein Warnhinweis angezeigt.
Außerdem wird, sofern eine maximale Tischanzahl gesetzt ist, bereits auf der Anmeldeseite ein Warnhinweis angezeigt, wenn mehr Anmeldungen als Plätze vorliegen.
Wenn durch die zufällige Vergabe von Plätzen Lücken und/oder unvollständige Paare entstanden sind, muss die Auslosung vor dem Beginn des Turniers bereinigt, also vollständig und fortlaufend gemacht, werden.
Das kann automatisch über „Extras“ → „Auslosung bereinigen“ bzw. die Links auf der Anmelde- oder Auslosungs-Übersichts-Seite erfolgen. Die Funktion steht zur Verfügung, wenn die Anzahl der Anmeldungen für den gewählten Turniermodus korrekt ist (durch zwei teilbar für feste Paare, durch vier teilbar für einzelne Spieler), es keine abwesenden oder allein gekommenen Anmeldungen gibt und alle Anmeldungen eine Auslosung haben (also potenziell das Turnier begonnen werden kann).
Dabei wird die Variante berechnet, bei der möglichst wenige Paare/Spieler umgesetzt werden müssen. Immer vorausgesetzt, dass es nötig ist, wird dabei folgendes in folgender Reihenfolge gemacht:
Für Einzelspielerturniere zunächst:
Unvollständige Paare mit Spielern vervollständigen, die die passende Paarnummer gezogen haben
Unvollständige Paare mit Spielern vervollständigen, die eine andere Paarnummer gezogen haben
Für Feste-Paare- und Einzelspielerturniere dann:
Unvollständige Tische mit Paaren der passenden Paarnummer vervollständigen
Unvollständige Tische mit Paaren, die eine andere Paarnummer hatten, vervollständigen
Lücken durch unbesetzte Tische schließen
Es werden also möglichst viele Paare/Spieler in ihrer bereits zugelosten Rolle „Paar 1“ bzw. „Paar 2“ belassen (damit sich möglichst wenige beschweren). Das Umsetzen/Auffüllen geht immer vom Ende der Auslosung aus, so dass bei einer quasi-sequenziellen „Verlosungsfenster“-Vergabe nur wenige Paare/Spieler umgesetzt werden müssen, und das die sind, die sich ganz am Ende angemeldet hatten.
Optional kann die Liste der nötigen Änderungen auch ausgedruckt werden. Hierzu wird sie (der Einfachheit halber zunächst) in eine HTML-Datei exportiert und mit dem Standard-Webbrowser geöffnet. Mit diesem kann sie dann gedruckt werden.
Das Layout der Eingabemaske unterstützt zwei Varianten von Spielstandzetteln: Einmal „Horizontal“, wo Paar 1 oben und Paar 2 unten steht und die Bobbl von links nach rechts aufgeschrieben werden und zusätzlich „Vertikal“, wo Paar 1 links und Paar 2 rechts steht und die Bobbl von oben nach unten aufgeschrieben werden.
Die Variante kann im „Neues Turnier starten“-Dialog voreingestellt, auf der „Ergebnisse“-Seite via „Optionen“ aber auch noch im laufenden Betrieb umgestellt werden.
Für die meiner Meinung nach übersichtlichere und gängigere horizontale Variante stelle ich einen Beispiel-Spielstandzettel auf der Muckturnier-Homepage zur Verfügung, u. a. als PDF zum direkt ausfüllen und drucken.
Zunächst wird die Runde ausgewählt, für die das Ergebnis eingetragen werden soll. Wenn eine Runde offen ist (also noch nicht alle Ergebnisse der entsprechenden Runde eingetragen wurden), dann wird automatisch diese Runde geöffnet (bzw. die erste offene Runde, falls mehrere Runden offen sind).
Alle bisher abgeschlossenen Runden sowie alle offenen Runden können über die Rundenauswahl angezeigt bzw. bearbeitet werden.
Der Eingabedialog sieht die Eingabe von Runde, Tischnummer und zwei Paaren bzw. vier Spielern vor. Sollte ohne Tischnummern gespielt werden, kann die Tischauswahl auch ausgeblendet werden (über das Menü des „Einstellungen“-Knopfes). In diesem Fall wird eine Tischnummer automatisch intern gesetzt (für die Datenbank muss immer eine Tischnummer ausgewählt werden, auch dann, wenn sie nicht angezeigt wird) und die automatische Auswahl steht nicht zur Verfügung.
Die Auswahlboxen enthalten als wählbare Optionen alle noch nicht eingegebenen Paare bzw. Spieler und Tischnummern. Es können auch Teile der Namen bzw. des Namens eingeben werden. Damit werden die auswählbaren Optionen auf Übereinstimmungen eingeschränkt (das ist besonders bei vielen Spielern äußerst nützlich).
Wenn die Option „Automatische Auswahl“ → „Auswahl nach Auslosung“ im Menü unter dem „Einstellungen“-Knopf aktiviert ist, kann die Auswahl des Tischs und der Paare bzw. Spieler anhand der eingegebenen Auslosung und/oder anhand der Ergebnisse der letzten Runde erfolgen.
Wenn ein Tisch oder eines der Paare bzw. einer der Spieler gewählt wird, dann werden die anderen Werte passend ergänzt. Es wird hierzu die eingegebene Auslosung benutzt. Mit dieser Option allein (ohne „Paar 2 rückt pro Runde weiter“, s. u.) kann die Auswahl der 1. Runde automatisiert werden, und auch die folgender Runden, wenn pro Runde neu ausgelost wird.
Weiterhin kann – sofern der Turniermodus so gespielt wird – die Option „Paar 2 rückt pro Runde weiter“ aktiviert werden. Dann werden die eingegebenen Ergebnisse der letzten Runde für die automatische Auswahl herangezogen. Paar 1 bleibt das genze Turnier lang am selben Tisch sitzen, und Paar 2 rückt immer einen Tisch weiter (vom letzten dann an den ersten). Für die 1. Runde liegen natürlich noch keine Ergebnisse der letzten Runde vor, deswegen wird in der 1. Runde auf die eingegebene Auslosung zurückgegriffen. Gibt es diese nicht, dann müssen die Paare und Tische in der 1. Runde manuell ausgewählt werden, und die automatische Auswahl steht erst in der 2. Runde zur Verfügung.
Die automatische Auswahl kann jederzeit ausgetzt werden, indem der „Automatische Auswahl (de)aktivieren“-Knopf rechts aktiviert wird. Damit kann man von der Auswahl abweichende Ergebnisse eingeben und es werden keine anderen Auswahlen automatisch gesetzt.
Unter der Paarauswahl gibt es für jeden Bobbl ein Eingabefeld. Das ausgewählte Paar bekommt den Bobbl (hat ihn also verloren; hier den Radio-Knopf anklicken) und es können die erreichten Punkte („geschossene Tore“) eingegeben werden. Das andere Paar bekommt automatisch die festgelegten Bobbl-Punkte, hier wird das Eingabefeld deaktiviert (außer, wenn der Bobbl abgebrochen wurde).
Ein Rechtsklick auf einen der beiden Radio-Knöpfe bzw. Eingabefelder öffnet einen kleinen Eingabedialog, mittels welchem der Spielstand direkt durch einen Klick ausgewählt werden kann, ohne das Mausrad oder die Tastatur verwenden zu müssen.
Der Spielstand kann entweder mit dem „Ergebnis eintragen“-Knopf gespeichert werden, oder indem man in einem der beiden Eingabefelder im letzten Spiel die Return- bzw. Enter-Taste drückt.
Wenn eine Zeitbegrenzung pro Runde vereinbart ist, kommt es vor, dass es unvollständige (abgebrochene) Spielstände gibt. Um ein solches Ergebnis einzugeben, wird einfach der letzte gespielte Bobbl als abgebrochen markiert (mit dem kleinen Knopf rechts oben). Daraufhin kann man zwei Spielstände eingeben, die jedem Paar als geschossene Tore gutgeschrieben werden. Beide Paare haben den Bobbl verloren. Alle folgenden Bobbl (sofern vorhanden) werden für beide Paare als „zu 0 verloren“ gewertet.
Wer mit Zeitbegrenzung spielt, will evtl. die über „Extras“ anzeigbare Stoppuhr verwenden. Diese ist ein Countdown-Timer. Wenn die Zeit abgelaufen ist, wird sie wieder hochgezählt, und die Zeitanzeige wechselt die Farbe von schwarz nach rot.
Unten werden alle bisher eingetragenen Spielergebnisse angezeigt. Per Kontextmenü (mit der rechten Maustaste oder mit einem Doppelklick einen Spielstand anklicken) kann man einen Spielstand löschen oder korrigieren.
Beim Korrigieren wird der Spielstand auch gelöscht, aber die eingegebenen Daten werden als ausgewählte Werte gesetzt. So kann man z. B. einen falsch eingegebenen Punktestand schnell korrigieren, ohne die anderen Werte erneut eingeben zu müssen und den Tisch bzw. die Paare neu auszuwählen.
Sobald das erste Ergebnis eingetragen wurde, ist die momentane Rangliste verfügbar. Wenn es sich um ein Zwischenergebnis handelt, also von einer oder mehreren Runden noch Spielergebnisse fehlen, wird dies entsprechend vermerkt.
Es kann mit der entsprechenden Checkbox eingestellt werden, ob die Rangliste – zusätzlich zu den gewonnenen Bobbln und den geschossenen Toren – auch nach den geschossenen Toren der Gegner in den gewonnenen Bobbln erstellt wird (vgl. auch Regeln für das Turnier).
Standardmäßig wird die Rangliste für den aktuellen Turnierstand angezeigt. Es können aber auch Verlaufs-Ranglisten für frühere Runden erstellt werden, hierzu einfach die entsprechende Runde auswählen.
Wenn das Turnier noch nicht begonnen hat (also noch kein Spielstand eingegeben wurde), kann eine Paar- bzw. Spielerliste importiert werden. Der zugehörige Menüpunkt ist „Datei“ → „Import und Export“ → „[Paar|Spieler]liste importieren“. Hierfür kann eine einfache, UTF-8-kodierte Textdatei (wie sie auch von der Exportfunktion erzeugt wird) verwendet werden, die pro Zeile einen Paar- bzw. Spielernamen enthält. Leerzeichen am Anfang oder Ende, mehrere aufeinanderfolgende Leerzeichen sowie leere Zeilen werden automatisch entfernt.
Wird eine Datei geöffnet, die Zeichen außerhalb der ASCII-Kodierung enthält (Umlaute, Akzente, etc.), und mit der falschen Kodierung gespeichert wurde (z. B. Windows-1252, ISO 8859-1, ISO 8859-15 etc.), dann wird der Import abgebrochen.
Jeder vernünftige Editor (unter Linux was auch immer man nehmen will, unter Windows z. B. notepad++) kann eine solche Datei mit der „falschen“ Kodierung öffnen, und mit der „richtigen“ speichern, so dass sie trotzdem importiert werden kann.
Es wird eine Vorschau des zu importierenden Datensatzes angezeigt. Gibt es (wenn bereits Paare/Spieler angemeldet sind oder auch innerhalb der Importdatei) Duplikate und/oder Namen, die zu Verwechslungen führen könnten, werden diese extra angezeigt und können vom Export ausgeschlossen bzw. mit einem Präfix ergänzt werden (um sie nach dem Import leicht finden und evtl. umbenennen zu können).
In keinem Fall werden bestehende Anmeldungen überschrieben oder gelöscht.
Sobald mindestens ein Paar bzw. Spieler angemeldet wurde, kann eine Liste der Paare bzw. Spieler exportiert werden (um z. B. eine Liste zum Abhaken aus einer bereits mit Voranmeldungen gefüllten Datenbank erstellen zu können).
Der zugehörige Menüpunkt ist „Datei“ → „Import und Export“ → „[Paar|Spieler]liste exportieren“. Es kann auch eine per Markierungen ausgezeichnete Untermenge der Anmeldungsliste exportiert oder vom Export ausgeschlossen werden.
Die Liste wird als einfache Textdatei exportiert und ist UTF-8-kodiert. Man kann dieses Format mit einem beliebigen Texteditor oder Textverarbeitungsprogramm öffnen und weiterverarbeiten.
Sind alle Runden abgeschlossen (das Turnier also potenziell beendet), können via „Datei“ → „Import und Export“ → „Turnierdaten exportieren“ (alle) Daten des Turniers in ein von Muckturnier und der Datenbank unabhängiges Format exportiert werden.
Man kann auswählen, welche Datensätze exportiert werden, und wie diese formatiert sein sollen (sollen z. B. Überschriften angezeigt werden, die Ergebnisse als einfache Zahl oder mit dem Bobbl-Symbol ausgegeben werden etc.).
Die Daten können als HTML oder CSV exportiert werden. Als Zeichensatz kommt jeweils UTF-8 zum Einsatz.
Es wird eine als HTML5 formatierte, UTF-8-kodierte Datei ausgegeben. Das Ergebnis kann programm- und plattformunabhängig mit einem Webbrowser angezeigt werden.
Wenn alle verfügbaren Daten exportiert werden, dann eignet sich dieses Format vor allem für das Archivieren von Turnierergebnissen. So können alle relevanten Daten eines Turniers in eine formatierte, auf absehbare Zeit für Menschen lesbare Form gebracht, und auch später noch eingesehen bzw. ausgedruckt werden.
Es wird eine UTF-8-kodierte Datei ausgegeben, die als Trennzeichen Tabulatoren enthält. Diese kann z. B. mit einem Tabellenkalkulationsprogramm weiterverarbeitet werden.
Beim Öffnen darauf achten, dass als Zeichensatz „UTF-8“ und als Trennzeichen Tabulatoren eingestellt sind – formatbedingt enthält eine CSV-Datei keinerlei Meta-Informationen (welcher Zeichensatz oder welches Trennzeichen benutzt wurde etc.), deswegen muss man diese Informationen manuell angeben!
Bei großen Turnieren hat es sich bewährt, sowohl die Anmeldung als auch die Auswertung an zwei oder mehr Rechnern durchzuführen. Mit mindestens zwei Computern vermeidet man bei der Anmeldung lange Schlangen, bei der Auswertung (die natürlich unabhängig voneinander eingegeben werden muss) kann man Eingabefehler finden, da diese zu unterschiedlichen Ranglisten führen. Das ist mittels der Netzwerkfunktionalität sehr einfach organisierbar.
Die Voraussetzung für die folgenden Funktionen ist, dass sich alle beteiligten Rechner in einem Netzwerk (LAN/WLAN) befinden. Dafür kann man z. B. eine alte Fritz-Box oder – perfekt geeignet für ein Muckturnier – einen der vielen vergleichsweise günstigen mobilen Mini-Router (GL.iNet GL-AR150, TP-Link TL-WR802N o. ä.) nehmen.
Eine Internetverbindung wird natürlich nicht benötigt. Die Rechner müssen sich nur im Netzwerk erreichen können (und nur um das an dieser Stelle gesagt zu haben: Nein, das Muckturnier-Programm kommuniziert nicht mit irgendwelchen Servern und es überträgt auch keine Daten irgendwohin, siehe Quellcode).
Es werden für die Netzwerkkommunikation zwei Server benutzt. Einmal der „Discover“-Server, mit dessen Hilfe Clients einen Muckturnier-Server im Netzwerk automatisch finden können, und der eigentliche Muckturnier-Server, der sich um das Verteilen von Änderungen und auch den Ranglistenvergleich kümmert.
Der Muckturnier-Server nutzt standardmäßig Port 8810 TCP, der Discover-Server Port 8811 UDP. Diese beiden Ports sind laut IANA nicht vergeben (Stand: 09/2019) und es wurde auch noch keine „Illegal Activitiy“ darauf verzeichnet. Die Chancen stehen also ganz gut, dass man sie „einfach so“ nutzen kann.
Falls ein anderer Prozess auf dem Rechner die Ports 8810 TCP und/oder 8811 UDP bereits benutzen sollte (oder einem die Ports einfach nicht gefallen ;-), können sie über den „Einstellungen“-Dialog (Seite „Netzwerk“) beliebig zwischen 1024 und 65535 eingestellt werden. Es können auch beide Server den selben Port nutzen, weil der eine TCP und der andere UDP verwendet, und es wegen des unterschiedlichen Protokolls auch dann keine Kollisionen gibt (wenngleich man das eigentlich nur dann macht, wenn der selbe Dienst über zwei Protokolle erreichbar ist. In diesem Fall sind es zwei verschiedene Dienste; technisch möglich ist es aber jedenfalls).
Wenn ein Programm unter Windows z. B. einen TCP-Server startet, dann wird i. d. R. eine Sicherheitswarnung der „Firewall“ angezeigt. Natürlich darf die Netzwerkkommunikation des Muckturnierprogramms nicht geblockt werden. Der oder die verwendeten Ports dürfen natürlich ebenfalls nicht blockiert werden, weder auf der Server-, noch auf der Client-Seite.
In den meisten Fällen wird wohl ein klassisches IPv4-Klasse-C-Netzwerk zum Einsatz kommen (mit Adressen wie 192.168.0.10, 192.168.0.11 etc.), IPv6-Adressen können aber genauso benutzt werden.
Technisch gesehen ist das Muckturnier-Serverprotokoll so aufgebaut, dass die zu übermittelnden Daten erst in ein JSON-Objekt verpackt, dann in einen String konvertiert, und schließlich in einem QDataStream per TCP/IP übertragen werden. Auf der anderen Seite wird dann wieder aus dem Stream der String geholt, in ein JSON-Objekt geparst und man kann auf die Daten zugreifen. Netterweise kümmern das zugrundeliegende Protokoll TCP und der QDataStream bereits auf der Übertragungsebene darum, dass alle Pakete vollständig und in der richtigen Reihenfolge übertragen werden.
Es gibt keine Authentifizierung und auch keine Absicherung der Kommunikation; man sollte darauf achten, ein geschlossenes Netzwerk aufzubauen, das nur aus vertrauenswürdigen Teilnehmern besteht.
Einen irgendwie gearteten Angriff mittels manipulierter Anfragen kann ich mir zwar beim besten Willen nicht vorstellen – schlimmstensfalls sollte eine (manipulierte) Anfrage vom Server abgelehnt und/oder die Verbindung zum Client aufgrund nicht mehr synchroner Prüfsummen beendet werden. Aber man weiß ja nie ;-)
Sobald auf einem der beteiligten Rechner eine beschreibbare Datenbank geöffnet ist, kann dort per „Netzwerk“ → „Als Server einrichten“ ein Muckturnier-Server gestartet werden, an dem sich dann beliebig viele andere Rechner als Clients anmelden können (per „Netzwerk“ → „Mit Server verbinden“).
Über das Netzwerk werden Änderungen an der Anmeldungsliste verteilt, und es ist ein Ranglistenvergleich möglich. Es wird jeweils TCP als Protokoll benutzt. Der Port kann frei gewählt werden (von 1024 bis 65535, voreingestellt ist 8810), darf aber natürlich noch von keinem anderen Programm belegt sein.
Wird auf einem Rechner die Netzwerk-Client-Seite geöffnet, wird automatisch versucht, einen Muckturnier-Server im Netzwerk zu finden. Dieser Vorgang kann (wenn der Server z. B. noch nicht gestartet war) mittels „Server suchen“ wiederholt werden. Wird der Server nicht gefunden, kann die IP-Adresse und der Port (die sog. „Socket-Adresse“) des Servers auch manuell eingegeben werden.
Damit sich ein Client verbinden kann, muss er ebenfalls eine beschreibbare Datenbank geöffnet haben. Damit eine Verbindung hergestellt werden kann, müssen die Turniereinstellungen identisch sein, ansonsten wird die Verbindung abgelehnt.
Wenn noch keine Ergebnisse eingegeben wurden, dann werden evtl. lokal eingegebene Namen gelöscht, und die komplette Anmeldungsliste des Servers übernonmmen. Gibt es bereits Ergebnisse, dann wird die lokale Anmeldungsliste mit der des Servers abgeglichen und Änderungen können übernommen (alternativ auch manuell korrigiert) werden. In jedem Fall werden lokale Markierungen verworfen und durch die auf dem Server ersetzt.
Der Discover-Server wird beim Start des Muckturnier-Servers automatisch mitgestartet, mit der in den Einstellungen festgelegten Portnummer. Die Voreinstellung ist Port 8811, es wird UDP als Protokoll benutzt.
Der Betrieb des Servers ist nicht zwingend nötig. Er bringt aber den Komfort, dass die Socket-Adresse des Servers nicht manuell eingegeben werden muss: Wenn ein Client sich mit einem Server verbinden will, dann wird zunächst automatisch per UDP-Broadcast nach einem Server gesucht. Wenn der Server so eine Anfrage erhält, dann antwortet er mit seiner IP-Adresse und Portnummer, und die kann dann automatisch zum Verbinden benutzt werden.
Sollte das Starten fehlschlagen oder der genutzte Port (bzw. UDP-Kommunikation darüber) blockiert sein, funktioniert der Muckturnier-Server unabhängig davon trotzdem; die Clients müssen lediglich vor dem Verbinden die IP-Adresse und den Port des Servers manuell eingeben.
Alle Änderungen an der Paar- bzw. Spielerliste, die an einem der Rechner im Netzwerk vorgenommen werden (egal ob Server-Rechner oder Client-Rechner), werden an alle Beteiligten verteilt und angewandt. Namentlich das Anmelden neuer Paare/Spieler, das Löschen oder Umbenennen vorhandener und das Markieren bzw. Enfernen von Markierungen. Änderungen an verfügbaren Markierungen werden ebenso verteilt.
Alle Rechner, die sich an einem Muckturnier-Server angemeldet haben, haben immer den selben Datenbestand bezüglich Markierungen und der Anmeldungsliste.
Wenn kein Netzwerk zur Verfügung steht, kann trotzdem (mit Einschränkungen) an mehreren Rechnern angemeldet werden, vgl. Anmeldung ohne Netzwerk mit zwei Computern.
Im Netzwerkbetrieb muss die Anmeldung explizit beendet werden, bevor Ergebnisse eingegeben werden können. Das kann der Server und auch jeder Client über „Netzwerk“ → „Anmeldung beenden“ (bzw. über den zugehörigen Link auf der Ergebnisse-Seite) machen.
Die eingegebenen Ergebnisse werden nicht synchronisiert. Der Sinn dahinter ist das Finden von Eingabefehlern: Wenn man die Ergebnisse unabhängig voneinander an mindestens zwei Rechnern eingibt, dann treten bei Tippfehlern, Zahlendrehern etc. Unterschiede auf. Würde man die Eingabe auf zwei Rechner aufteilen, hätten gleich zwei Benutzer die „Chance“, unbemerkte Falscheingaben zu machen.
Auf jedem Client werden alle eingegebenen Ergebnisse fortlaufend mit denen des Servers verglichen und der Status (identisch – nicht identisch) neben den bisherigen Ergbnissen angezeigt. Die Anzeige wird bei jeder client- und serverseitigen Eingabe aktualisiert. Gibt es Unterschiede zum Server, dann können diese mittels des dann angezeigten Links in einem extra Dialog angezeigt und (durch den Abgleich mit dem jeweiligen Spielstandzettel) korrigiert werden.
Das ältere und weniger komfortable Vorgehen zum Finden von Eingabefehlern ist der Ranglistenvergleich per Netzwerk (s. u.).
Per „Netzwerk“ → „Ranglistenvergleich“ kann die lokale Rangliste mit der des Servers verglichen werden. Gibt es Unterschiede (liegen also Eingabefehler vor), dann werden die jeweiligen Paare/Spieler samt der sich unterscheidenden Bobbl, Tore bzw. gegenerischen Tore angezeigt. So kann man die falsch eingegebenen Spielstände finden und anhand der Spielstandzettel korrigieren.
Sinnvollerweise sollten die Ranglisten nach dem vollständigen Eingeben einer Runde verglichen werden, damit man nicht in mehreren Runden nach potenziell falsch eingetragenen Spielstandzetteln suchen muss. Danach müssen die Ranglisten natürlich noch einmal verglichen werden (und sollten dann identisch sein).
Für die netzwerklose Variante des Ranglistenvergleichs können Prüfsummen benutzt werden.
Prinzipiell sollten die Netzwerkfunktion im Rahmen des Möglichen transparent funktionieren, d. h. dass z. B. durch eine Änderung eines anderen Netzwerkteilnehmers ein anderer nicht beeinträchtigt wird. Beispielsweise werden – wenn möglich – der Zustand einer Spielstandeingabe oder der Änderung eines Names nach dem Verarbeiten und Anwenden der Netzwerkänderung wiederhergestellt, und zwar so schnell, dass es der jeweilige Benutzer gar nicht merken dürfte.
Ein relevanter Unterschied ist aber, dass die Anmeldung explizit beendet werden muss (vgl. Vergleich der eingegebenen Ergebnisse). Im Ein-Rechner-Betrieb können Ergebnisse einfach dann eingegeben werden, wenn eine korrekte Anzahl von Paaren (durch zwei teilbar) oder Spielern (durch vier teilbar) angemeldet ist. Wurde das erste Ergebnis eingegeben, dann können Namen noch verändert werden, aber es können keine Paare/Spieler mehr angemeldet oder gelöscht werden.
Nehmen mehrere Rechner an einem Netzwerk teil, dann kann theoretisch an einem Rechner ein Ergebnis eingetragen werden, und von einem anderen Rechner (ohne eingegebene Ergebnisse) aus trotzdem noch ein Paar/Spieler angemeldet oder gelöscht werden (was an alle Teilnehmer verteilt werden würde).
Deswegen ist im Netzwerkbetrieb die Spielstandeingabe deaktiviert, bis explizit vom Server oder einem Client aus die Anmeldung beendet wird („Netzwerk“ → „Anmeldung beenden“).
Ist diese Aktion ausgeführt worden, können auch dann Paare/Spieler nicht mehr angemeldet oder gelöscht werden, wenn der letzte eingegebene Spielstand gelöscht wurde. Sollten nach dem Beenden der Anmeldung noch Änderungen an der Anmeldungsliste abgesehen vom Editieren eines Namens oder der Änderung einer Markierung nötig sein (also Hinzufügen oder Löschen), dann bitte den Server schließen und neu starten und alle Clients neu anmelden. Danach sind – vorausgesetzt es sind noch keine Ergebnisse eingegeben oder alle eingegebenen Ergebnisse sind gelöscht worden – wieder alle Änderungen an der Anmeldungsliste möglich.
Über „Extras“ → „Stoppuhr“ kann ein Countdown-Timer angezeigt werden. Diese Funktion ist sinnvoll, wenn mit einer Zeitbegrenzung gespielt wird (vgl. auch Abgebrochene Bobbl).
Diese Funktion war der ursprüngliche Ansatz zum Finden von Eingabefehlern. Durch den automatischen netzwerkseitigen Vergleich der eingegebenen Ergebnisse der auch den Ranglistenvergleich per Netzwerk braucht man diese Funktion eigentlich nur noch zu Entwicklungs- bzw. Debuggingzwecken, es sei denn, man hat kein Netzwerk.
In „Extras“ → „Prüfsummen“ findet sich der Prüfsummen-Dialog. Prüfsummen können zum Abgleich der Ranglisten zweier Auswertungsrechner genutzt werden, um Eingabefehler zu finden, wenn keine Netzwerkverbindung zur Verfügung steht (für die komfortablere Variante, die aber eine Netzwerkverbindung voraussetzt, siehe Ranglistenvergleich per Netzwerk).
Weichen die Prüfsummen ab, dann wurden Ergebnisse unterschiedlich eingegeben. Wichtig ist, dass die Prüfsummen für die Paar- bzw. Spielerlisten identisch sind, da die Namen der Teilnehmer auch Teil des Datensatzes sind, mit dem die Prüfsumme für die Rangliste berechnet wird. Weicht nur ein Buchstabe in einem Namen oder ein Spielstand um einen Punkt ab, erhält man vollkommen unterschiedliche Prüfsummen.
Beispiel: Für eine Paarliste mit den Paaren „Karl / Fritz“ und „Heinz / Günther“ wird die Prüfsumme ce72 9cff 50a6 a464 b0d4 81cd f30f 9fde
berechnet. Ändert man nur einen Buchstaben und benennt „Heinz / Günther“ zu „Heinz / Gunther“ um, dann erhält man eine ganz andere Prüfsumme, nämlich 5af7 a74a 9823 2c96 c170 1ad9 f928 ff93
.
Weichen die Prüfsummen ab, kann man zum Finden des oder der falsch eingegebenen Ergebnisses bzw. Ergebnisse Teil-Prüfsummen der Rangliste nutzen. Diese werden jeweils für die Hälfte der Rangliste berechnet, und die zugehörigen Ranglistendaten werden angezeigt. Klickt man auf „Aufteilen“, dann wird die jeweilge Hälfte der Rangliste wieder halbiert und die Prüfsummen neu berechnet.
Es wird immer die Hälfte weiter aufgeteilt für die Prüfsummen nicht übereinstimmen. Wenn beide nicht stimmen, dann immer die erste Hälfte weiter aufteilen. So kann schnell herausfinden, für welches Paar (bzw. welche Paare) ein Spielstand unterschiedlich eingegeben wurde – ohne, dass man die komplette Rangliste durchgehen muss.
Technisch gesehen ist die Prüfsumme einfach die MD5-Summe aller Datensätze (die per std::sort sortierten Paar- bzw. Spielernamen bzw. die Rangliste samt aller Bobbl, Tore und gegnerischen Tore), jeweils mit einem Leerzeichen dazwischen. Dass MD5 schon lange nicht mehr kryptographisch sicher ist, kann man für diese Anwendung vernachlässigen, da es praktisch ausgeschlossen ist, dass es bei so wenigen Eingabedaten eine Kollision gibt.
Über „Extras“ → „Datenbank zurücksetzen“ können alle eingegebenen Daten (Spieler und Ergebnisse) gelöscht werden. Das ist an sich nur für Testanwendungen, Debugging und Entwicklung gedacht.
Sollen auch die Einstellungen geändert werden (Punkte pro Bobbl, Bobbl pro Runde oder Turniermodus), dann kann einfach die bestehende Datenbank mit einer neuen überschrieben werden.
Per „Extras“ → „Backup der Datenbank anlegen“ kann ein Backup des aktuellen Datenbank-Stands erzeugt werden. Es wird eine Datei mit dem selben Namen wie die geöffnete Datenbank angelegt, der zusätzlich den Zeitpunkt der Erstellung des Backups enthält.
Das Format für den Dateinamen ist „Datenbank_Jahr-Monat-Tag_Stunde-Minute-Sekunde“ (somit werden alle Backups automatisch nach dem Erstellungszeitpunkt sortiert), also beispielsweise Muckturnier_2018-07-25_14-48-14.mtdb für die Datenbank Muckturnier.mtdb.
Der über „Extras“ → „Backup wiederherstellen“ erreichbare Dialog listet alle verfügbaren Backups auf. Wenn ein Backup wiederhergestellt wird, wird die Datenbank damit überschrieben und neu geöffnet.
Das Ganze geht natürlich auch „zu Fuß“ (wenn auch nicht so bequem): Es werden nur Dateien kopiert bzw. umbenannt. Um ein Backup manuell zu erzeugen, kann man auch die Turnierdatenbank schließen, eine Kopie davon machen und sie dann wieder öffnen. Analog funktioniert das Wiederherstellen eines Backups.
Muckturnier wurde und wird schon seit vielen Jahren auf kleinen und großen Turnieren eingesetzt. Dabei haben sich einige Erkenntnisse ergeben, wie man sich das Leben leichter machen kann. Manche davon sind vielleicht nicht ganz offensichtlich und deswegen im folgenden aufgeführt.
Die Eingabemaske der Spielstandseite wurde entsprechend der (mir zum damaligen Zeitpunkt einzig bekannten) gängigen Spielstandzettel gestaltet. Das heißt: Paar 1 oben, Paar 2 unten, 1. Bobbl links, 2. Bobbl rechts (bzw. bei mehr als zwei Bobbln von links nach rechts). Mitunter werden auch um 90° gedrehte Spielstandzettel benutzt (also Paar 1 links, Paar 2 rechts und die Bobbl von oben nach unten).
Sinnvollerweise sollten die Spielstandzettel die Eingabemaske wiederspiegeln. Sonst muss man immer umdenken (wer hat was und wo muss es hin) – und das führt zu Eingabefehlern.
Obwohl man das für eine eher triviale Aufgabe halten könnte, ist es gar nicht so simpel, einen einfachen, übersichtlichen und eindeutigen Spielstandzettel zu entwerfen. Um dem einen oder anderen etwas Arbeit abzunehmen oder zumindest eine Idee zu liefern, habe ich einen Beispiel-Spielstandzettel auf die Muckturnier-Homepage gestellt.
Egal, wie die Zettel aussehen: Sie sollten unbedingt neben dem eigentlichen Spielstand alle verfügbaren Daten enthalten:
Die Namen aller Spieler (im Zweifelsfall kann man das Geschmiere eh nur teilweise entziffern)
Die richtige Zuordnung der Namen zu „Paar 1“ (oben) und „Paar 2“ (unten)
Die Tischnummer
Die Rundennummer
Nur so ist eine komfortable und schnelle Eingabe und auch eine Überprüfbarkeit und Nachvollziehbarkeit gewährleistet!
Wenn mit dem normalen „Paar 1 bleibt sitzen, Paar 2 rutscht weiter“-Schema gespielt wird, dann ist spätestens ab der zweiten Runde die schnelle automatische Paarauswahl möglich (mit der Eingabe der Auslosung bzw. dem Erstellen der Auslosung mit dem Programm auch schon in der 1. Runde). Am einfachsten geht das über die Tischnummer.
Am besten macht man kleine Blöckchen mit Spielstandzetteln für alle geplanten Runden und alle verfügbaren Tische, auf denen die Runden- und Tischnummern bereits aufgedruckt bzw. vorgeschrieben sind. Je weniger die Leute machen müssen, desto weniger geht schief.
Man sollte auf jeden Fall eine Zeitbegrenzung pro Runde ausmachen. Zwei Bobbl sind in 45 Minuten komfortabel zu karten (meistens dauert es gar nicht so lang), 40 sind okay, 35 sportlich aber auch noch machbar (je nach dem, ob man z. B. einen „Pflichtmuck“ um einen Punkt spielt, wenn niemand etwas ansagt, oder das nächste Spiel doppelt zählt wird es etwas mehr oder weniger hektisch bei 35 Minuten).
So verhindert man, dass ein einzelnes oder wenige Trödel-Paare den kompletten Betrieb aufhalten.
Ist die Zeit abgelaufen, dann wird die Runde abgebrochen, und die in dem jeweiligen abgebrochenen Bobbl erreichten Punkte zählen als geschossene Tore für das jeweilige Paar. Das ist innerhalb der Wertung immer noch fair und transparent, da ja kein Paar den Bobbl gewonnen hat, aber die Punkte trotzdem zählen.
Damit macht man das Turnier und vor allem sein Ende zeitlich planbar und vermeidet genervte weil gelangweilte Karter.
Beim Führen einer Voranmeldungsliste sollte man darauf achten, dass das Ergebnis in eine reine Textdatei konvertiert werden kann (bzw. die Liste gleich als reine Textdatei geführt wird), die man dann importieren kann. Pro Zeile steht immer ein Paar bzw. Spieler. Leerzeilen werden ignoriert.
Alternativ kann man die Voranmeldungen natürlich auch gleich in eine Muckturnier-Datenbank schreiben.
Zum Beginn der Anmeldung markiert man dann alle vorangemeldeten Paare mit der entsprechenden Markierung (z. B. mit einer roten Markierung namens „Vorangemeldet“, die einen eigenen Block erzeugt). Kommt ein entsprechendes Paar, dann wird die Markierung entfernt. Nicht vorangemeldete Paare, die „einfach so“ kommen, werden auch „einfach so“ eingetragen.
Wenn es dann losgehen soll, sind alle vorangemeldeten aber nicht erschienenen Paare immer noch als „Vorangemeldet“ markiert und können über das „Ganze Liste“-Menü mit einem Klick gelöscht werden.
Weitere Markierungen (bisher nur ein Spieler da, Startgeld noch nicht bezahlt, allein gekommen etc.) und die Handhabung derselben bleiben der Kreativität der Turnierleitung überlassen ;-)
Die Auslosung direkt bei der Anmeldung verursacht – je nach dem, wie die Parameter gewählt werden – deutlich weniger Arbeit und Durcheinander als die klassische Zettelauslosung. Weiterhin kann bereits in der 1. Runde die Paar- bzw. Spielerauswahl über die Tischnummer erfolgen, so dass sich das Heraussuchen der Paare bzw. Spieler erübrigt. Man bekommt damit mehr Überblick und hat weniger Arbeit.
Unabhängig vom Turniermodus ist zumindest die Eingabe der 1. Runde aufwändig, weil man die Paare auf jeden Fall heraussuchen muss (es sei denn, man nutzt die Auslosung direkt bei der Anmeldung, s. o.). Das Heraussuchen eines Paares aus der ganzen Liste ist mitunter langwierig, weil oft die Namen nicht in der „richtigen“ (also angemeldeten) Reihenfolge auf den Spielstandzetteln stehen und/oder unvollständig und/oder kaum lesbar sind.
Am besten benutzt man zum Auffinden des jeweiligen Paares die Suchfunktion in der Auswahlbox: Bereits das Eingeben der Anfangsbuchstaben der Nach- oder Vornamen schränkt die Auswahl sehr ein, bei jeweils zwei Buchstaben bleiben meistens nur doch zwei oder drei Möglichkeiten übrig. Es können auch Teile mitten aus einem Namen sein. Irgend ein Brocken bringt schon was :-)
Beispiel: Für das Paar „Meier Bernd / Müller Karl“ reicht es höchstwahrscheinlich aus, nach „me mü“ zu suchen. Groß- und Kleinschreibung müssen nicht „richtig“ eingegeben werden. Umlaute und Akzente können auch weggelassen oder ersetzt werden, so dass z. B. auch die Suche nach „me mu“ oder „me mue“ zum gewünschten Ergebnis führt. „André“ findet man auch bei der Suche nach „andre“. Die Reihenfolge der Suchbegriffe ist ebenfalls egal: „mü me“ funktioniert genauso wie „me mü“.
Weiterhin kann man optional noch, mit dem Ohr-und-Schall-Symbol, die phonetische Suche aktivieren, bei der nicht nach der eingegebenen Zeichenfolge, sondern nach deren Klang gesucht wird. Diese ist noch deutlich toleranter als die Standardsuche: Den Namen „Raithel“ findet man damit z. B. auch durch die Eingabe von „reidl“. Allerdings steigen durch die systembedingte Unschärfe auch die falsch-positiven (also angezeigte aber nicht gewollte/passende) Treffer an. Ob oder ob nicht die phonetische Such sinnvoll anzuwenden ist, muss man im Einzelfall einfach ausprobieren.
Die Punkte kann man schnell (und ohne Tippfehler) über den Punkte-Dialog eingeben, wo man den jeweiligen Punktewert per Klick auswählen kann. Hierzu einfach den Bobbl oder das Eingabefeld mit der rechten Maustaste anklicken.
Ab einer gewissen Größenordnung ist es sinnvoll, die Anmeldung an mindestens zwei Rechnern vorzunehmen. Mit zwei oder mehr Anmeldungscomputern verhindert man lange Schlangen.
In jedem Fall sollte man sicherheitshalber eine Papier-Anmeldungsliste führen, wo die Voranmeldungen aufgedruckt sind, und neue Paare/Spieler dazugeschrieben werden! Wenn alle Stricke reißen (Eingabe-/Bedienfehler, Computer kaputt etc.) kann man so immer noch die Anmeldung „zu Fuß“ rekonstruieren.
Als Realeinsatz-Beispiel sei hier das Konzept für die Anmeldung beim Muckturnier auf dem Hofer Volksfest genannt. Es kommen drei Rechner zum Einsatz: Zwei für die Anmeldung und einer bei der Auslosung.
Es werden folgende Markierungen angelegt: „Vorangemeldet“, „Allein da“ und „Auslosung fehlt“.
Die Voranmeldungsliste wird am Server (z. B. Anmeldungsrechner 1) als „Vorangemeldet“ markiert. Die Clients (Anmeldungsrechner 2 und Auslosungsrechner) verbinden sich und werden synchronisiert.
Vor Ort angemeldete Paare werden eingegeben und als „Auslosung fehlt“ markiert. Bei erschienenen vorangemeldeten Paaren wird die Markierung von „Vorangemeldet“ zu „Auslosung fehlt“ geändert. Allein gekommene Spieler werden angemeldet und als „Allein da“ markiert (was Anmeldungsrechner 2 dann auch sieht und weitere allein gekommene Spieler dann genauso zuordnen kann, wie Anmeldungsrechner 1).
Die angemeldeten Paare gehen dann zur „Auslosung“ (die Tische werden in der Reihenfolge des Erscheinens zugeordnet, damit keine Lücken entstehen). Am Auslosungsrechner wird überprüft, ob das jeweilige Paar korrekt angemeldet wurde (bezahlt hat, also die Markierung „Auslosung offen“ ist). Paar 1 bekommt die Spielstandblöckchen, Regeln, Stift und die Karten, Paar 2 nur die Tischnummer. Dann wird die Markierung entfernt.
Alle anwesenden, korrekt angemeldeten und bereits ausgelosten Paare haben keine Markierung mehr. Vor dem Turnierbeginn werden einfach alle (sofern noch vorhanden) noch markierten Paare/Spieler gelöscht.
Rechner 1 hat die Voranmeldungsliste (entweder direkt eingegeben oder importiert). Alle vorangemeldeten Paare/Spieler werden als „Vorangemeldet“ markiert.
Die komplette Datenbank wird an Rechner 2 weitergegeben (z. B. per USB-Stick). An sich sollte eine Kopie der Datenbank im laufenden Betrieb vollständig und funktionstüchtig sein, aber trotzdem besser vor dem Kopieren sicherheitshalber das Programm schließen, damit nichts schiefgehen kann!
Beide Anmeldungsrechner nehmen Anmeldungen entgegen und entfernen jeweils die „Vorangemeldet“-Markierung.
Vor dem Turnierbeginn müssen die Datenbanken zusammengeführt werden. Hierzu einfach an beiden Rechnern die noch markierten Paare/Spieler löschen. Es bleiben dann nur die tatsächlich gekommenen übrig. Rechner 2 exportiert dann die Paar-/Spielerliste und gibt sie an Rechner 1 weiter. Der importiert die Liste. So werden dann die Listen zusammengeführt.
Danach kann dann Rechner 1 die komplette, zusammengeführte Datenbank wieder an Rechner 2 weitergeben (zum Zweck der redundaten doppelten Eingabe der Ergebnisse zum Suchen von Eingabefehlern).
Wenn man an mindestens zwei Computern unabhängig voneinander alle Ergebnisse einträgt, kann man Eingabefehler finden. Ab Version 3.4 erfolgt auf jedem Client ein automatischer fortlaufender Vergleich der eingegebenen Ergebnisse mit denen des Servers.
Alternativ steht nach wie vor der der Ranglistenvergleich per Netzwerk und auch (für den Fall, dass keine Netzwerkverbindung der Rechner zur Verfügung steht), die Prüfsummen-Funktion zur Verfügung. Man sollte aber definitiv ein Netzwerk benutzen, das ist erheblich komfortabler.
Muckturnier ist in C++ geschrieben. Es wird der C++17-Standard genutzt. Das Programm linkt gegen Qt ab Version 5.11. Es wird das QtSql-Modul für SQLite 3 und das QtNetwork-Modul benutzt.
Als Buildsystem kommt CMake (ab Version 3.2) zum Einsatz.
Sind alle Abhängigkeiten installiert, dann ist das Übersetzen des Programms aus den Quelltexten ziemlich einfach. Beispielsweise muss man im Quellcode-Ordner nur folgende Befehle ausführen:
mkdir build
cd build
cmake ..
make
Sofern die Python-Docutils gefunden werden, wird diese Dokumentation von reStructuredText via rst2html5.py in eine HTML-Datei konvertiert. Ist das nicht gewünscht oder möglich, dann kann das mittels des Schalters DOCUMENTATION ausgesetzt werden (cmake -DDOCUMENTATION=OFF ..
).
Für andere Buildsysteme (z. B. Ninja, das verwende ich persönlich) oder Compiler (z. B. Clang) verweise ich an dieser Stelle auf die Dokumentation von CMake.
Installieren kann man nach dem erfolgten Build mit
make install
Wird die CMAKE_INSTALL_PREFIX-Variable nicht gesetzt, wird in den /usr-Verzeichnisbaum installiert (die ausführbare Datei nach /usr/bin, Resourcen-Dateien nach /usr/share/muckturnier etc.).
Sind die xdg-utils installiert, dann werden die „Freedesktop Shared MIME Info“-Datei muckturnier.xml sowie die „Desktop Entry Specification“ Muckturnier.desktop in der xdg-Datenbank angemeldet, damit ein Startmenüeintrag für Muckturnier erstellt und die Dateierweiterung „.mtdb“ mit dem Muckturnier-Programm verknüpft wird.
Die meisten Windows- und macOS-Nutzer werden vermutlich eher zu den Binärpaketen von muckturnier.org greifen, als selbst zu Kompilieren. Möglich ist es aber natürlich auf beiden Plattformen.
Die CMakeLists.txt-Datei ist für Linux ausgelegt. Abgesehen vom Installationsziel müsste sie aber auf Windows genauso funktionieren. Unter macOS müsste man noch manuell die Datei src/MacOSApplication.cpp hinzufügen, und ebenfalls die Installationspfade anpassen.
Die Windows- und macOS-Builds mache ich nicht mit CMake, sondern mit qmake. Die qmake-.pro-Dateien dafür funktionieren aber nicht „einfach so“:
Zunächst baue ich unter Linux mit den Scripts unter res/release_tools ein entsprechendes Quellcode-Paket mit plattformspezifischen Daten (Icons etc.). Das eigentliche Build erstellt dann ein Script, jeweils für das jeweilige Betriebssystem. Hier werden dann noch weitere Aufgaben erledigt, z. B. das erstellen der ICNS-Datei für macOS.
Für Windows wird das Ergebnis dann noch via NSIS in einen Installer verpackt.
Es ist also ein bisschen Handarbeit nötig. Sollte jemand ernsthaft unter Windows oder macOS das Muckturnier-Programm bauen wollen und damit Probleme haben, stehe ich gerne mit Rat und Tat zur Verfügung ;-)
Der Quellcode des Muckturnier-Programms wird auf GitLab gehostet. Von dort kann er auch (anonym) über https://gitlab.com/l3u/muckturnier.git ausgecheckt werden.
Fehler, Feature Requests etc. können in den Bugtracker eingetragen werden. Alternativ auch gerne einfache eine E-Mail an tobias . leupold at gmx . de schreiben!
Wenn jemand Muckturnier auf einem Turnier eingesetzt hat, dann würde ich mich über Feedback freuen! Gerne würde ich das entsprechende Turnier auch als Referenz auf der Homepage mit auflisten, wenn ich darf.
Bisher hat Muckturnier immer fehlerfrei gerechnet und einwandfrei funktioniert. Der Autor übernimmt aber natürlich keinerlei Garantie für die Fehlerfreiheit, Verwendbarkeit, Funktionstüchtigkeit oder Verfügbarkeit des Programms (vgl. auch die für Muckturnier benutzte Lizenz GPL), für aus Fehlberechnungen oder -eingaben resultierende Wirtshausschlägereien oder sonst irgendwas ;-)
Viel Spaß mit Muckturnier und natürlich auch beim Mucken!