Choisir un bon paquet de lancer de dés

Le problème exposé dans ce sujet a été résolu.

Bonsoir,

Cela fait quelques temps que j’avais écrit ce sujet sans le poster. En fait, je cherche un module de lancer de dés sur npm. Or, il y en a tellement que je ne sais pas ver quoi me tourner. Je fais attention à trois choses :

  • la date de dernière publication
  • le numéro de version
  • les dépendances

En utilisant les mots clés « dice », je pense que les meilleurs choix se portent sur :

Une mention spéciale pour dice-roller-dnd qui s’utilise d’une manière qui me plaît bien mais par contre, il y a des dépendances.

Quels conseils pouvez-vous me donner pour choisir un bon module (en général avec ce cas particulier comme exemple ?

Je pense que ça dépend surtout de ce que tu veux en faire ?

  • Tu as besoin d’un paquet dont la licence est compatible avec ton projet.
  • Si tu as besoin de lire des entrées arbitraires de la part de l’utilisateur (du type 4d12+42 avec une syntaxe pas toujours très propre), il te faut un paquet qui permet de lire ce genre de syntaxe sans être trop chiant.
  • Si tu as besoin de faire beaucoup de lancers et/ou de performance, il te faut un paquet qui calcule la distribution et fait un seul tirage au lieu de faire un « random » par « dé » (je crois que c’est le cas d’aucune de celles que tu cites).
  • Si tu as besoin de validations spéciales, il te faut un paquet que le supporte.
  • Si tu as des contraintes fortes sur la compatibilité ou la taille du paquet, elles sont à prendre en compte (et leurs dépendances).
  • Etc.

Une mention spéciale pour dice-roller-dnd qui s’utilise d’une manière qui me plaît bien mais par contre, il y a des dépendances.

C’est agaçant les plugins avec babel quand on utilise une version récente de node… Pour moi c’est éliminatoire.

(Bien qu’on peut facilement forker le projet et enlever ces deps qui sont plus des commandes que des bibliothèques/api).

Je n’avais pas du tout penser à vérifier à licence alors que c’est essentiel (non pas au niveau fonctionnel au niveau légal).

  • Si tu as besoin de faire beaucoup de lancers et/ou de performance, il te faut un paquet qui calcule la distribution et fait un seul tirage au lieu de faire un « random » par « dé » (je crois que c’est le cas d’aucune de celles que tu cites)
SpaceFox

Sinon, il y a ce point que je n’ai pas compris. ̈Pourrais-tu me l’expliquer ?

Concernant les autres points, je vais essayer de voir avec les paquets que j’ai cité ce qui m’arrange le plus.

C’est agaçant les plugins avec babel quand on utilise une version récente de node… Pour moi c’est éliminatoire.

A-312

Je ne sais pas ce que fait babel mais je le vois souvent en tant que dépendance. Ça rejoint le dernier point de @Spacefox qui est la recherche du nombre de dépendance le plus faible. C’est encore plus le cas quand il s’agit de paquet « simple » comme ce type. Si certains paquet n’ont pas de dépendance pour le lancer de dés, alors il est possible de faire sans. Encore, s’il s’agit d’une petite dépendance qui ne dépend pas encore d’autre chose, pourquoi pas, mais si on rajoute les cascades, je n’en veux pas pour quelque chose de petit.

C’est bien d’avoir des gestionnaires de paquets mais en trouvant autant faisant la même chose, je trouve cela dommage. Il serait tellement mieux que chacun travaille sur quelques paquets pour avoir la chose la plus optimisée et maintenue. Mais bon, ce n’est pas comme ça…

En fait tu as deux façons de tirer un dé.

  • Soit « naturellement » : tu choisis un entier qui correspond au résultat du dé,
  • Soit de façon probabiliste : tu connais d’avance la fonction de répartition des résultats, tu tires un nombre dans les valeurs possibles pour cette fonction (entre 0 et 1 si tu as normalisé ta fonction dans cet intervalle) et ça te sors l’information voulue. AnyDice permet de visualiser et de récupérer les pourcentages de telles fonctions si tu n’as pas envie de faire les calculs.

Par exemple, avec une fonction 1d4 normalisée pour un tirage entre 0 et 1 :

  • Tu sais qu’entre 0 et 0.25 tu as 1, entre 0.25 et 0.50 tu as 2, etc.
  • Ou tu sais que si tu dois faire 2+, tu dois tirer un nombre supérieur à 0.25,
  • Ou tu sais que si tu dois faire moins de 3, tu dois tirer un nombre inférieur à 0.50,
  • etc.

Alors évidemment pour un seul dé, ça n’a absolument aucun intérêt.

Par contre, ça devient intéressant dès que tu dois lancer des brouettes de dés, parce que tu n’a besoin de calculer qu’une seule fois cette fonction, puis de faire un seul tirage quel que soit le nombre de dés à « lancers  » dans le jeu demandé. Par exemple, si tu as besoin de lancer 1000d6, et d’en faire la somme, tu n’as qu’un nombre aléatoire à génerer avec lequel tu fais tes calculs, au lieu de sommer les résultats de la génération de 1000 nombres aléatoires. C’est surtout important si :

  • Ta fonction de nombres aléatoires est lente,
  • Si tu laisses les utilisateurs jouer avec le système (et donc qu’un petit malin tente de calculer la somme d’un milliard de dés, pour voir)

Je ne sais pas ce que fait babel mais je le vois souvent en tant que dépendance. Ça rejoint le dernier point de @Spacefox qui est la recherche du nombre de dépendance le plus faible. C’est encore plus le cas quand il s’agit de paquet « simple » comme ce type. Si certains paquet n’ont pas de dépendance pour le lancer de dés, alors il est possible de faire sans. Encore, s’il s’agit d’une petite dépendance qui ne dépend pas encore d’autre chose, pourquoi pas, mais si on rajoute les cascades, je n’en veux pas pour quelque chose de petit.

Helmasaur

Babel convertit tout le code Javascript supérieur à ECMAScript 2015+ en ES2015 pour assurer la compatibilité pour les plus vieilles version de node (ou du navigateur). C’est pour ça que je décris ce module comme une commande plutôt qu’une bibliothèque qui va ajouter une API ou un framework.

J’ai oublié de répondre à ce sujet suite à mon choix donc voici mon retour.

Tout d’abord, j’ai exclus dice-roller-dnd même s’il m’intéressait pour éviter l’ajout de deux dépendances et quelques avec la cascade.

Finalement, mon choix s’est portée sur trpg-dice car je préfère le résultat (en particulier sur les données de chaque lancé) qui est retourné par ce paquet comparé aux deux autres. Son point négatif est le fait que le paquet n’est plus maintenu.

Pour l’instant, il fait ce dont j’ai besoin et je n’ai pas encore exploité toutes les possibilités de ce paquet car je n’ai pas encore implémenté tout ce que je souhaites. Au final, ça fait l’affaire et vu qu’il ne s’agit pas d’une dépendance importante dans mon projet, je l’utilise sans inquiétude et ça sera assez simple de le remplacer par un autre.

Merci à tous ;) !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte