11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai un code qui utilise de l'aléatoire et je ne suis pas sûre qu'il fonctionne à 100%, quel genre de test je pourrais utiliser ?

Voici le code :

var tab=new Array ("eau", "banane", "pot_entier", "pot", "couvercle", "orange", "conserve", "carton_sale", "carton_propre", "canette", "verre", "huile", 
					"polystyrene", "papier_sale", "papier_propre"),
	div_dechets=document.getElementById("dechets"),
	button=document.getElementById("button"),
	pile=new Array ();
					
/*fonction qui gère la rétrocompatibilité*/
function addEvent(element,event,func,bool)
{
	bool=bool||true;
	element.addEventListener? element.addEventListener(event,func,bool):element.attachEvent('on'+event,func);/*P.A.N./F.O.B.*/
}

function changeClass(number)
{
	div_dechets.className=tab[number];
}

function remplirPile()
{
	for(var i=0; i<20;i++)
	{
		pile.push(Math.floor(Math.random() * 15)) 
	}
}

function suivant()
{
	if(pile.length==0)
	{
		remplirPile();
	}
	if(div_dechets.className=="papier_sale")
	{
		pile.push(Math.floor(Math.random()*2+13));
	}
	if(div_dechets.className=="pot_entier")
	{
		pile.push(3);
		pile.push(4);
	}
	changeClass(pile.pop())
}

addEvent(button, "click", suivant);


Est-ce utile de mettre le reste du code ? (ie HTML et CSS)

Merci d'avance

Bonne soirée

