Kategorie:Kartengenerator

Aus KaroWiki
Zur Navigation springen Zur Suche springen

Ein Kartengenerator ist ein Programm, welches der Erstellung von computer-generierten Karten dient. Die Karten werden dabei zufällig oder anhand von definierten Mustern erstellt.

Die Diskussion über Zufallskarten gibt es schon seit längerem im Forum in der Hoffnung, dass es irgendwann mal die Möglichkeit gibt generierte Zufalls- oder Einmalkarten für Spiele zu benutzen.

Am 28.09.2023 hat Didi die ersten Generatoren in Gedenken an Jody eingebunden.

Einbindung eines Kartengenerators

Um einen Kartengenerator einzubinden gibt es 3 Möglichkeiten, die hier kurz beschrieben werden.

Vorraussetzungen

Interne Implementierung (PHP)

Damit ein Kartengenerator funktioniert und richtig eingebunden ist, braucht es folgende Änderungen / Erweiterungen des Karo-Codes:

Was? Wo? Beschreibung
DTO / Settings src/Modules/MapGenerator/DTO Es muss eine PHP Settings-Klasse angelegt werden, die das GeneratorSettingsInterface sowie die statische Funktion fromArray(array $params): self implementiert. Wenn eine Karte generiert werden soll, erzeugt der GenerateMapController bzw. MapGeneratorCodeController die Settings über fromArray aus den JSON-Parametern und gibt sie anschließend an den Generator (siehe nächste Zeile) weiter.
Generator src/Modules/MapGenerator/Generator Es muss eine PHP Generator-Klasse angelegt werden, die das MapGeneratorInterface implementiert. Diese Klasse wird vom GeneratorMapController bzw. MapGeneratorCodeController mit den MyGeneratorSettings aufgerufen um eine Karte zu erzeugen. Hier kann in der Funktion generate(MyGeneratorSettings $settings) die komplette Logik implementiert werden.

Wichtig: Wenn der Generator Zufallselemente enthält (was in der Regel der Fall sein wird), dann brauchst du einen Zufallszahlengenerator. Dafür kannst / solltest du den Kezzer wie folgt nutzen:

$kezzer = new Kezzer($settings->seed);
$param1 = $kezzer->rnd(1, 5); // Wert von 1 bis 5 inklusive

Lib-Class src/Modules/MapGenerator/lib Optional: Wenn du viel Code hast, dann kannst du davon optional etwas in eine PHP Utility- oder Lib-Class auslagern.
Generator-Test tests/src/Modules/MapGenerator/deinkarousername Optional: Es ist empfehlenswert einen PHP Unit-Test für deinen Generator zu schreiben, der die Generierung mit einem fixen Seed testet und gegen ein erwartetes Ergebnis abgleicht. So kann sichergestellt werden, dass der Generator durch andere Änderungen nicht kaputt geht.
Controller-Test tests/src/Modules/MapGenerator/Controller Optional: Es ist empfehlenswert einen zusätzlichen PHP Controller-Test für deinen Generator zu schreiben. Dadurch kannst du prüfen, ob die Parameter richtig in deinen Settings und im Generator ankommen und ob ein gültiges Kartenergebnis zurück kommt.
Test-Dateien tests/assets/map-generators/deinkarousername Optional: Da es unschön ist den erwarteten Map-Code in der Test-Klasse zu haben, empfiehlt es sich hier Text-Dateien für verschiedene Beispielkarten abzulegen, die du in deinem Test abtestest.
HTML-Snippet frontend/src/module/newgame/view/generator/template Es muss ein HTML-Snippet angelegt werden, das die Einstellmöglichkeiten der Parameter in der Web-Oberfläche definiert.
JS-View frontend/src/module/newgame/view/generator/view Es muss eine View angelegt werden, damit das HTML-Snippet angewählt werden kann. In den meisten Fällen ist das nur Copy-Paste von anderen Generatoren lediglich mit Anpassung des Generator-Namens und es sollte hier nur selten weitere Logik benötigt werden.
Control-Option frontend/src/module/newgame/templates/map-generator-control.html In dem HTML-Snippet, welches die Map-Generator-Auswahl definiert, muss eine Option für deinen Generator hinzugefügt werden.
Control-View frontend/src/module/newgame/view/MapGeneratorControlView.js In der View zu dem HTML-Snippet für die Map-Generator-Auswahl muss deine JS-View importiert und ein weiterer if-Zweig für deinen Generator eingefügt werden.

Entsprechende Beispiele lassen sich leicht in den jeweiligen Dateien / Packages finden oder indem man nach einem einschlägigen Generator-Namen im Repository sucht...

Externe Implementierung (Sprache egal)

Als Alternative zur internen Implementierung kannst du deinen Generator auch irgendwo extern hosten. Dann sind keine Änderungen am Karo-Code nötig, du musst dich aber auch komplett selbst um den Betrieb kümmern. Die Karo-Community kann den Generator dann über den Fernschreiber via URL verwenden.

Externe Implementierung und interne Einbindung via Wrapper

Wenn du trotz externer Implementierung willst, dass dein Generator im Drop-Down in der Web-Oberfläche auftaucht, dann kannst du deinen Generator via "Wrapper" in den Karo-Code einbinden. ultimate hat dafür den Fernschreiber so abgeleitet, dass mit weniger Zeilen Code als bei der internen Implementierung dein Generator eingebunden werden kann. Viele Schritte bleiben jedoch identisch:

Was? Wo? Beschreibung
DTO / Settings src/Modules/MapGenerator/DTO siehe oben
Generator src/Modules/MapGenerator/Generator Statt das MapGeneratorInterface zu implementieren kannst du einfach AbstractWrapperGenerator ableiten. In dieser Klasse ist die Funktionalität für das externe Einbinden schon komplett umgesetzt und du musst nur noch ein paar Konstanten anpassen.
Lib-Class src/Modules/MapGenerator/lib wird dann nicht benötigt
Generator-Test tests/src/Modules/MapGenerator/deinkarousername Optional: Das Testing funktioniert hier dann ein wenig anders, weil der Test ja übers Web auf deinen Generator zugreift. Schau dir am besten dazu den KindergartenTest an.
Controller-Test tests/src/Modules/MapGenerator/Controller siehe oben
Test-Dateien tests/assets/map-generators/deinkarousername siehe oben
HTML-Snippet frontend/src/module/newgame/view/generator/template siehe oben
JS-View frontend/src/module/newgame/view/generator/view siehe oben
Control-Option frontend/src/module/newgame/templates/map-generator-control.html siehe oben
Control-View frontend/src/module/newgame/view/MapGeneratorControlView.js siehe oben

Liste der Kartengeneratoren

Bekannte Kartengeneratoren sind:

Seiten in der Kategorie „Kartengenerator“

Folgende 12 Seiten sind in dieser Kategorie, von 12 insgesamt.