PDA

Voir la version complète : [GBA][Aide] Problème avec rand() sous HAM v2.8


N64Francois
23/01/2006, 03h30
Salut à tous,

J'ai des petits soucis avec HAM (Version 2.8).
Je désire tirer au hasard 4 chiffres compris entre 0 et 5 (ces 4 chiffres doivent être différents).

Voici un bout de mon code :

w1=rand()%5;
w2=rand()%5;
while(w2==w1){w2=rand()%5;}
v3=rand()%5;
while(w3==w1 || w3==w2){w3=rand()%5;}
v4=rand()%5;
while(w4==w1 || w4==w2 || w4==w3){w4=rand()%5;}

Je veux utiliser la fonction rand(), mais le problème c'est que les 4 chiffres générés sont toujours les mêmes.

Quelqu'un sait d'ou peut venir le problème ?
Peut-on faire cela en utilisant une autre fonction ?

Yodajr
23/01/2006, 06h12
http://www.playeradvance.org/old/index.php?showtopic=6170

Dr.Vince
23/01/2006, 12h13
Salut !!

y a un exemple avec visual ham :

static int _ham_rndseed = 1;


inline void ham_SRand(int r)
{
_ham_rndseed=r;
}

inline int ham_Rand(void)
{
if(_ham_rndseed&1)
{
_ham_rndseed >>= 1;
_ham_rndseed ^= 0xb400;
}
else
{
_ham_rndseed >>= 1;
}
return(_ham_rndseed);
}


Tu initialises le générateur de nombre aléatoire avec la fonction :
ham_SRand(ce_que_tu_veux);

Et après c'est bon

Par contre il faut savoir que si tu initialise toujours avec la même valeur alors ta suite de nombre (pseudo) aléatoire sera toujours la même.

Je te conseille donc de rendre c'est initialisation elle aussi aléatoire en prenant par exemple la différence de temps entre le lancement de ta rom et l'appuie sur start du joueur par exemple

Voilà

Brunni
23/01/2006, 13h13
Au pire, si tu n'as pas d'écran titre ou autre, tu peux aussi sauver l'état du générateur de nombres en SRAM et le restaurer la prochaine fois. Par exemple:
Au démarrage:
ham_SRand(SRAM);
A la fin:
SRAM = ham_Rand();

N64Francois
23/01/2006, 15h28
Merci pour vos réponse.

Cependant, cela ne fonctionne toujours pas...

Pourtant j'utilise l'exemple qu'a donné Dr.Vince.
J'ai beau changer la valeur dans "ham_SRand(xxx);", ça me donne toujours les mêmes résultats.

Dr.Vince
23/01/2006, 15h46
et bien j'ai du mal à te croire !!!
car j'utilise exactement ce code et ça marche nickel

Envoies tes sources et j'y jetterais un coup d'oeil

N64Francois
23/01/2006, 15h57
Merci, je t'envoie mon projet par mail...

N64Francois
24/01/2006, 08h41
Dr.Vince a trouvé pourquoi cela ne marchait pas ^^

J'utilisais la fonction rand() au lieu de la fonction ham_Rand()
Deplus, il y avait 2-3 erreurs dans mon code (Merci Dr. !!!)

Mon projet est presque terminé, je pense que je posterai un topic sur celui-ci cette semaine.

Dr.Vince
24/01/2006, 12h22
Pense à ajouter du son à ton projet, car ça change un jeu le son :)