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é...

Aléatoire décremental, comment faire ?

Répondre
Avatar du membre
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 ?

.

Message par deratiseur »

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 ?
Le standard téléphonique est en rade : l'atelier du Deratiseur ne répondra plus à aucune demande personnalisée.
Bosse sur : Interplan v9, Derat's Kri'Binn, Todd : KOPP2.

Mes mods sont tous sur Mediafire et Github
Et leurs descriptions sont ici.
Avatar du membre
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
.

Message par Freddy_Gwendo »

Tu sais combien de combinaisons possibles ça fait au total ?
► Afficher le texte
Oui, tu as bien lu. Je te laisse faire le calcul avec 43 cartes. :whistle3:

À 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...
Avatar du membre
Mornagest
Grand Gourou
Élu de Mystra
Messages : 19168
Enregistré le : ven. 17 oct. 2003, 10:48
Localisation : Juste derrière vous, prêt à hurler BOUH !
Statut : Hors ligne
.

Message par Mornagest »

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) ?
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)
Avatar du membre
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
.

Message par Freddy_Gwendo »

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 :

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é)
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.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
deratiseur
Golem de fer
Messages : 3697
Enregistré le : mer. 05 déc. 2007, 18:35
Localisation : Gap, Hautes alpes
Statut : Hors ligne
.

Message par deratiseur »

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 ^^
Le standard téléphonique est en rade : l'atelier du Deratiseur ne répondra plus à aucune demande personnalisée.
Bosse sur : Interplan v9, Derat's Kri'Binn, Todd : KOPP2.

Mes mods sont tous sur Mediafire et Github
Et leurs descriptions sont ici.
N3ige
Gnoll
Messages : 162
Enregistré le : sam. 11 nov. 2017, 18:20
Localisation : Boulogne-Billancourt
Statut : Hors ligne
.

Message par N3ige »

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
Répondre

Retourner vers « Généralités sur la création d'un mod »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité