Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Fonction Random

Par <Acken> le 19/8/2001 à 13:28:00 (#24708)

Je voudrais savoir comment on fait la fonction random ( par exemple un chiffre entre 1 et 4 ).
Merci de me répondre !
Au fait a quand la lecon 10 ?!

Par Caepolla le 19/8/2001 à 14:38:00 (#24709)

La feuille de référence du NWN Script liste deux fonctions : Random, et RandomName. J'imagine que la première fonctionnera de façon similaire à celle usée en Java (avec les mêmes limites).

Quant à la leçon 10, on l'attend aussi. Et je ne saurais dire quand elle va être diffusée.

Par Myvain le 20/8/2001 à 12:04:00 (#24710)

Débat lancé par <Acken>:
Je voudrais savoir comment on fait la fonction random ( par exemple un chiffre entre 1 et 4 ).
Merci de me répondre !
Au fait a quand la lecon 10 ?!


Je ne sais pas comment fonctionne
random avec le script de NWN mais je peux te dire coment ça marche en C avec la fonction rand:

ex:
#include <stdio.h> //pour printf
#include <stdlib.h> //pour rand

main()
{
int x=0; // variable du nombre aléatoire entre 1 et 4, initialisée à 0
srand((unsigned) time(NULL)); //initialise la fonction rand
x=rand() %5; //affecte un nombre aléatoire inférieur à 5 à la variable x
if (x == 0) //si x = 0 ajouter 1 pour ne pas avoir un chiffre nul
x++; //+1
printf("%d", x); //ecrit la variable à l'ecran
}

voilà, je pense que les commentaires t'aideront à comprendre cet exemple.
Juste une précision, la fonction 'srand' (en C) est nécessaire afin d'initialiser la fonction 'rand'. Sans celle-ci,ton programme génèrera toujours le même chiffre. On attribue en général la valeur de retour de la fonction 'time' car on est assuré d'avoir toujour un nombre différent pour initialiser la fonction 'rand' et donc le nombre obtenu est chaque fois différent... Des questions?

:)

Myv, programmeur amateur :rasta:

[ 20 août 2001: Message édité par : Myvain ]

Par Caepolla le 20/8/2001 à 13:11:00 (#24711)

Merci Myvain

Juste une petite précision. Je n'ai pas vu de fonction Srand dans la liste de référence. Donc, je pense que la fonction Random va fonctionner comme en Java : sauf erreur, la fonction Random "tire" le nombre aléatoire en se basant sur l'horloge.

Par <Acken> le 20/8/2001 à 14:15:00 (#24712)

Merci Myvain, maintenant je peut commencer a me faire une petite simulation de combat pour tester l'équilibre dans mes JDR !

Par <Acken> le 20/8/2001 à 14:46:00 (#24713)

Y a t il un moyen pour que les chiffres soient beaucoup plus aléatoires ( sans se baser sur l'horloge ) ?

Par Myvain le 20/8/2001 à 15:23:00 (#24714)

Débat lancé par <Acken>:
Y a t il un moyen pour que les chiffres soient beaucoup plus aléatoires ( sans se baser sur l'horloge ) ?


Pour des chiffres entre 1 et 4, la marge est faible donc ce n'est pas très aléatoire. Par contre, si tu veux des nombres aléatoires plus grand, il te suffit de changer la ligne suivante:

x=rand() %5

en remplaçant le 5 par un chiffre plus élevé. Par exemple si tu veux un nombre aléatoire entre 1 et 9999, remplace le 5 par 10000...
L'horloge est à ma connaissance et sauf erreur de ma part, le meilleur moyen pour initialiser la fonction srand avec un chiffre toujours différent.


Pour ceux que ça intéresse(Caepolla&Ubaldis??), le programme en java équivalent à celui en C: ;)


import java.util.*;

class test {
public static void main (String[] arguments)
{
int x = Math.abs((new Random() ).nextInt() ) %5;
System.out.println(x);

}
}

La méthode 'nextInt()' renvoie un entier (int) quelconque et la methode 'abs' permet de toujour obtenir une valeur positive. Par contre, je ne sais pas si la classe Random est initialisée à l'aide de l'horloge...

Myvain, qui se remet péniblement à la programmation

Par fendrag le 21/8/2001 à 13:44:00 (#24715)

Myvain tu es sur qu'avec ton algo tu n'as pas 2 fois plus de chance de sortir un 1 qu'un des autres chiffres ? :confus:
Ne vaudrait-il pas mieux tirer un chiffre entre 0 et 3 inclus et rajouter systematiquement 1 ?

Par Myvain le 21/8/2001 à 14:27:00 (#24716)

Débat lancé par fendrag:
Myvain tu es sur qu'avec ton algo tu n'as pas 2 fois plus de chance de sortir un 1 qu'un des autres chiffres ? :confus:
Ne vaudrait-il pas mieux tirer un chiffre entre 0 et 3 inclus et rajouter systematiquement 1 ?


C'est exact, tu as raison http://jppetit.free.fr/smileys/pouceup.gif .

La solution que tu proposes est la bonne :).
Pour les feignants, si ça intéresse quelqu'un d'autre que nous ;), voiçi le code corrigé:


#include <stdio.h> //pour printf
#include <stdlib.h> //pour rand

main()
{
int x=0;
srand((unsigned) time(NULL));
x=rand() %4;
x++;
printf("%d", x);
}

Dans ma grande flemmardise, je n'ai pas testé, alors dit moi s'il y a un problême...
http://jppetit.free.fr/smileys/wave.gif

Myv, qui se demande encore pourquoi il s'est remis à la programmation http://jppetit.free.fr/smileys/sley2/jump3.gif

[ 21 août 2001: Message édité par : Myvain ]

Par Paoh le 21/8/2001 à 17:46:00 (#24717)

Un petit coucou au milieu de mes vacances-recherched'emploi-rédactiondemémoire (donc pas trop vacances).

Je vois que je vais avoir du boulot en m'y remettant. Ne perdez pas espoir !

...

oooh, mais qu'est ce que... haha.. j'en essaye un... désolé... héhé

A bientôt (promis, en septembre)

Par Myvain le 21/8/2001 à 19:12:00 (#24718)

Reviens nous vite Paoh :)
*se sent seul sur sa dune* ;)

Par <Acken> le 21/8/2001 à 19:57:00 (#24719)

Merci Myvain mais si ce n est as trop te demander, pourrais tu me dire quelle est la ligne de commande pour demander une information :
exemple : le programme demande a l'utilisateur la longueur du coté d'un carré dans un programme pour calculer l air au carré.
Merci !
Acken

Par Myvain le 21/8/2001 à 21:39:00 (#24720)

Débat lancé par <Acken>:
Merci Myvain mais si ce n est as trop te demander, pourrais tu me dire quelle est la ligne de commande pour demander une information :
exemple : le programme demande a l'utilisateur la longueur du coté d'un carré dans un programme pour calculer l air au carré.
Merci !
Acken


Alors, l'instruction utilisée dans ce cas là est: scanf, de la manière suivante:

scanf("%i", &nomdelavariable);

Pour le calcul de l'aire d'un carré, le programme pourrait être le suivant:

#include <stdio.h>

main()
{
int x;
int stockage;

printf("Taper un chiffre puis appuyer sur entrer:");
scanf("%i",
stockage = x;
printf("\nVous avez saisi: %i",x);
printf("\nAire du carre: %i" , x*x);
}

A noter que j'ai transféré la valeur saisie dans la variable stockage afin de pouvoir s'en reservir en cas de besoin.
En simplifiant, &x désigne l'adresse mémoire de la variable x dans laquelle sera stockée la valeur saisie.

Voilà :maboule:

[ 21 août 2001: Message édité par : Myvain ]

Par <Acken> le 22/8/2001 à 11:38:00 (#24721)

MERCI encore une fois MYVAINE !
Désolé de te faire reprendre la progrmation :).
Mais le savoir des ainé doit etre transmis aux disciples...... ( HAHEM ! ).
Je crois savoir a ki m adresser pour mes questions de programmation !
@+ Acken

Par Myvain le 22/8/2001 à 11:55:00 (#24722)

Pas de problême, à condition que tu n'écorches pas mon nom

[ 22 août 2001: Message édité par : Myvain ]

JOL Archives 1.0.1
@ JOL / JeuxOnLine