Oyez, oyez !
Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !
Merci à toutes et à tous pour votre participation !
N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...
Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !
Merci à toutes et à tous pour votre participation !
N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...
Aléatoire décremental, comment faire ?
- deratiseur
- Golem de fer
- Messages : 3697
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
Aléatoire décremental, comment faire ?
.
Je voudrais recréer le paquet de cartes qui existe dans l'Interplan.
Pour info, le paquet contient 21 cartes, et chaque tirage d'une carte la fait disparaitre.
On a donc un paquet de cartes initial de 21 cartes, donc 21 cartes aléatoires. puis on a plus que 20 cartes aléatoires, puis plus que 19, etc....
problème : si le premier paquet est facile, une carte aléatoire sur 21, le deuxième est problématique puisque je devrait créer 21 paquets différents, chacun correspondant à une carte en moins différentes. Puis je devrais créer 21x20 troisième paquet (avec 2 cartes "aléatoires" en moins), puis 19x20x21 4eme paquet (avec 3 cartes "aléatoires" en moins), etc...
Même l'avant dernier "paquet" ou il n'en reste que deux cartes doit être au nombre de 420 -> 420 duo de cartes possibles, et doit prendre en compte tout ce qui a été tiré avant, donc ce n'est PAS juste 420 objets.
Et le denier paquet, une carte seule, peut être une des 21 existante, mais doit prendre en compte toute ce qui et doit prendre en compte tout ce qui a été tiré avant, donc ce n'est PAS juste 21 objets.
A part faire un nombre inimaginable d'objets, je ne vois pas comment faire. C'est pour ça qu'actuellement le paquet n'est pas aléatoire et utilise les cartes dans un ordre prédeterminé. mais je voudrais corriger ça pour passer à un "vrai" decj aléatoire de 43 cartes.
Un(e) mathématicien(e) ou adepte de script génial(e) aurait t'il une solution simple à me proposer ?
Pour info, le paquet contient 21 cartes, et chaque tirage d'une carte la fait disparaitre.
On a donc un paquet de cartes initial de 21 cartes, donc 21 cartes aléatoires. puis on a plus que 20 cartes aléatoires, puis plus que 19, etc....
problème : si le premier paquet est facile, une carte aléatoire sur 21, le deuxième est problématique puisque je devrait créer 21 paquets différents, chacun correspondant à une carte en moins différentes. Puis je devrais créer 21x20 troisième paquet (avec 2 cartes "aléatoires" en moins), puis 19x20x21 4eme paquet (avec 3 cartes "aléatoires" en moins), etc...
Même l'avant dernier "paquet" ou il n'en reste que deux cartes doit être au nombre de 420 -> 420 duo de cartes possibles, et doit prendre en compte tout ce qui a été tiré avant, donc ce n'est PAS juste 420 objets.
Et le denier paquet, une carte seule, peut être une des 21 existante, mais doit prendre en compte toute ce qui et doit prendre en compte tout ce qui a été tiré avant, donc ce n'est PAS juste 21 objets.
A part faire un nombre inimaginable d'objets, je ne vois pas comment faire. C'est pour ça qu'actuellement le paquet n'est pas aléatoire et utilise les cartes dans un ordre prédeterminé. mais je voudrais corriger ça pour passer à un "vrai" decj aléatoire de 43 cartes.
Un(e) mathématicien(e) ou adepte de script génial(e) aurait t'il une solution simple à me proposer ?
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
Tu sais combien de combinaisons possibles ça fait au total ?
Oui, tu as bien lu. Je te laisse faire le calcul avec 43 cartes.
À moins de passer par une créature invisible qui gère ça par script et te donne à chaque fois un seul des 21 objets (tu n'en aurais que 21), bonjour l'angoisse. Et encore, pas sûr que ce soit simple à coder à partir de couples Global("objet1",GLOBAL,0) / Global("objet1",GLOBAL,1) | Global("objet2",GLOBAL,0) / Global("objet2",GLOBAL,1)...
► Afficher le texte
À moins de passer par une créature invisible qui gère ça par script et te donne à chaque fois un seul des 21 objets (tu n'en aurais que 21), bonjour l'angoisse. Et encore, pas sûr que ce soit simple à coder à partir de couples Global("objet1",GLOBAL,0) / Global("objet1",GLOBAL,1) | Global("objet2",GLOBAL,0) / Global("objet2",GLOBAL,1)...
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Mornagest
- Grand Gourou
- Élu de Mystra
- Messages : 19172
- Enregistré le : ven. 17 oct. 2003, 10:48
- Localisation : Juste derrière vous, prêt à hurler BOUH !
- Statut : Hors ligne
.
Oui, logiquement en probabilités, tu dois faire la factorielle de 21, ce qui est un peu déconnant en terme de codage.
Est-ce que tu n'aurais pas plutôt idée de créer quelques versions différentes de ton deck de cartes et que le joueur en trouve un aléatoirement parmi ces quelques exemplaires (les autres étant dans ce cas introuvables par ailleurs) ?
Est-ce que tu n'aurais pas plutôt idée de créer quelques versions différentes de ton deck de cartes et que le joueur en trouve un aléatoirement parmi ces quelques exemplaires (les autres étant dans ce cas introuvables par ailleurs) ?
Administrateur général. Je modère dans cette couleur.
Rejoignez Melandis, la Cité du Chaos
La biographie de Mornagest ainsi que ses quêtes et sa couleur RP #6C84FF ; la biographie de Henk et sa couleur RP #3BBB34
"Ne vous imaginez pas être différente de ce qu'il eût pu sembler à autrui que vous fussiez ou eussiez pu être en restant identique à ce que vous fûtes sans jamais paraître autre que vous n'étiez avant d'être devenue ce que vous êtes." (Lewis Caroll)
Rejoignez Melandis, la Cité du Chaos
La biographie de Mornagest ainsi que ses quêtes et sa couleur RP #6C84FF ; la biographie de Henk et sa couleur RP #3BBB34
"Ne vous imaginez pas être différente de ce qu'il eût pu sembler à autrui que vous fussiez ou eussiez pu être en restant identique à ce que vous fûtes sans jamais paraître autre que vous n'étiez avant d'être devenue ce que vous êtes." (Lewis Caroll)
- Freddy_Gwendo
- Adepte de Grondemarteau
- Orbe ancien
- Messages : 5877
- Enregistré le : sam. 23 avr. 2011, 00:26
- Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
- Statut : Hors ligne
.
J'ai un peu réfléchi à ton truc, et...
Si je devais le coder pour, disons 5 objets, je crois que j'utiliserais un objet unique qui créerait une créature invisible. Plus les 5 objets, ça ne fait que 6 objets à créer.
À sa création, la créature invisible se verrait assigner un script qui dépendrait de l'historique du tirage et serait déterminé selon six variables :
Du coup, au premier tirage, toutes les variables sont nulles. Le script par défaut est simple :
RandomNum(5,n) ==> on donne l'objet n
Pour chaque objet, la variable objetn passe à 1 s'il a été tiré.
La variable nb_objets_tires augmente de 1.
Au deuxième tirage, selon la valeur de nb_objets_tires et de tous les objetn, on assigne un nouveau script à la créature. Et rebelotte ! Jusqu'à ce qu'il n'y ait plus qu'un objet.
Ainsi, on peut limiter le nombre de scripts.
Pour un troisième tirage, par exemple, les tirages
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 3 4
1 2 5 4 3
2 1 3 4 5
2 1 3 5 4
2 1 4 3 5
2 1 4 5 3
2 1 5 3 4
2 1 5 4 3
utiliseront le même script (on tire aléatoirement soit l'objet3, soit l'objet4, soit l'objet5 ; peu importe l'ordre de tirage).
Et c'est encore plus flagrant pour le quatrième tirage et le dernier qui, lui, n'en a besoin que de cinq.
En plus, je suis quasiment certain, qu'en cherchant bien, on doit pouvoir trouver un moyen d'écrire ces scripts automatiquement avec WeiDU lors de l'installation. De la même manière que celle que je t'avais indiquée pour le DUKP.
Note : je parle d'objets par convention, mais ça fonctionne aussi avec des effets appliqués par des sorts.
Si je devais le coder pour, disons 5 objets, je crois que j'utiliserais un objet unique qui créerait une créature invisible. Plus les 5 objets, ça ne fait que 6 objets à créer.
À sa création, la créature invisible se verrait assigner un script qui dépendrait de l'historique du tirage et serait déterminé selon six variables :
Variable | valeurs possibles |
nb_objets_tires | 0 à 4 |
objet1 | 0 / 1 (déjà tiré) |
objet2 | 0 / 1 (déjà tiré) |
objet3 | 0 / 1 (déjà tiré) |
objet4 | 0 / 1 (déjà tiré) |
objet5 | 0 / 1 (déjà tiré) |
RandomNum(5,n) ==> on donne l'objet n
Pour chaque objet, la variable objetn passe à 1 s'il a été tiré.
La variable nb_objets_tires augmente de 1.
Au deuxième tirage, selon la valeur de nb_objets_tires et de tous les objetn, on assigne un nouveau script à la créature. Et rebelotte ! Jusqu'à ce qu'il n'y ait plus qu'un objet.
Ainsi, on peut limiter le nombre de scripts.
Pour un troisième tirage, par exemple, les tirages
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 3 4
1 2 5 4 3
2 1 3 4 5
2 1 3 5 4
2 1 4 3 5
2 1 4 5 3
2 1 5 3 4
2 1 5 4 3
utiliseront le même script (on tire aléatoirement soit l'objet3, soit l'objet4, soit l'objet5 ; peu importe l'ordre de tirage).
Et c'est encore plus flagrant pour le quatrième tirage et le dernier qui, lui, n'en a besoin que de cinq.
En plus, je suis quasiment certain, qu'en cherchant bien, on doit pouvoir trouver un moyen d'écrire ces scripts automatiquement avec WeiDU lors de l'installation. De la même manière que celle que je t'avais indiquée pour le DUKP.
Note : je parle d'objets par convention, mais ça fonctionne aussi avec des effets appliqués par des sorts.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- deratiseur
- Golem de fer
- Messages : 3697
- Enregistré le : mer. 05 déc. 2007, 18:35
- Localisation : Gap, Hautes alpes
- Statut : Hors ligne
.
Merci. je vais essayer de décrypter ça. Enfin, quand j'y reviendrais après avoir finalisé les 5 derniers autres trucs commencés dans ma TODO liste
-
- Gnoll
- Messages : 162
- Enregistré le : sam. 11 nov. 2017, 18:20
- Localisation : Boulogne-Billancourt
- Statut : Hors ligne
.
Je ne sais pas si tu en as encore besoin, mais une solution simple serait la suivante:
Tu initialises un tableau T de n (par exemple n=21 ou n=43) valeurs tout à 0.
Puis à chaque tirage, tu lances le script suivant :
1) Tirer une valeur aléatoire v entre 0 et n-1
2) Si T[v] = 0 alors T[v] = 1 et retourner v
3) sinon revenir à l'étape 1)
Au niveau performance ce n'est pas parfait, mais ça reste très raisonnable puisqu'on est sur le problème du collectionneur. Il faudra en moyenne un peu moins de 200 tirages d'aléa pour le cas n=43
Tu initialises un tableau T de n (par exemple n=21 ou n=43) valeurs tout à 0.
Puis à chaque tirage, tu lances le script suivant :
1) Tirer une valeur aléatoire v entre 0 et n-1
2) Si T[v] = 0 alors T[v] = 1 et retourner v
3) sinon revenir à l'étape 1)
Au niveau performance ce n'est pas parfait, mais ça reste très raisonnable puisqu'on est sur le problème du collectionneur. Il faudra en moyenne un peu moins de 200 tirages d'aléa pour le cas n=43
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité