CHERCHOBJET

Marmotte86 Messages postés 34 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 9 août 2007 - 11 juil. 2005 à 20:50
astron35 Messages postés 16 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 3 mars 2007 - 1 mars 2007 à 20:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32631-cherchobjet

astron35 Messages postés 16 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 3 mars 2007
1 mars 2007 à 20:14
Super !Bravo! Génial !!!!! ;)
mySQL15 Messages postés 79 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 28 août 2010
15 août 2006 à 15:15
10 sur 10 rien que pour l'idé génial !
cs_peter1789 Messages postés 35 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mai 2006
29 juil. 2005 à 11:55
Merci marmotte86 de m'avoir signalé cette erreur ! Je te dois la mise à jour de mon script ;)
Bonnes vacances et à bientôt !
Marmotte86 Messages postés 34 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 9 août 2007
20 juil. 2005 à 16:11
Super, on peut maintenant un peu jouer sur IE :)

Encore un petit bug (mais tres vite réparé...)
aux lignes 81 et 82, on voit le choix aléatoire des cases pour objets à trouver... je ne pense pas me tromper jusque la :
i = Math.floor(Math.random()*7.99);
j = Math.floor(Math.random()*7.99);

Continuons... la ligne 83 permet de ne pas placer deux objets dans la meme case.
Le problème, c'est le "7.99" qui se trouve aux lignes 81 et 82 : ces valeurs sont pour la taille par défaut du tableau, mais pas si on a modifié la taille.

Je m'explique : Essaye de mettre un tableau de 5x5 cases, tu as toutes les chances pour que ton navigateur te sorte une erreur du style :
"'cases[...]' a la valeur Null ou n'est pas un objet."
C'est tout simplement parce que la case choisie pour l'objet etait dans les lignes ou colonnes 6, 7 ou 8, et que ces lignes et colonnes n'existent pas dans un tableau de 5 cases.
Il faut juste remplacer les lignes 81 et 82 par :
i = Math.ceil(Math.random()*largeur)-1;
j = Math.ceil(Math.random()*hauteur)-1;
et le problème est réglé ;) les cases ne vont plus aller dans des lignes ou colonnes inexistantes. Le ceil donne l'entier directement supérieur à la valeur trouvée, et le -1 permet donc d'avoir des valeurs à partir de 0... et de ne pas dépasser la taille.
PS : Ce problème surgissait aussi si on ajoutait des lignes et colonnes au tableau... dans ce cas, les objets etaient seulement dans les 8 premieres lignes ou colonnes, il etait donc inutile de chercher plus loin, et si par malheur on mettait plus de 64 objets a trouver, le code partait dans une boucle infinie !
Une fois les 64 premiers objets placés dans les 8 premieres lignes et colonnes, la limite du 7.99, toutes les cases etaient prises, et les objets suivants n'avaient plus de place (voici donc le "bug" de la ligne 83, corrigé en partie par la correction des lignes 81 et 82...)

