Javascript / boucle infinie dans ma fonction.

Résolu/Fermé
Angy - 30 août 2010 à 17:00
 Angy - 31 août 2010 à 08:49
Bonjour,



J'essaie de réaliser un petit jeu de cartes.

Je laisse au joueur le choix entre 4 decks de cartes différents : 32, 52, 64 ou 104 cartes via 4 boutons affichés à l'écran.
Une fois le deck choisi je dois mélanger les cartes de celui-ci pour créer un deck avec cartes aléatoires.

Pour cela j'ai créé la fonction suivante qui, en fonction du "DeckChoisi", va prendre aléatoirement chacune des cartes du tableaux "TabBanqueDeckx" (avec x le deck choisi :32/52/64/104) pour ensuite les replacer dans le "TabCartesMelangees" (le deck tout mélangé).

Mon problème est le suivant : je rencontre une boucle infinie avec "DeckChoisi=64" et "DeckChoisi=104" mais pas avec "DeckChoisi=32" ou "DeckChoisi=52".



Quelqu'un voit ce qui cloche ?
Après 2 bonnes heures de recherche je commence vraiment à désespérer :-/



function MelangeCartes ()
{
	TabCartesMelangees=new Array ();




	if(DeckChoisi==32)
	{
		for (var i=0;i<DeckChoisi;i++)
		{
			var e=parseInt(Math.random()*DeckChoisi);
			for (var v=0; v<DeckChoisi;v++)
			{
				while (TabCartesMelangees[v]==TabBanqueDeck32[e])
				{
					v=0;
					e=parseInt(Math.random()*DeckChoisi);
				}
				q=e;
			}
			TabCartesMelangees[i]=TabBanqueDeck32[q];
		}	
	}
	if(DeckChoisi==52)
	{
		for (var i=0;i<DeckChoisi;i++)
		{
			var e=parseInt(Math.random()*DeckChoisi);
			for (var v=0; v<DeckChoisi;v++)
			{
				while (TabCartesMelangees[v]==TabBanqueDeck52[e])
				{
					v=0;
					e=parseInt(Math.random()*DeckChoisi);
				}
				q=e;
			}
			TabCartesMelangees[i]=TabBanqueDeck52[q];
		}	
	}
	if(DeckChoisi==64)
	{
		for (var i=0;i<DeckChoisi;i++)
		{
			var e=parseInt(Math.random()*DeckChoisi);
			for (var v=0; v<DeckChoisi;v++)
			{
				while (TabCartesMelangees[v]==TabBanqueDeck64[e])
				{
					e=parseInt(Math.random()*DeckChoisi);
					v=0;
					
				}
				q=e;
			}
			TabCartesMelangees[i]=TabBanqueDeck64[q];
		}	
	}
	if(DeckChoisi==104)
	{
		for (var i=0;i<DeckChoisi;i++)
		{
			var e=parseInt(Math.random()*DeckChoisi);
			for (var v=0; v<DeckChoisi;v++)
			{
				while (TabCartesMelangees[v]==TabBanqueDeck104[e])
				{
					v=0;
					e=parseInt(Math.random()*DeckChoisi);
				}
				q=e;
			}
			TabCartesMelangees[i]=TabBanqueDeck104[q];
		}	
	}
}





A voir également:

3 réponses

Aaaaarg, personne ne peut m'aider ?! :-(
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 août 2010 à 22:38
parseInt(Math.random()

il me semble que ça te retourne toujours 1 (a verifier)

essayes plutot avec parseFloat
0
Merci Alain_42. Ca plaisir d'avoir eu une réponse.
Cependant non, mon parseInt(Math.random()*DeckChoisi) fonctionne bien : je multiplie le nombre aléatoire puis je le convertie, ainsi je n'obtiens pas que des 1 ;-)

J'ai trouvé d'ou venait mon problème : les tableaux qui me servaient de banques de cartes pour les decks 64 et 104 possédaient en fait 2 fois chacune des cartes sauf que mes algorithmes de pioche aléatoire ne permettaient pas de composer avec des cartes identiques.

Bref, je me comprends ^^, problème résolu.
0