JeuWeb - Crée ton jeu par navigateur

Version complète : [Résolu] L'aléatoire en PHP
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3 4
Un truc qui peut s'avérer bien utile sur l'aléatoire et auquel on ne pense pas toujours :
Une même graine donnera toujours la même séquence de nombre aléatoires

L'intérêt de ce genre de choses ?
Tout simplement, pouvoir répéter autant de fois que l'on souhaite une séquence d'évènements basés sur des jets aléatoires. Ca peut être utile pour rejouer un combat, créer un univers généré aléatoirement à l'identique, etc.
(14-06-2010, 01:59 PM)Roworll a écrit : [ -> ]Un truc qui peut s'avérer bien utile sur l'aléatoire et auquel on ne pense pas toujours :
Une même graine donnera toujours la même séquence de nombre aléatoires

L'intérêt de ce genre de choses ?
Tout simplement, pouvoir répéter autant de fois que l'on souhaite une séquence d'évènements basés sur des jets aléatoires. Ca peut être utile pour rejouer un combat, créer un univers généré aléatoirement à l'identique, etc.


Je plussoie très fort, et si y a des problèmes d'aléatoire je pense que c'est plus la faute de la graine de départ que de l'algo implenté par php qui est quand même utilsé depuis un bon bout de temps sans que personne ne remarque quoi que ce soit de foireux. Sinon c'est sans doute le pourcentage d'échec qui est trop grand si les joueurs ont l'impression de perdre tout le temps. L'air de rien rater genre 40 % du temps c'est assez énorme et il est pas improbable d'avoir de longue séries
Qu'es ce que vous appelez "la graine de départ"? j'ai pas bien saisie :|
la graine (seed) est la valeur numérique que tu peux passer en paramètre aux fonction mt_srand() et srand() pour initialiser le générateur de nombre aléatoires.
Je ne connaissais pas cette fonction, mais j'avoue ne pas comprendre son utilité puisque mt_rand() fonctionne sans qu'on est au préalable initialiser quoi que se soit. (a moins que se soit fais dans la fonction elle même, mais dans ce cas cela ne change rien: a quoi cela sert de l'initialisé nous même en "manuel" si la fonction le gère?)
(14-06-2010, 03:32 PM)Argorate a écrit : [ -> ]Je ne connaissais pas cette fonction, mais j'avoue ne pas comprendre son utilité puisque mt_rand() fonctionne sans qu'on est au préalable initialiser quoi que se soit. (a moins que se soit fais dans la fonction elle même, mais dans ce cas cela ne change rien: a quoi cela sert de l'initialisé nous même en "manuel" si la fonction le gère?)

Rétrocompatibilité
(14-06-2010, 03:32 PM)Argorate a écrit : [ -> ]a quoi cela sert de l'initialisé nous même en "manuel" si la fonction le gère?)

Comme je l'expliquais, initialiser la graine avant de lancer des séries de tirage aléatoires garantie de refaire les même tirages dans le même ordre.

Prenons un système de combat avec une possibilité de replay.
La réussite de chaque attaque/parade étant basée sur un jet aléatoire, tu as deux solutions au départ pour permettre le replay.
- soit tu enregistres tous les évènements, tous les jets et tu montes un module spéciale pour le replay.
- Soit tu initialises le moteur aléatoire avec mt_srand() en utilisant au départ une graine (en te basant sur le microtime ou en utilisant mt_rand() par exemple) que tu vas stocker.
Lorsque tu veux rejouer le combat, il te suffit de réinitialiser le système aléatoire avec mt_srand() et ta graine puis d'appeler le module de combat. Les résultats seront exactement identiques.
Oui ok, c'est un cas très particulier. Je pense que j'aurais tendance a garder en mémoire les résultats du premier jet.

En tout cas merci pour ce complément d'infos Wink
(15-06-2010, 07:00 AM)Roworll a écrit : [ -> ]Comme je l'expliquais, initialiser la graine avant de lancer des séries de tirage aléatoires garantie de refaire les même tirages dans le même ordre.

Cf Doc:
Since 5.2.1 The Mersenne Twister implementation in PHP now uses a new seeding algorithm by Richard Wagner. Identical seeds no longer produce the same sequence of values they did in previous versions. This behavior is not expected to change again, but it is considered unsafe to rely upon it nonetheless.
Sur mon serveur local (5.3.1) et mon serveur web (5.2.13), une même graine renvoie toujours la même séquence.

Elle est même carrément identique d'un serveur à l'autre malgré la différence de version (ce qui est tout à fait logique et justifie l'existence des graines).

Le message est à prendre dans le sens ou
- avant la version 5.2.1, on avait une certaine séquence pour une graine donnée (par ex, avec la graine 100 on avait 5,3,9,6)
- depuis la 5.2.1, on a une autre séquence pour cette même graine (par ex la graine 100 renverra maintenant 6,8,1,5).
Pages : 1 2 3 4