[FR] Random [?]

Understanding the language, error messages, etc.

[FR] Random [?]

Postby TheTophux » Fri Dec 30, 2016 9:18 pm

hello,

Apres quelques années a jouer avec des arduino en tout genre je debute avec la gamebuino, je rencontre un petit probleme avec Random.

ma function RandXY est sensée fournir des coordonnées aleatoire, hors je pex l'appeler 50 fois de suite et j'obtien tooujours les memes nombre (49 & 25) ce qui n'est pas tres pratique car l'arrivée se trouve toujours au meme coordonnées :(

je suis preneur de toute idees me permettant de resoudre ce petit probleme

[code]

void Win(){
gb.display.clear();
gb.display.cursorX = 25;
gb.display.cursorY = 0;
gb.display.println("Win :o)");
gb.display.drawCircle(WinXRand, WinYRand, 6);
gb.display.drawCircle(WinXRand, WinYRand, 8);
RandXY();
Decor();
}

void RandXY() {
byte WinXRand = random(6,72);
byte WinYRand = random(6,36);
}


@+

Tophux
TheTophux
 
Posts: 4
Joined: Fri Dec 30, 2016 8:19 pm

Re: [FR] Random [?]

Postby rodot » Sun Jan 01, 2017 12:20 pm

Bonjour,
La fonction random() retourne à chaque fois un nombre d'une série "pseudo" aléatoire (pseudo random numbers). La série va dépendre du nombre initial, qui est défini avec la fonction randomSeed(). Si tu utilise toujours la même random seed, tu tireras toujours la même série de nombre ensuite. C'est pourquoi on défini la random seed une seule fois en début de programme, avec des nombres "aléatoires" pour qu'elle soit différente à chaque fois (lumières ambiantes, timers, niveau de batterie, entrées analogiques...). Il y a d'ailleurs une fonction Gamebuino qui s'occupe de faire un mélange de données arbitraires pour donner la random seeed: gb.pickRandomSeed()

Ce que je suspecte dans ton cas c'est que tu appelle randomSeed dans le déroulement de ton programme et pas seulement une fois au début, du coup la suite de nombre repart toujours de la même seed.
User avatar
rodot
Site Admin
 
Posts: 1290
Joined: Mon Nov 19, 2012 11:54 pm
Location: France

Re: [FR] Random [?]

Postby clement » Sun Jan 01, 2017 12:23 pm

Salut,

la partie de ton code faux :
Code: Select all

void RandXY() {
byte WinXRand = random(6,72); //ici tes variables sont déclarer localement a la fonction. elle ne sont donc pas visible de l'exterieur
byte WinYRand = random(6,36);
}





Code: Select all

//les variables déclarer en dehors seront globales
byte WinXRand = 0;
byte WinYRand = 0;

void Win(){
gb.display.clear();
gb.display.cursorX = 25;
gb.display.cursorY = 0;
gb.display.println("Win :o)");
gb.display.drawCircle(WinXRand, WinYRand, 6);
gb.display.drawCircle(WinXRand, WinYRand, 8);
RandXY();
Decor();
}

void RandXY() {
   WinXRand = random(6,72);
   WinYRand = random(6,36);
}



j'ai pas tester mon code il peux y avoir une erreur de frappe quelque part ;)

J'espere avoir aider :)

a+
clement
 
Posts: 161
Joined: Sat Oct 25, 2014 8:06 am

Re: [FR] Random [?]

Postby TheTophux » Tue Jan 03, 2017 8:43 pm

Salut,

Merci pour les reponses, j'ai peu corriger avec vos deux explications en effet je n'utilise pas randomseed et les variables ete pas correctement declarées

@+

Tophux
TheTophux
 
Posts: 4
Joined: Fri Dec 30, 2016 8:19 pm


Return to Programming Questions

Who is online

Users browsing this forum: No registered users and 14 guests

cron