J'espere que tout le monde me suit, ce n'est pas toujours tres clair quand je corrige en ecrivant le commentaire :(

Un dernier petit truc sur la ligne 83 : ce n'est pas un bug a proprement parler, mais ca peut durer longtemps si le navigateur a la mauvaise idée de choisir toujours les memes nombres avec sa fonction random... c'est vrai que ce ne serait pas de chance non plus. dans ce cas, le problème de la boucle infinie revient.
sans chercher beaucoup (et ce n'est certainement pas une bonne idée, mais c'est celle qui me vient a l'esprit), on pourrait faire un tableau dans lequel on classerait aléatoirement les numéros de cases du tableau de jeu. il faudrait donc un tableau contenant toutes ces coordonées : le tableau contient une liste de petits tableaux contenant chacuns 2 valeurs. on range ensuite aléatoirement ces petits tableaux de 2 valeurs aléatoirement dans un nouveau tableau. on prend ensuite les x premieres valeurs du deuxième tableau pour placer les objets.

Pour placer aléatoirement les valeurs dans un tableau, on prend une valeur que l'on met dans la derniere case du deuxième tableau, et on la remplace dans le premier tableau par la derniere valeur de ce tableau, et on recommence en prenant les valeurs restantes (donc toutes sauf la derniere)... ca se fait facilement avec une boucle :
for(i=nbcases;i>0;i--){
choix=math.ceil(math.random()*i);
tableau2[i]=tableau1[choix];
tableau1[choix]=tableau1[i];
}
on evite donc le problème de la boucle infinie, mais c'est surement inutile ici.
cs_peter1789 Messages postés 35 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mai 2006
20 juil. 2005 à 15:04
PS : le code a été mis à jour tout de suite, ce qui veut dire que les admins ont corrigé l'erreur...
@+
cs_peter1789 Messages postés 35 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mai 2006
20 juil. 2005 à 15:00
Voilà j'ai corrigé mais la mise à jour du site bugue donc ce n'est pas encore visible... En tout cas merci pour votre aide et à bientôt !
Amicalement, peter1789
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
19 juil. 2005 à 13:02
en fait, je pensais faire un onclick "en dur", directement dans le code html, mais vers une autree fonction que nous nomerons clicker();
tu lui mets comme paramètre les numérots de ta case, et cette fonction va lire un tableau pour savoir si elle doit appeler la bonne fonction...

comme ça, plutot que de faire un setatribute, tu fais une écriture dans le tableau...
cs_peter1789 Messages postés 35 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mai 2006
19 juil. 2005 à 12:56
Bonjour à tous !
à coucou747 : je ne comprends pas ta solution, pourrais-tu être plus explicite ou/et l'illustrer ?
à nezdeboeuf62 : J'ai essayé ta solution mais elle ne marche pas : en effet, quelle que soit la case où on appuie, la fonction se déclenche toujours pour la même case (la dernière crée) !

Merci d'avance pour votre aide et @ bientôt !
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 juil. 2005 à 13:34
tu peux mettre un onclick d'office qui renvoi vers une autre fonction, et tu fais un tableau qui lui fera appeler la bonne fonction si elle le doit (true) ou non (false)
cs_nezdeboeuf62 Messages postés 43 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 décembre 2006
18 juil. 2005 à 12:11
essaye ça :
choix.onclick = function() {verif(m,n,num);}
(j'ai rien tester du tout...)
cs_peter1789 Messages postés 35 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mai 2006
18 juil. 2005 à 11:18
Bonjour coucou747 et Marmotte86 !

Tout d'abord, merci pour votre aide précieuse : grâce à vous, mon code est PRESQUE compatible avec IE ! Cependant, il y a un problème : vu que
choix.setAttribute("onclick","verif("+ arg1 +","+ arg2 +","+ arg3 +")");
ne marche pas sous IE, j'ai essayé
choix.onclick = verif;
l'appel marche bien, mais je ne peux pas mettre d'arguments ! par exemple,
choix.onclick = "verif("+ m +","+ n +","+ num +")";
OU
choix.onclick = "verif(m,n,num)";
OU
choix.onclick = verif(m,n,num);
ne fonctionnent pas !
Avez-vous une idée...
Merci d'avance :)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 juil. 2005 à 01:34
head contre body, ça peut faire une incompatibilitée IE... c'est ce qui me posait problème pour toutes mes sources légèrement OO...

IE à 95 % ??? c'est sèrieux ? perso, j'en étais resté à geecko 35% alors IE 95, t'as chopé ça sur un site pro microsoft... Incomatible gecko...

sinon, il y a des expregs, rien de crade, mais ça reste un petit bout de code de même pas 200 lignes et les expressions régulières ne sont pas complexes, il n'y a rien d'OO, donc niveau expert est discutable...

ça reste quand même bien mieux que la majoritée des sources exposées ici, c'est très bien codé...
je n'avais encore jamais vu de véritable gestion de formulaires en entrées et sorties en js, bien joué !
Marmotte86 Messages postés 34 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 9 août 2007
13 juil. 2005 à 23:57
Ca ne fonctionne toujours pas sur IE...
Il semblerait que l'appel des objets par leur nom ne fonctionne pas...
Vu que je suis un pau fatigué, je chercherai ca demain ;)

Pour le code, c'est pas mal, mais il est surement mieux de placer la partie de javascript ou tu fixe toutes les variables et les fonctions dans le <head> plutot que dans le , et vu que ton tableau est affiché dans une
, ce serait peut plus simple de l'afficher par une fonction appelée par l'événement onload de la page... ca permet de grouper le plus possible de javascript hors du .

PS : Si ce que je dis n'est pas utile, voir génant pour le code, il ne faut pas hésiter a me le dire, mais j'ai toujours fait comme ca.
Marmotte86 Messages postés 34 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 9 août 2007
13 juil. 2005 à 23:48
J'ai oublié un truc... le .firstChild., faut le rajouter A CHAQUE FOIS que tu as besoin d'appeler ton tableau... pas seulement à la création.
Marmotte86 Messages postés 34 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 9 août 2007
13 juil. 2005 à 23:45
j'ai trouvé le problème d'affichage qui intervient dans IE : La balise Table contient un TBODY des sa création (fais un alert(document.getElementById("tableau").innerHTML) au début du script, tu verras...). Il faut donc créer le tableau DANS cette balise, et pas APRES.

Tu dois donc ecrire :
document.getElementById("tableau").firstChild.appendChild(rangee);
pour placer les lignes et colonnes dans la balise tbody (le corps du tableau).

Je n'ai pas encore testé le fonctionnement, mais maintenant que ca s'affiche, ca devrait etre bon.

Au passage, quand on dit qu'IE ne respecte rien... sur ce coup la, il n'affiche pas ce qui ne doit pas etre affiché :)
Marmotte86 Messages postés 34 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 9 août 2007
13 juil. 2005 à 23:10
Merci beaucoup, c'est beaucoup plus clair comme ca :)

Je vais essayer de trouver pourquoi le tableau ne s'affiche pas sur IE, mais c'est quand même bete d'ignorer IE, car d'apres des etudes assez récentes, il y a encore pres de 95 % d'utilisateurs qui fonctionnent avec IE... meme si les commentaires laissés en faveur des autres navigateurs laissent penser le contraire !
cs_peter1789 Messages postés 35 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mai 2006
13 juil. 2005 à 21:36
Voilà les commentaires sont là :D
abder005 Messages postés 1 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 12 juillet 2005
12 juil. 2005 à 21:57
Difficile de trouver les "objets cachés" ni d'ailleurs le "tableau" puisque rien n'est affiché en dehors du chrono!!! au moins sous IE.
Marmotte86 Messages postés 34 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 9 août 2007
11 juil. 2005 à 20:50
Un petit truc : pour tes codes (que tu veux reprendre plus tard ou pas), et encore plus si tu les diffuse => COMMENTAIRES !!!
Je n'ai pas passé beaucoup de temps sur ton script à chercher pourquoi les cases ne s'affichent pas sur IE, d'une part parce que je n'ai pas beaucoup de temps, mais surtout parce que c'est quasiment impossible de trouver facilement où se fait cet affichage sans commentaires...

Je n'ai donc pas pu le tester sous IE.
Rejoignez-nous