Bonjour à tous et merci d'avoir prêté attention à cette petite demande d'aide Smiley lol
Je suis en ce moment en train d'essayer de créer un lanceur de dés avec une valeur entre 0 et 100 en JavaScript. J'aimerais qu'à la fin du lancé ma valeur de fonction soit stockée dans une variable que j'ai crée au début pour pouvoir la réutiliser un peu plus tard mais j'ai beau chercher je ne trouve pas de solution...
Je vous pose mon petit morceau de code avec les quelques infos sur ce que j'ai fais:


//Ici j'initialise ma variable "a" à laquelle j'aimerais attribuer la valeur return
var a = 777;

//La je crée mon tableau de nombre à 101 valeur (pour obtenir 0 a 100 dans le tableau)
var tabNbr = [];
for (i = 0; i < 101; i++){
    tabNbr.push(i)
}

//La je crée ma fonction pour piocher un nombre au pif dans mon tableau
var nbrAleatoire = function(nbr){
    return nbr[Math.floor(Math.random() * nbr.length)];
}

A ce moment du code, quand je fais : nbrAleatoire(tabNbr); j'ai bien un nombre au hasard qui s'affiche. Mais après ça, je sèche complètement, je ne vois pas du tout comment stocker la valeur de la fonction dans la variable "a"...

Mon but de ce stockage, c'est de pouvoir mettre une condition par la suite qui dis que si j'ai 0, j'ai une boite d'alerte qui marque "Pas de bol", et si j'ai 100 "Trop de chance!".
J'ai essayé de placer la condition dans ma fonction mais rien a faire, même en tombant sur le bon nombre rien ne s'affiche, please help, je deviens fou et j'ai le cerveau qui commence à fondre Smiley biggol

Ps: Je suis sur JS depuis pas super longtemps, j'ai pas toutes les notions et donc ça serais vraiment super d'avoir de l'aide Smiley smile

Merci d'avoir tout lu et j'espère ne pas m'être trompé de section, car j'ai hésité à mettre dans le forum "JavaScript" Smiley biggrin
Salut,

Pour stocker le retour d'une fonction il suffit d'utiliser le signe égale exactement comme quand tu assignes une valeur à une nouvelle variable :


// declaration d'une fonction
var maFonction = function(a, b) {
  return a + b
}

// futur résultat
var resultat = 0

// appel de la fonction et stockage du résultat
resultat = maFonction(2, 3)

// affiche 5
alert(resultat) 


Dans ton exemple il te suffit de rajouter, à la fin :


// appel de la fonction et stockage du résultat
a = nbrAleatoire(tabNbr)

// affiche le nombre aléatoire
alert(a)

Modifié par Kach (29 Jan 2019 - 02:54)
Bonjour, merci pour la réponse !
J'ai bien compris le principe et j'avoue que je me suis senti bête en voyant la simplicité de la chose... Smiley lol

