L'une des principales motivations pour positionner les pions à l'exécution est d'apporter de la variété à chaque partie.
Si vous placez des pions dans l'éditeur et ne les déplacez pas à chaque démonstration, une fois que vous aurez joué une manche, vous saurez exactement où ces pions sont placés à chaque fois. Si, au contraire, vous placez des pions aléatoirement à chaque fois, de multiples configurations de départ sont possibles.
Pour mettre cela en perspective, si vous disposez d'un plateau de 5 x 5 carrés et de cinq pions, il existe (25 parmi 5) 53 130 configurations distinctes. Si vous augmentez la taille du plateau d'un seul espace dans chaque dimension pour obtenir un plateau de 6 x 6 et que vous conservez cinq pions, ce nombre passe à (36 parmi 5) 11 686 752.
La randomisation peut être un outil puissant pour varier le gameplay de votre jeu.
Générer des coordonnées de carré aléatoires
Pour placer un pion aléatoirement, vous devez générer des coordonnées de carré aléatoires dans les limites du plateau. Il existe de nombreuses façons de générer aléatoirement des coordonnées dans un espace bidimensionnel. L'approche la plus courante est la distribution uniforme. C'est celle que vous utiliserez dans cet exemple. Une distribution uniforme attribue une probabilité égale de placement d'un pion sur n'importe quel carré du plateau. Pour en savoir plus, consultez la page https://fr.wikipedia.org/wiki/Loi_uniforme_discrète. À cette fin, construisez une fonction utilitaire nommée GenerateUniformRandomTileCoordinate qui prend un objet de limites pour savoir dans quel domaine générer les coordonnées.
Pour générer des coordonnées de carré uniformément distribuées dans un espace bidimensionnel, générez aléatoirement un nombre entier dans chaque dimension indépendamment, puis combinez-les dans un objet de coordonnées de carré.
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)
Cette fonction exécute les tâches suivantes :
Elle génère un nombre entier aléatoire dans les limites horizontales du plateau.
Elle génère un nombre entier aléatoire dans les limites verticales du plateau.
Elle les combine en un objet de coordonnées de carré.
Pour obtenir une liste des distributions plus discrètes avec un support fini, consultez le tableau de la page https://fr.wikipedia.org/wiki/Liste_de_lois_de_probabilité . Vous pouvez essayer de créer vos propres fonctions qui génèrent des coordonnées par rapport à certaines de ces distributions et observer la façon dont le placement du pion change.
S'assurer qu'il y a suffisamment d'emplacements libres
Avant de placer les pions sur le plateau, il convient également de déterminer si le nombre d'emplacements disponibles est suffisant sur le plateau pour tous les pions. Pour ce faire, créez une fonction utilitaire nommée `NumberOfTileCoordinates` qui prend un objet de limites de plateau et génère le nombre de carrés sur le plateau.
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)Placer aléatoirement un pion
Pour placer les pions au hasard sur le plateau, vous devez savoir combien de pions générer. Ajoutez ceci en tant que variable modifiable dans la classe de plateau.
Après avoir déterminé le nombre de pions sur le plateau, procédez comme suit pour placer les pions :
Assurez-vous qu'il y a suffisamment de coordonnées de carré disponibles pour le nombre de pions avec
NumberOfTileCoordinates.Générez aléatoirement des coordonnées de carré avec
GenerateUniformRandomTileCoordinate.Déterminez s'il existe déjà un pion à des coordonnées.
Si tel est le cas, revenez à l'étape 1.
Dans le cas contraire, passez à l'étape 4.
Déterminez si la fonction
SetPawnaux coordonnées générées réussit.Si c'est le cas, passez au pion suivant.
Si ce n'est pas le cas, une erreur se produit.
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):
Cette fonction réussit si et seulement si :
Il existe suffisamment d'emplacements sur le plateau pour le nombre de pions indiqué.
Chaque pion est correctement placé à des coordonnées qui ne sont pas déjà occupées par un autre pion.
Générer le plateau à l'exécution
Pour générer le plateau à l'exécution, il suffit de remplacer la fonction OnBegin du plateau et d'appeler PlacePawns :
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):
Résumé
En résumé, cette page vous a guidé à travers les étapes suivantes :
Placer tous les pions aléatoirement sur le plateau.
.udatasmith
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):