- Dart 96.4%
- CMake 1.1%
- Shell 0.9%
- Python 0.8%
- C++ 0.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| android | ||
| assets | ||
| docs | ||
| lib | ||
| linux | ||
| test | ||
| tool | ||
| .gitignore | ||
| .metadata | ||
| analysis_options.yaml | ||
| CLAUDE.md | ||
| Documentation.md | ||
| LIESMICH.txt | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
turnierwart
Leitet Magic-Draft-Events: Paarungen nach Schweizer System, K.O.-Baum und Tabelle nach den offiziellen Turnierregeln. Ausgelegt auf den klassischen Draft-Pod jeder Größe. Läuft auf dem Linux-Desktop und auf Android, alles liegt lokal — ohne Konto, ohne Cloud, ohne Netz.
Dokumentation
| Datei | Inhalt |
|---|---|
| docs/einstieg.md | Ohne Vorwissen: Entstehung, Sprachwahl, jede Datei einzeln, Tests, erster eigener Lauf |
| docs/projekt.md | Technisch: Schichten, Datenmodell, Zustandsfluss, Referenz, Entscheidungen |
| docs/regeln.md | Die Turnierregeln, wie sie hier gerechnet werden — mit Zahlenbeispielen |
| docs/betrieb.md | Der Turnierabend: anlegen, Uhr, melden, korrigieren, übergeben, sichern |
| docs/bauen.md | Bauen und Ausliefern für Linux und Android, Versionierung, Klänge, Icons |
| docs/fehlerquellen.md | Selbst prüfen: was hier schiefgehen kann und wie man einen Verdacht belegt |
docs/ ist die ausführliche Fassung und für alles Ausgeschriebene führend.
Daneben stehen drei Dateien mit je eigener Aufgabe:
Documentation.md trägt die Entscheidungen mit ihrem Warum
und den laufenden Arbeitsstand, CLAUDE.md nur Arbeitsanweisungen für die
Arbeit am Repository, und LIESMICH.txt ist der Zettel, der mit jedem Paket
ausgeliefert wird.
Was es kann
- Vier Modi: reines Schweizer System, reines K.O., Schweizer Vorrunde mit anschließendem Top-Cut (der Normalfall beim Draft) und „jeder gegen jeden".
- Paarung ohne Wiedersehen. In kleinen Feldern wird die optimale Paarung exakt berechnet, nicht geschätzt. Ist eine rematchfreie Runde möglich, findet die App sie; ist keine möglich, weist sie das aus, statt es zu verschweigen.
- Tabelle nach den offiziellen Regeln (MTR 5.3): Matchpunkte, dann OMW%, GW% und OGW%, sichtbar in der Tabelle — bei Punktgleichstand ist genau das die Antwort auf „warum steht der vor mir?".
- Ergebnisse in einem Klick. Fünf Knöpfe je Tisch: 2:0, 2:1, Remis, 1:2, 0:2. Eine Korrektur ist derselbe Handgriff wie die Erstmeldung.
- Rundenuhr mit zwei akustischen Zurufen, die nach einem Neustart weiterläuft und mit der letzten Meldung der Runde von selbst anhält — dazu eine Pause zwischen den Runden, die von allein läuft.
- Eine Vorrunde mehr, wenn die geplanten nicht reichen; Byes bei ungerader Teilnehmerzahl; Aussteigen mitten im Turnier, ohne dass die bisherigen Punkte verfallen.
- Übergabe an ein anderes Gerät als Datei — der Draft beginnt am Rechner und geht am Telefon weiter, ohne dass jemand doppelt tippt.
- Spielerstamm mit Bilanz und Erzfeind, Medaillenspiegel über alle abgeschlossenen Events, Historie und Export in drei Fassungen.
- Spielformat als Etikett am Turnier — „Limited · Draft", „Constructed · Commander" —, jederzeit änderbar, auch nachträglich.
- Regeln an Bord: die offiziellen Dokumente (MTR, JAR, Regelwerk) verlinkt und die App selbst erklärt — nachgeschlagen wird zwischen zwei Runden.
Ein Abend in acht Schritten
Neues Event → Modus und Teilnehmer wählen → Turnier starten
→ Uhr starten → Ergebnisse melden → Nächste Runde auslosen
→ Top-Cut auslosen → Turnier abschließen → Export
Ausführlich in docs/betrieb.md.
Technik
Flutter für Linux-Desktop und Android, Riverpod für den Zustand, Drift/SQLite
für die lokale Datenbank. Material 3, hell und dunkel nach Systemeinstellung.
Die Datenbank liegt unter ~/Dokumente/turnierwart.sqlite.
lib/
core/ Regelkern ohne I/O, Datenbank, Austauschformat, Modelle, Theme
features/ Events, Runden, Tabelle, Spieler, Medaillen, Formate, Export,
Einstellungen
tool/ Erzeugt Icons und Klänge
docs/ Diese Dokumentation
Tabelle und Baum werden nie gespeichert, immer gerechnet. Es gibt genau eine Wahrheit — die gemeldeten Ergebnisse. Eine Korrektur wirkt sich damit sofort überall aus. Wie im Einzelnen gerechnet wird, steht in docs/regeln.md, der Aufbau dahinter in docs/projekt.md.
Bauen und starten
flutter test
flutter build linux --release
./build/linux/x64/release/bundle/turnierwart
Aus einer Flatpak-Umgebung heraus (etwa VSCodium) fehlt clang; Release-Builds
laufen deshalb über den Host, Android braucht JDK 21 und
--target-platform android-arm64. Der ganze Ablauf samt tool/release.sh
steht in docs/bauen.md.
Grenzen
- Keine Obergrenze für das Feld. Das Schweizer System paart bis 14 Spieler exakt und darüber nach einem Näherungsverfahren, „jeder gegen jeden" rotiert über beliebig viele, und der Baum füllt die nächstgrößere Zweierpotenz.
- Ein Gerät führt. Die Übergabe ist keine Synchronisierung; wer abgegeben hat, sieht nur noch zu.
- Kein Mehrbenutzerbetrieb, keine Anmeldung, kein Server. Die Datenbank ist eine Datei auf dem Gerät.
- Best-of-3. Andere Matchformate kennt die Ergebniseingabe nicht.
- Android-APK nur für arm64 — kein 32-Bit-Telefon, kein Emulator.