Problème pour lancer x dés avec Ink

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

Problème pour lancer x dés avec Ink

Messagepar Franchiver le Mer Avr 24, 2019 10:55 pm

Salutations !

Quelqu'un d'autre que moi a-t-il eu affaire à une bizarrerie comme celle-ci avec Ink ?

Soit une fonction toute simple pour lancer un dé à six faces :
Code: Tout sélectionner
== function get_one_die_roll ==
{shuffle:
    - ~ return 1
    - ~ return 2
    - ~ return 3
    - ~ return 4
    - ~ return 5
    - ~ return 6
}

Que j'appelle tout aussi simplement dans mon code principal pour afficher le résultat d'un lancer de deux dés, à répéter à l'infini :
Code: Tout sélectionner
== roll_dice ==

{get_one_die_roll()} {get_one_die_roll()}
+   [Relancer les dés]
    -> roll_dice

Et voilà mon souci : quand j'exécute ce code, quel que soit le nombre d'itérations, je n'obtiens jamais de tirage double (1 1, 2 2, 3 3, etc.). Comme si le bloc "shuffle" ne devait jamais tirer le même résultat deux fois de suite entre deux choix de joueur !
Y a-t-il quelque chose dans le concept du "random" façon Ink que j'aurais manqué ?

D'avance, merci !
Franchiver
Sorcier du culte
 
Messages: 4
Inscription: Mar Mar 26, 2019 12:22 am

Re: Problème pour lancer x dés avec Ink

Messagepar Natrium le Jeu Avr 25, 2019 4:36 pm

Effectivement, je n'ai moi non plus pas réussi à obtenir de doublet avec cette fonction… C'est étrange. Pour être sûr que ce n'était pas juste de la malchance, j'ai aussi essayé avec une fonction qui ne sort que 1 et 2, mais même dans ce cas-ci on a un comportement bizarre : si on lance plus de dés que leur nombre de face (par exemple 3 dés à 2 faces), alors on peut obtenir des doublet (1 1 2 ou 2 1 1), mais jamais des triplets.

Mon intuition me dit que c'est parce que les séquences dans ink sont — je crois — inspirées par Inform, et que par défaut avec Inform ça ne répète pas deux fois le même résultat (pour éviter les répétitions ennuyeuses), même si on peut faire du pure aléatoire. Mais ça n'explique pas le comportement bizarre quand on lance plus de dés. Et aussi, comme tu l'as fais remarquer, les répétitions ne sont interdites que dans le même nœud (on peut obtenir 1 2 puis 2 1, on a donc le 2 qui s'est répété si on compte de manière globale).

Et comme l'exemple de la documentation montre un lancer de pièce à pile ou face, elle sous-entend que ça devrait être totalement aléatoire.

Mais heureusement, il existe déjà un fonction dans ink pour tirer un nombre aléatoire, pas besoin de la recréer ! (C'est dificile à savoir, parce qu'elle n'est pas mentionnée dans la documentation.)

Code: Tout sélectionner
== function get_one_die_roll ==

~ return RANDOM(1, 6)


Et là, tout semble fonctionner comme il faut. Mais du coup, la fonction créée n'a plus forcément d'intérêt puisqu'on peut juste directement utiliser RANDOM…

Ça résout ton problème, mais je suis quand même intrigué par le comportement de shuffle. Je vais faire plus de tests et écrire un rapport de bug sur le dépôt d'ink.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1147
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Problème pour lancer x dés avec Ink

Messagepar Franchiver le Ven Avr 26, 2019 3:11 pm

Oh, merci ! En effet, cette fonction RANDOM semble beaucoup plus simple et plus fiable. Néanmoins, je pense continuer à l'utiliser via une fonction à moi, pour "l'interface".
Franchiver
Sorcier du culte
 
Messages: 4
Inscription: Mar Mar 26, 2019 12:22 am

Re: Problème pour lancer x dés avec Ink

Messagepar Natrium le Ven Avr 26, 2019 4:21 pm

Oui, bien sûr ! Tu peux aussi ajouter un argument, si jamais tu veux pouvoir faire varier le nombre de faces.

Code: Tout sélectionner
== function get_one_die_roll(n) ==

~ return RANDOM(1, n)


Après, si tu n'as besoin que de dés à six faces, ce n'est pas la peine, évidemment.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1147
Inscription: Mar Oct 04, 2011 11:18 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 3 invités

cron