Ankündigung

Einklappen
Keine Ankündigung bisher.

Framework zur Erstellung und Verwaltung von Turnierplänen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Framework zur Erstellung und Verwaltung von Turnierplänen

    Hallo zusammen,

    ich stand vor kurzem vor dem Problem einen Spielplan für ein kleines Turnier zu erstellen und habe mir dazu eine Reihe von kleinen Skripts geschrieben. Ich möchte nun diese "Skriptsammlung" in ein großes Framework packen, um damit Spielpläne für Turniere zu erstellen.

    Es gibt verschiedene Arten von Liga- oder Tabellen-Turnieren (z.B. die Bundesliga) oder KO-Tunieren und auch Hybride daraus. Das Ziel dieses Frameworks soll es sein diese und auch weitaus komplexere Spiel- und Turnierpläne für möglichst alle Sportarten (mit deren Regeln) zu erstellen.

    Zwei Beispiele:
    - Die Bundesliga ist ein Liga-Turnier mit Hin- und Rückründe (Double-Round-Robin).
    - Die Fussball WM ist ein Hybrid bei dem in der Vorrunde ein Liga-Turnier (Round-Robin) in einzelnen Gruppen gespielt wird und die besten beiden Teams kommen anschließend in ein KO-Turnier (Single-Elemination).

    Denkbar wäre aber auch ein Turnier mit einem Vorlauf aus 16 Gruppen im einfachen KO-System (Single-Elemination), wobei aus jedem Vorlauf die besten 4 Mannschaften in eine Vorrunde im Liga-System (Round-Robin) mit 8 Gruppen kommen. Die besten zwei Mannschaften je Gruppe kommen anschließend in ein doppeltes KO-System (Double-Elemination). Die Spiele im Vorlauf und der Vorrunde sind Best-Of-One Spiele und die Finalspiele im doppelten KO-System sind Best-Of-Three Spiele.

    Insbesondere letzteres Turnier möchte ich ebenfalls abbilden können und dabei habe ich ein paar Schwierigkeiten bzw Diskussionsbedarf...

    Ich möchte erst einmal mein Design vorstellen (und hoffe dass das UML richtig ist):

    Ich denke die Klassen sollten sich in gewisser Weise durch ihre Namen selbst erklären. Ein Match hat je eine Heim- und eine Auswärts-Mannschaft und kann vorhergehende und nachfolgende Spiele haben, wobei diese parametrisiert sind. Diese Parameter geben an, ob der Gewinner oder Verlierer des vorhergehenden Spiels die nächste Runde erreicht. Mittels Observer-Pattern möchte ich hier implementieren, dass das nachfolgende Spiel den Gewinner/Verlierer übermittelt bekommt, bzw. ihm mitgeteilt wird, wenn ein Spiel entschieden wurde.
    Alle Spiele werden in einer Struktur (MatchStructure) zusammengefasst, welche entweder ein Graph (KO-System) oder eine Tabelle (Liga-System) sein kann. Diese Strukturen sind wiederum Teil eines Spielplans (TurnamentSchedule). Die Vererbungen davon bestimmen dann die genauen Turnierformen.
    Ich habe noch die Klasse MatchDecisionRules hinzugefügt, welche Regeln angeben um einen Gewinner zu bestimmen (z.B. "Mehr als 21 Punkte und min. zwei Punkte vor"), und die Klasse TableSortingRules, welche Regeln angeben um eine Tabelle zu sortieren (z.B. was wird bei Gleichstand verglichen o.ä.).
    Die Factory, den Writer und den Reader habe ich schonmal angegeben und diese sollen im Endeffekt den Spielplan erstellen, ausgeben (z.B. Bild, XML, Datenbank) und einlesen (z.B. XML, Datenbank) können.

    Ich habe nun Diskussionsbedarf an der Stelle, wie ich diese komplizierten Strukturen abbilden kann:
    Ich habe mir gedacht, dass ich der Factory nacheinander mehrere Turnierformen übergeben kann und mit Hilfe von Parametern angebe, wie diese verknüpft werden (ähnlich wie bei den Matches). Diese Idee bildet dann jedoch einen Konflikt mit den Matches, da dort nur Spiele verknüpft werden: Der erste Platz eines KO-Systems wäre weiterhin möglich (ist ja der Gewinner eines Matches), aber der erste Platz eines Liga-Systems ist damit nicht mehr möglich.
    Mir kommt daher die Idee einem Match nicht die Vorgänger und Nachfolger zu übergeben, sondern "ReferencingParticipants", welche von Participant abgeleitet werden, als Heim- bzw Gast-Mannschaft zu übergeben. Diese stellen dann eine Referenz zu Beispielweise einem Match oder einem Turnier her.
    Dadurch würde ich diese Verbindung abbilden können, aber die vorwärts Referenzierungen der Matches verlieren: Man könnte zwar rückwärts durch den Graphen noch über die "ReferencingParticipants" gehen, aber vorwärts wäre nicht mehr möglich.

    Ich würde mich über Meinungen zu meinem Design und meinem Problem sehr freuen! =)

    Grüße, Sirke

  • #2
    Hallo Sirke,

    [..]in ein großes Framework packen[..]
    Was möchtest du damit ausdrücken?

    Ich würde mich über Meinungen zu meinem Design und meinem Problem sehr freuen! =)
    Ich tue mir ehrlich gesagt etwas schwer dein Design einzusätzen. Dein Text enthält mir schon zu viele Pattern und geht zu wenig auf die fachliche Anforderungen ein. Ob das Observer-Pattern tatsächlich die richtige Wahl ist, sagt erst eine fachliche Analyse.

    Unterhalte dich vielleicht mal mit Megger oder Screeze aus dem APF-Forum, die beiden haben bereits komplexe Browser-Games umgesetzt und können zum Datenmodell sicher aus Erfahrung einiges beitragen.
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar

    Lädt...
    X