Eine der Hauptmotivationen für die Positionierung von Spielfiguren zur Laufzeit ist, das Gameplay bei jedem Spieldurchgang zu variieren.
Wenn die Spielfiguren im Editor platziert und nicht bei jedem Spieldurchgang verschoben werden, weißt du, sobald du eine Runde gespielt hast, wo diese Spielfiguren platziert sind. Wenn du stattdessen die Spielfiguren jedes Mal zufällig platzierst, gibt es mehrere Startkonfigurationen.
Um dies in Perspektive zu setzen: Wenn du ein Brett mit 5 x 5 Kacheln und fünf Spielfiguren hast, gibt es (25 aus 5) 53.130 verschiedene Konfigurationen. Wenn du das Brett um nur ein Feld mehr in jeder Dimension auf 6 x 6 erhöhst und fünf Spielfiguren behältst, erhöht sich diese Zahl auf (36 aus 5) 11.686.752.
Randomisierung kann ein mächtiges Werkzeug sein, um abwechslungsreiches Gameplay zu schaffen.
Eine zufällige Kachelkoordinate generieren
Um eine Spielfigur zufällig zu platzieren, musst du zufällige Koordinaten innerhalb der Grenzen eines Bretts generieren. Es gibt viele verschiedene Möglichkeiten, Koordinaten zufällig im zweidimensionalen Raum zu generieren. Am häufigsten ist die Gleichverteilung, die du für dieses Beispiel verwenden wirst. Bei einer gleichmäßigen Verteilung ist die Wahrscheinlichkeit, dass eine Spielfigur auf eine beliebige Kachel des Bretts gesetzt wird, gleich. Weitere Informationen findest du unter https://en.wikipedia.org/wiki/Discrete_uniform_distribution. Konstruiere zu diesem Zweck eine Hilfsfunktion namens GenerateUniformRandomTileCoordinate , die ein Begrenzungsobjekt aufnimmt, um zu wissen, innerhalb welcher Domäne die Koordinaten generiert werden sollen.
Um eine gleichmäßig verteilte Kachelkoordinate im zweidimensionalen Raum zu erzeugen, generiere zufällig eine Ganzzahl in jeder Dimension unabhängig voneinander und kombiniere sie dann in einem Koordinatenobjekt.
using { /Verse.org/Simulation }
using { /Verse.org/Random }
UtilityFunctions<public> := module:
...
GenerateUniformRandomTileCoordinate<public>(BoardBounds:board_bounds)<transacts>:tile_coordinate =
tile_coordinate:
Left := GetRandomInt(BoardBounds.LeftBounds.Low, BoardBounds.LeftBounds.High)
Diese Funktion führt die folgenden Schritte aus:
Sie generiert eine zufällige Ganzzahl innerhalb der linken Grenzen des Bretts.
Sie generiert eine zufällige Ganzzahl innerhalb der vorwärts gebundenen Grenzen des Bretts.
Sie kombiniert diese zu einem Kachelkoordinatenobjekt.
Eine Liste weiterer diskreter Verteilungen mit endlichem Träger findest du in der folgenden Tabelle von https://en.wikipedia.org/wiki/List_of_probability_distributions . Du kannst versuchen, eigene Funktionen zu erstellen, die Koordinaten in Bezug auf einige dieser Verteilungen generieren und sehen, wie sich die Spielfigur-Platzierung ändert.
Genügend freie Flächen sicherstellen
Bevor du die Spielfiguren auf dem Brett platzierst, musst du zusätzlich prüfen, ob genug Felder auf dem Spielbrett für die Anzahl der Spielfiguren verfügbar sind. Dazu kannst du eine Hilfsfunktion mit dem Namen NumberOfTileCoordinates erstellen, die ein Brettbegrenzungsobjekt aufnimmt und die Anzahl der Kacheln auf dem Brett ausgibt.
using { /Verse.org/Simulation }
using { /Verse.org/Random }
UtilityFunctions<public> := module:
...
NumberOfTileCoordinates<public>(BoardBounds:board_bounds)<transacts>:int =
(BoardBounds.LeftBounds.High - BoardBounds.LeftBounds.Low) * (BoardBounds.ForwardBounds.High - BoardBounds.ForwardBounds.Low)Eine Spielfigur zufällig platzieren
Um die Spielfiguren zufällig auf dem Brett zu platzieren, musst du wissen, wie viele Spielfiguren generiert werden sollen. Füge dies als editierbare Variable in der Brett-Klasse hinzu.
Nachdem du die Anzahl der Spielfiguren auf dem Brett bestimmt hast, musst du wie folgt vorgehen:
Stelle mit
NumberOfTileCoordinatessicher, dass genügend Kachelkoordinaten für die Anzahl der Spielfiguren verfügbar sind.Erzeuge eine zufällige Kachelkoordinate mit
GenerateUniformRandomTileCoordinate.Entscheide, ob es an diesen Koordinaten bereits eine Spielfigur gibt.
Wenn ja, gehe zurück zu Schritt 1.
Wenn nein, gehe zu Schritt 4.
Entscheide, ob
SetPawnan der generierten Koordinate erfolgreich ist.Wenn ja, fahre mit der nächsten Spielfigur fort.
Wenn nicht, wird ein Fehler erzeugt.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
Diese Funktion ist genau dann erfolgreich, wenn:
Es genug Felder auf dem Spielbrett für die festgelegte Anzahl an Spielfiguren gibt.
Jede Spielfigur erfolgreich an einer Koordinate platziert wird, an der sich noch keine Spielfigur befindet.
Das Brett zur Laufzeit generieren
Um das Brett zur Laufzeit zu generieren, musst du nur die OnBegin-Funktion des Bretts überschreiben und PlacePawns aufrufen:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
Überblick
Auf dieser Seite haben wir dich durch die folgenden Schritte geführt:
Alle Spielfiguren zufällig auf dem Brett platzieren.
Dateien
using { /Verse.org/Simulation }
using { /Verse.org/Random }
DataTypes<public> := module:
tile_coordinate<public> := class<concrete>:
@editable
Left<public>:int = 0
@editable
Forward<public>:int = 0
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):