Génération aléatoire d'objets à des positions prédéfinies


#1

Salut à tous ! Je débute tout récemment sur Gdevelop et je bute totalement sur un problème (pas si ardu je pense) qui m’empêche d’obtenir la mécanique que je souhaite. En gros :
Il est possible dans mon jeu d’effectuer différentes actions (symbolisés par des icones drag&droppable) qui sont proposées aléatoirement au joueur. Donc dès qu’on arrive dans une scène, on a le choix entre 4 actions choisies aléatoirement, qu’on peut sélectionner et qui vont disparaître quand on les déplace dans une zone d’action. (symbolisée par une jauge) Quand on fait glisser une action, une nouvelle spawn.

lacamarche

Le problème c’est au niveau de la manière que j’ai trouvé de faire spawner ces actions: s’il y a moins de 4 actions dans la scène, les actions à apparaître vont être choisies aléatoirement avec un random(50) (ça ça marche), mais leur position X va être aussi choisie aléatoirement avec un RandomInRange(1, 4) * 71 (puisque les points où je veux que les objets spawn sont : 71, 142, 213 ou 284).
Le problème avec le fait de rendre cette position X aléatoire c’est que très fréquemment le random va tomber sur le même chiffre au moins une fois, donc je vais avoir que trois ou deux actions affichées puisque les autres sont superposées en dessous. Pareil quand on fait disparaître une action en l’emmenant sur la jauge: la nouvelle action a spawn va souvent le faire sous une action déjà présente, donc pas top du tout.

Dans l’idéal j’aimerai que les actions affichées soient toujours choisies aléatoirement au lancement de la scène (les actions en elles-même ainsi que leurs position); mais qu’ensuite, quand on utilise une action en la glissant sur la jauge, la position de la prochaine action a apparaître soit à la position qu’était celle qui vient de disparaître… Et j’y arrive pas du tout aha. Je retourne le problème dans tous les sens sans arriver à obtenir ce que je veux. Merci d’avance à ceux qui voudront bien m’aider un peu :slight_smile:


#2

Bonjour,
Si je comprends bien, tu veux le premier coup choisir entre 4 valeurs, puis entre 3, puis entre 2 …
J’utiliserais une variable chaine avec 4 valeurs (1, 2, 3, 4), et je tirerais au hasard une de ces valeurs que je supprimerais de la chaîne. Par exemple le 2ème coup je repartirais de 1, 3, 4 pour tirer au hasard parmi ces 3 valeurs, et ainsi de suite.


#3

Merci pour ta réponse, ça m’a un peu débloqué ! J’ai essayé de faire ça, en créant une structure avec comme enfants mes 4 positions X possibles :


Puis j’ai réussi a faire cette équation (à rallonge) qui tire un enfant aléatoire selon le nombre d’enfants actifs dans la structure :

Ca a l’air de marcher à première vu, maintenant : je ne trouve pas comment faire en sorte de supprimer l’enfant qui vient d’être tiré au hasard, pour les prochains tours ? (la case que j’ai laissée vide du coup)
Et aussi je ne sais pas pourquoi j’ai de temps à autre ce soucis :
pbdecalage
une des actions tirée au sort qui décide de s’aligner sur la gauche, comme si la valeur d’un de mes enfants était de 0 :face_with_monocle:


#4

La piste que je proposais n’est pas tout-à-fait celle-là. J’avais plutôt pensé faire comme ci-dessous:


Tu multiplies ensuite la variable Tirage par 71 pour avoir ton X.
Attention la variable Tirage est écrasée à chaque tour de la boucle: ou tu la stockes dans une variable de structure, ou tu l’utilises de suite en intégrant tes instructions.
Après, il y a sûrement d’autres façons de faire. Dans ce que tu as commencé, tu pourrais passer par une variable intermédiaire pour stocker ton nombre tiré au hasard. Ce nombre est aussi le numéro de l’enfant de positions, dont tu pourrais passer la valeur à 0 (je ne sais pas supprimer un enfant mais c’est peut-être possible). Ensuite, tu ne validerais un tirage que si la valeur résultante est supérieure à 0, sinon tu recommences. Ce n’est pas élégant, mais sur 3 tirages ça marchera.
Ce que tu peux aussi faire, qui n’a rien à voir avec tout ça, c’est placer des cibles sur un calque que tu caches et tirer tes instances de cible au hasard pour positionner dessus tes actions. Tu pourrais t’inspirer du jeu “pairs” que tu peux visualiser en créant un nouveau projet.
Sinon, si tu veux voir l’état de ton jeu et de ses variables, il y a un débugger dans Gdevelop qu’on appelle en appuyant sur le petit insecte de la barre. Ou tu crées un objet texte, et tu fais afficher la valeur des variables qui t’intéressent dans ce ou ces objets.