Edit Je viens de me rendre compte d'un problème : si on retourne la feuille sale et qu'elle est aussi sale au verso, ça reprend dans le if... Donc comme si on sortait plusieurs feuilles à la suite (ou qu'on retournait la même plusieurs fois...) : help ? ^^

Edit 2 : J'ai tenté de modifier le code ainsi mais ça ne va toujours pas Smiley ohwell please ?
function suivant()
{
	var retourne=false,
		vu=false;
	if(pile.length==0)
	{
		remplirPile();
	}
	if (!retourne)
	{
		if(div_dechets.className=="papier_sale")
		{
			pile.push(Math.floor(Math.random()*2+13));
			retourne=true;
		}
	}
	if(div_dechets.className=="pot_entier")
	{
		pile.push(3);
		pile.push(4);
	}
	changeClass(pile.pop());
	if(retourne)
	{
		if(vu)
		{
			retourne=false;
			vu=false;
		}
		else
		{
			vu=true
		}
	}
}

Modifié par Ccile13 (30 Dec 2013 - 20:10)
Bonsoir,

Si je comprend bien, tu veut, comme dans un jeu de carte, les tiré au hasard jusqu’à, éventuellement la dernière.
Pour cela, il te faut vider ton array() au fur et à mesure des tirages ou si tu veut pouvoir evoluer vers un scenario plus complexe (genre extrait du tableau pendant au moins 3 tirages et maxi 6) créer un tableau avec clé => valeur, de façon a lier une image/nom de class avec une variable exploitable. Par exemple comme un chiffre où
0 serait : 'peut-être tirer' , donc je prend et je met a 1 ou plus.
1 serait 'dejà pris' , en réinitialisant tout a 0 arrivé au dernier élément du tableau.
ou 1 et plus, serait un chiffre à décrémenter à chaque tirage qui dit 'déjà pris, pas touche pour le moment , passe à la suivante ! ' Smiley smile .

Ton array() modifié au fur et à mesure des tirages peut aussi être stocker dans un cookie.

Pour la méthode à abordé en JavaScript pour ton tableau, je ne saurais t’en conseillé une , d'autres ici le sauront. Sinon , quelques liens : http://www.quirksmode.org/js/associative.html et http://stackoverflow.com/questions/1144705/best-way-to-store-a-key-value-array-in-javascript
++
Bonsoir,

Désolée mais je ne sais pas si c'est l'heure (et la fatigue) mais je n'ai rien compris ^^

Que j'explique alors ce que je veux : indéfiniment (du moins pour l'instant et jusqu'à ce que la page soit fermée) quand on clique sur lancer, un nouveau déchet apparaisse (ça peut être la même image que précédemment, même si les chances sont faibles (1/15 sauf erreur)) aléatoirement, sauf quand c'est un papier sale, là c'est forcément un papier qui suit (on le retourne pour voir le verso) ou un pot avec couvercle, là c'est le pot puis le couvercle (ou l'inverse) (on a dévissé le couvercle).

Ma question initiale, c'était comment être sûr que le hasard ne semble pas fausser les tests : ce n'est pas parce que 10 fois sur 10 le pot avec couvercle est suivi du couvercle puis du pot que le code fonctionne (probabilité très faible certes, mais à quel point ça suffit ? sachant que je suis une matheuse, je préfère la certitude absolue...).

Ma question suivante, après réflexion et tests : si je tombe sur un papier sale, je le retourne pour voir s'il est aussi sale au verso (dois-je le mettre au brouillon ou à la poubelle ?). Si c'est le cas, avec mon code, je retombe au coup suivant sur un papier (propre ou sale) chose que je ne veux pas (puisque ça n'a pas de logique dans le jeu, qui est le tri des déchets...), et si ce papier est encore sale, ça recommence jusqu'à l'obtention d'un papier propre... Comment faire ??

Par rapport à ce que tu as dit, je n'ai pas compris l'idée des cartes... ni du cookie (pourquoi un cookie ??). Sinon, le clé valeur, c'est pas l'idée d'une table de hachage ?

Sinon, pour les liens, je les lirais plus tard... pas les idées assez claires pour de l'anglais Smiley ohwell

Merci encore

Edit : je ne veux pas utiliser de jquery ^^ mais merci Smiley lol
Modifié par Ccile13 (30 Dec 2013 - 23:46)
Ccile13 a écrit :

Par rapport à ce que tu as dit, je n'ai pas compris l'idée des cartes... ni du cookie (pourquoi un cookie ??). Sinon, le clé valeur, c'est pas l'idée d'une table de hachage ?

oui, en stockant une valeur , tu peut la tester et déterminer l'action à effectuer, le cookie, et bien , c'est une façon simple de retrouver une valeur même en rechargeant la page ...
Ccile13 a écrit :

Edit : je ne veux pas utiliser de jquery ^^ mais merci Smiley lol

il ne s'agit pas de jquery justement, juste javascript

Apparemment je n'ai pas compris non plus ce que tu voulais
Bonjour,

Les cookies ne m’intéressent pas non plus, je ne veux pas que les données soient conservées au rechargement de la page (pas celles-là en tout cas).

Pourquoi aurais-je besoin d'une table de hachage ?

Et sur un des liens, ils parlent de jquery (bon j'ai survolé donc j'ai pas fait trop gaffe).

Bon, avec tous ces malentendus, mon problème n'est toujours pas résolu Smiley ohwell quelqu'un ?

Merci d'avance et bon réveillon à tous
Bonjour,

Bonne année à tous. J'ai trouvé la raison du problème deux, les variables étaient internes.

Mais toujours rien pour l'aléatoire... Comment savoir que ça fonctionne bien ?

Merci
bonne année à tous,

je reviens sur ton post (en souhaitant toujours qu'un develloppeur intervienne Smiley smile ).

Pour ce qui est de Math.random(), ça fonctionne forcement.

... Pour le tirage des cartes, change le mot carte par dechets, et comme tu le dis tu ne souhaites pas les retirer de la pile.

Pour le scenario que ton script doit suivre je suis pas convaincu de ton approche,
j'en reste a l'idée de clé=>valeur, afin de maitriser les associations possibles en amont plutôt que de s'appuyer sur de multiple if , d'autant que c'est toi qui détermine statiquement les objets (déchets) en créant un tableau, en gros avec un tableau associatif tu détermines dés le départ les pairs et donc les règle du jeux en quelque sorte, enfin , ce serait mon approche d’intégrateur amateur Smiley smile

Voici l'idée de base avec un tirage aléatoire dans ton tableau associatif http://codepen.io/gc-nomade/pen/tFHzx =>clique sur le déchet .

Ce n'est pas la solution, j'ai juste repris le dernier codepen sans incorporer de bouton, ni tester la valeur de obj[ key ] pour relancer ou pas, la même fonction sur onclick.

Maintenant , ce serait bien qu'un développeur intervienne pour t'aider Smiley smile

++