J'ai donc essayé, et c'est bien nickel sauf a un moment, je vérifie dans ma console la valeur de a, mais elle reste toujours la même (par exemple, mon "a" deviens 47, je relance la function, ça me retourne la valeur au pif du tableau donc parfait mais en réessayant "a", je retombe de nouveau sur 47 et ce même après plusieurs essais Smiley ohwell

en tout cas merci beaucoup pour l'aide apportée Smiley lol
Modérateur
Bonjour,

Ta fonction nbrAleatoire() contient une (petite) erreur. Si Math.random() vaut 1, elle renvoie 101, et comme il n'y a pas d'éléments à l'indice 101 dans ton tableau, elle plantera en essayant d'accéder à cet élément.

Il faut rajouter un test. Si Math.random() retourne 1, alors il faut utiliser 0.999 (au moins 3 chiffres après la virgule) au lieu de 1, sinon, on utilise la valeur retournée par Math.random().

Ceci étant, il y a assez peut de chance que Math.random retourne exactement 1, donc tu dois avoir aussi d'autres erreurs dans ton code. Et si c'est le cas, ça peut expliquer pourquoi à un moment ta variable "a" ne change plus de valeur.

Amicalement,
Modifié par parsimonhi (29 Jan 2019 - 10:39)
Bonjour, merci de la réponse, je vais essayer de voir ça et je retourne vers vous pour vous dire la suite Smiley smile merci beaucoup en tout cas!
Modérateur
Bonjour,

Bon, j'ai dit une bêtise concernant Math.random : la doc dit qu'elle ne renvoie jamais 1, donc pas la peine de tester.

Mea culpa, j'aurais dû vérifier la doc avant de répondre.

Amicalement,
Aaah, c'est pas grave, je n'y ai pas pensé non plus Smiley smile le truc drôle, j'ai vérifier mon code, il y a rien qui cloche (du moins à mes yeux), je vous envoie le code que j'ai (il est assez court):


var a;
var tabNbr = [];
for (i = 0; i < 101; i++){
	tabNbr.push(i)
}
var nbrAleatoire = function(nbr){
	return nbr[Math.floor(Math.random() * nbr.length)];
}

a = nbrAleatoire(tabNbr);


La au tout début, j'initialise ma variable "a" sans aucune valeur pour pouvoir la modifier par la suite, ensuite création de tableau a 101 valeur pour avoir mini 0 et 100 en dernière entrée, la je crée ma fonction qui me retourneun élément au pif sur la longueur du tableau et pour finir je dis que ma variable a est égale au résultat de ma fonction sur le tableau, mais toujours rien Smiley biggol

J'ai aussi essayé de mettre le "a = nbrAleatoire(tabNbr)" dans ma fonction mais la, elle ne fonctionne pas (et c'est logique d'ailleurs, je vois pas pourquoi j'ai testé Smiley lol )

après mon code je l'ai inclus dans une page html que j'ai crée, par contre je sais pas si ça peux jouer, mais je suis sur Sublime text (et mon navigateur Chrome est obsolète car j'ai un pc de secours sous vista Smiley lolol ) en tout cas merci vraiment de bien vouloir aider un débutant qui souhaite progresser Smiley smile
Modérateur
Bonjour,

Voici une page de test qui marche très bien avec ton code (à chaque fois qu'on relance la page, ça affiche une alerte avec la valeur de a, et celle-ci est bien différente à chaque fois) :
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0,user-scalable=yes">
<style>
</style>
</head>
<body>
<script>
var a;

var tabNbr = [];
for (i = 0; i < 101; i++){
	tabNbr.push(i)
}

var nbrAleatoire = function(nbr){
	return nbr[Math.floor(Math.random() * nbr.length)];
}

a = nbrAleatoire(tabNbr);
alert(a);
</script>
</body>
</html>


Amicalement,
Modifié par parsimonhi (29 Jan 2019 - 11:30)
Merci beaucoup, je vais tester ce code Smiley smile de ce que je vois, il faut toujours refresh pour que ça change, donc si ça ne change pas sans refresh c'est normal? Désolé, je galère vraiment Smiley ohwell
Modifié par Hitsuomi (29 Jan 2019 - 11:43)
Modérateur
Bonjour,

Bah, pas forcément.

Voici une page de test qui permet d'afficher un nombre différent à chaque fois que tu cliques sur le bouton "Au suivant".
EDIT: amélioration cosmétique du code.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0,user-scalable=yes">
<style>
</style>
</head>
<body>
<script>
var tabNbr = [];
for (i = 0; i < 101; i++){
	tabNbr.push(i)
}

var nbrAleatoire = function(nbr){
	return nbr[Math.floor(Math.random() * nbr.length)];
}

var magic = function(){
	var a;
	a = nbrAleatoire(tabNbr);
	alert(a);
}
</script>
<button onclick="magic();">Au suivant</button>
</body>
</html>


Amicalement,
Modifié par parsimonhi (29 Jan 2019 - 11:50)
Meilleure solution
Aaaaaaaaah je n'avais pas du tout pensé à l'implémentation d'un bouton, je viens de tester et c'est juste parfait, merci énormément, je vais enfin pouvoir avancer dans mon projet et m'améliorer Smiley lol ! Merci beaucoup et bonne journée à tous!

Cordialement
Modifié par Hitsuomi (29 Jan 2019 - 11:56)