Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
443 connectés actuellement
30729754 visiteurs depuis l'ouverture
3371 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Timtrack -
posté le 12/01/2015 à 13:19:00 (660 messages postés)
| Plop | Domaine concerné: événements Logiciel utilisé: VX ace Bonjour, je suis actuellement entrain de faire un mini jeu où on se retrouve dans une sorte de labyrinthe constitué de 49 maps (7x7), mais j'aimerais placer sur ces 49 cases des éléments particuliers (des pièges, des monstres), mais avec pour seule condition : on ne peut pas trouver deux éléments sur la même map.
Par exemple j'ai 8 éléments A et 3 éléments B à répartir, pas plus ni moins.
J'ai donc pensé à créer 11 variables (8 pour les éléments A et 3 pour les éléments B) qui prennent une valeur aléatoire entre 1 et 49 (une valeur associée à chaque map). Le soucis c'est que j'aimerais avoir des valeurs différentes pour chacune des variables.
Ma question : est-il possible d'associer (avec ou sans l'event extender) une valeur interdite dans mon tirage aléatoire à partir d'une ou plusieurs variables (ex : V[1]=4 donc V[2] prend une valeur aléatoire dans [1;49] privé de 4) ou dois-je effectuer des conditions et des boucles pour que chaque variables soient différentes les unes des autres ?
|
Projet actuel |
7163D -
posté le 12/01/2015 à 15:49:46 (946 messages postés)
| Votez Minimaliste | Avec event_extender et un appel de script
1
2
3
4
5
6
7
|
list = (1..49).to_a
49.times do |i|
alea = 1 + rand(list.length)
list.delete(alea)
V[i+1] = alea
end |
Sans EE, tu remplace V par $game_variables je croit
|
Minimaliste, le "." comme signe de ralliement. |
Nukidoudi -
posté le 12/01/2015 à 15:56:21 (736 messages postés)
- | yo |
1
2
3
| 49.times do |i|
liste << i+1
end |
lol ( (1..49).to_a)
|
https://xvw.lol |
7163D -
posté le 12/01/2015 à 15:58:36 (946 messages postés)
| Votez Minimaliste | @Nukidoudi j'ai édité mon message...En fait, j'ai jamais vraiment appris le ruby, mais ce que je bricole marche
|
Minimaliste, le "." comme signe de ralliement. |
Timtrack -
posté le 12/01/2015 à 18:24:43 (660 messages postés)
| Plop | Je ne suis pas tout à fait sur de comprendre ce que vous avez fait, d'ailleurs j'ai testé avec plusieurs tirages et ça n'a pas l'air de fonctionner (j'obtient des valeurs similaires pour certaines variables).
|
Projet actuel |
Mack -
posté le 12/01/2015 à 18:55:27 (2310 messages postés)
- - | | Pour Nuki, aucune idée de ce que ça fait.
Par contre, pour 7163D, ça va juste te tirer un nombre entre 1 et X, au début X vaut 49, et à chaque boucle, X est décrémenté.
Donc pas sur que ça te soit utile.
1
2
3
4
5
6
7
8
| list = (1..49).to_a
x = 0
for i in 1..11
alea = 1 + rand(list.length)
n = list[alea]
list.delete(alea)
$game_variables[i+x] = n
end |
Un truc comme ça devrait te sortir sortir 11 nombres, sans te sortir deux fois le même, et tout te stocker dans les variables 1 + x à 11 + x, t'as juste à choisir le x ^^.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Timtrack -
posté le 12/01/2015 à 19:01:20 (660 messages postés)
| Plop |
1
2
3
4
5
6
| list = Array(1..49)
11.times do |i|
alea = rand(list.length)
V[i+1] = list[alea]
list.delete(list[alea])
end |
Après plusieurs tests j'ai fait ça et ça a l'air de marcher.
(Je vais voir pour le tiens Mack, histoire de voir si c'est pas mieux)
Edit : quand je fais un test avec la boucle correspondant à 49, ma version marche mais pas les autres.
J'ai envie de dire tant mieux d'un autre côté.
|
Projet actuel |
Mack -
posté le 12/01/2015 à 19:04:31 (2310 messages postés)
- - | | Entre ton code et le miens, y a très peu de différence, seul la boucle ( m'enfin, pas sur que ça est vraiment une importance, tant que tu comprends comment marche ta boucle ), d'ailleurs, si quelqu'un pouvait m'expliquer pourquoi vous utilisez tous celle là ça serait cool.
( Non, parce que si ça a vraiment un intérêt okay, mais sinon ... )
Après, V[i+1], ça va être forcement les 11 premières variables, d'où mon i+x, et tu définis ton x.
Mais globalement, c'est le même code ^^.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Timtrack -
posté le 12/01/2015 à 19:17:00 (660 messages postés)
| Plop | Le tiens est plus personnalisable (pour la boucle j'ai repris ce qu'on m'a donné vu que je savais pas comment l'exprimer en ruby )
Mais le soucis (je crois) c'est :
Car ça supprime la valeur alea, alors que
1
| alea = 1 + rand(list.length) |
Donc si par exemple j'ai déjà enlevé la valeur "3" de ma liste, alors alea prendra une valeur entre 1 et 48 (la longueur de la liste ayant été réduite de 1) donc alea peux prendre la valeur 3.
Ah au fait, ici la formule aléatoire est basée sur la longueur de la liste, on peut pas simplement choisir directement une valeur aléatoire de la liste ?
|
Projet actuel |
Nukidoudi -
posté le 12/01/2015 à 19:21:05 (736 messages postés)
- | yo | Ou alors ...
1
2
3
|
$game_variables[0 .. 11] = (0..49).to_a.shuffle[0..11]
|
|
https://xvw.lol |
7163D -
posté le 12/01/2015 à 19:40:58 (946 messages postés)
| Votez Minimaliste | @mack Toutes mes excuses, tu as raison
|
Minimaliste, le "." comme signe de ralliement. |
Mack -
posté le 12/01/2015 à 19:52:11 (2310 messages postés)
- - | | Si si, d'où l’intérêt du list[alea].
En gros, tu dis, "coucou je veux un index X qui appartienne à cette liste ( donc un nombre entre 0 et la longueur de la liste ), après, je veux qu'une variable prenne la valeur de la liste à l'index X".
Et comme, à chaque fois, tu retires la cases qui contient un chiffre déjà utilisé, bah à la la fin, tu auras une liste de nombre compris entre 1 et 49, moins tout les index sortit ^^.
Pour le delete, je sais jamais comment ça marche en ruby, si il faut spécifier l'index de la case qu'on veut enlever, ou son contenu, donc jette un oeil à la Doc pour être sur ^^.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Timtrack -
posté le 12/01/2015 à 20:01:30 (660 messages postés)
| Plop | Justement en fait je voulais dire que c'était le delete qui posais problème, il va delete en fonction du contenu indiqué, pas de la case donc en mettant list.delete(alea) il va supprimer le nombre "alea" si il est dans la liste, pas la valeur d'ID alea.
Bref merci pour vos indications, je repasserai sans doute poser des questions sur ce thème d'ici peu.
|
Projet actuel | Index du forum > Entraide > [VX ace] Génération "aléatoire" d'él
|
|
|