RFC - Générateur aléatoire et nombres aléatoires <author>&frAuthor; <date>v0.2, 30 mars 2000 <abstract> L'objectif de ce document est de définir l'utilisation des nombres aléatoires et la façon de les générer, dans le projet Metacosm. </abstract> <toc> &frLicense; &frProject; <sect>Historique <p> <itemize> <item>v0.2 30/03/1999 (en anglais, Ruffy) - Traduction par Ruffy - Passage en metacosm-DTD <item>v0.1 30/01/1999 (en anglais, Ruffy) - Traduction par Ruffy <item>Premières discussions sur les nombres aléatoires~: été 1999 </itemize> <sect>Pourquoi des nombres aléatoires~? <p> Oui, c'est une bonne question... Vous voulez vraiment une réponse~? OK, je vais essayer de vous donner des éléments de réponse. Si nous n'utilisons pas de nombres aléatoires, le jeu sera entièrement déterministe (i.e. une situation donnée évoluera toujours de la même façon) *en l'absence* de joueurs. Nb.~: nous considérons le temps absolu comme un nombre aléatoire, parce que nous ne le contrôlons pas. Nous supposons donc que les situations ne sont pas fonction du temps absolu. Elles peuvent être fonction de durées. Mais cela ne serait pas un jeu s'il n'y avait pas de joueurs, n'est-ce pas~? Avec l'arrivée du premier joueur, nous perdons le comportement déterministe du jeu (nous supposons que le joueur est actif, donc qu'il interagit avec le jeu... ). Le joueur agit lorsqu'il le veut et fait ce qu'il veut. Avec le temps, le joueur peut comprendre comment le jeu fonctionne (et cela d'autant plus facilement avec le code source :), et utiliser ces informations pour tricher. Avec plusieurs joueurs, chaque joueur agit lorsqu'il le veut et fait ce qu'il veut, mais il y a autant de degrés de liberté que de joueurs, donc il est plus difficile d'avoir une compréhension et une connaissance parfaite du jeu (i.e. trouver la formule qui régit le jeu et décrit le futur). Mais, si les joueurs décident de tricher ensemble, ils contrôlent le futur. C'est la première raison pour avoir des nombres aléatoires~: cela augmente la difficulté pour tricher. Dans la vie réelle, une question philosophique classique est "Le monde est-il complètement déterministe mais chaotique, ou avons-nous une quelconque liberté de faire ce que nous voulons lorsque nous le voulons~?". La réponse n'a aucune importance pour nous. Le seul point important est~: le monde est imprévisible pour nous. Donc si nous souhaitons obtenir la même chose dans le jeu, nous pouvons soit coder des fonctions extrêmement complexes (impossibles à inverser (NdT.~: comprendre ici trouver la fonction réciproque d'une bijection) pour tricher et capables de créer toutes ou une grande variété de situations), soit nous utilisons simplement des nombres aléatoires et nous gardons un code humain (i.e. simple mais bogué :p). C'est la seconde raison. L'utilisation de nombres aléatoires crée un tel chaos que même nous nous serons surpris par l'évolution du jeu. Ceci est encore plus vrai pour les joueurs. C'est une bonne chose pour le plaisir du jeu~: des situations variées et imprévisibles. C'est la troisième raison. <sect>Comment~? <p> Apparemment vous aimez les questions :). Nous utilisons un générateur aléatoire. Vous allez demander lequel, quel type de générateur, avec quelle période, etc. La réponse est sans importance. Même si le générateur est mauvais, les nombres aléatoires sont utilisés dans de nombreuses parties du jeu, donc cela n'a pas d'effet. Et, de plus, les joueurs sont une autre source de hasard. Ces deux points montrent qu'un générateur basique est suffisant. Mais un meilleur conviendrait aussi :). Nous avons seulement besoin d'un générateur qui nous fournit des entiers (de différentes tailles) et des flottants (avec une précision simple ou double). Le générateur est encapsulé dans une interface, donc nous pouvons le changer si nécessaire. Cette interface fournit des fonctions de base comme le lancer d'un ou de plusieurs dés. Un point important dans le choix du générateur est la capacité d'utiliser un germe (i.e. un nombre pour l'initialisation). <sect>Pourquoi un germe~? <p> Pour les joueurs, nous avons besoin d'un jeu imprévisible. Pour les développeurs, nous avons besoin d'un jeu facile à déboguer, donc nous avons besoin d'être capables de reproduire une situation, de la recréer. Nous devons être capables d'obtenir à nouveau la même liste de nombres aléatoires, et la méthode pour obtenir cela est d'utiliser un germe. Le germe est chargé par le jeu au démarrage et sauvegardé de temps en temps pour permettre le déboguage. Avec le germe et un bon système de logs, nous sommes capables de rejouer le jeu et de le déboguer. Nb.~: le germe et l'état courant du générateur aléatoire ne doivent pas être accessibles aux joueurs, et même aux administrateurs (pas de tentation), pour éviter la triche. </article>