Kategorie:Kartengenerator
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
- Zugang zu Didis Gitlab
- Programmier-Kenntnisse
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
|
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.