IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Jeu de plus ou moins avec images


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 13
    Par défaut Jeu de plus ou moins avec images
    Bonjour, je travail actuellement sur la création d'un jeu de plus ou moins contenant des images et de l'audio en utilisant javascript.

    Dans un premier temps tous mes items fonctionnent, l'affichage des valeurs à cliquer, le images plus, moins et gagné s'affichent, les sons s'exécutent, le nombre à trouver est généré...

    Malheureusement, lorsque je clique sur un élément qui va permettre la comparaison, la comparaison s'effectue bien, mais il m'est impossible de relancer le processus de comparaison jusqu'à trouver, le clic sur les éléments ne fonctionne plus et l'affichage qui normalement était centré se retrouve déplacé sur la gauche.

    Bref je suis un peu perdu, la personne pour qui je travaille n'a aucune connaissance dans ce domaine, je m'en remet donc à vous.

    Enfin bon, comme un code source vaut mieux que mille discours je vous laisse ici l'intégralité de celui-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    	//Variables Globales
    	nbChiffres = 21; //sert à l'afffichage des images chiffres
    	nombre = Math.floor(Math.random() * nbChiffres)+1; //Appel d'un numéro au hasard qui servira au jeu
    	emplacement_img = "nombres"; //Nom du dossier contenant les images
    	nbRecup = 8; //valeur a comparer avec le numéro mystère
     
     
    	//Audio
    	var sonGagne = document.createElement('audio');
    	sonGagne.setAttribute('src', 'gagne.ogg');
    	var sonMoins = document.createElement('audio');
    	sonMoins.setAttribute('src', 'moins.ogg');
    	var sonPlus = document.createElement('audio');
    	sonPlus.setAttribute('src', 'plus.ogg');
     
     
    	//Fonctions
     
    	function start() //Fonction comparant la valeur reçue à celle attendu
    	{
    		if (nbRecup > nombre)
    		{
    			//affiche une image représentant le symbole -
    			document.write('<tr><td><img src ="'+emplacement_img+'/moins.gif" width="300" height="300" border="0"></td></tr>');
    			sonMoins.load;
    			sonMoins.play();
    			afficheChiffres();
    		}
    		else if(nbRecup < nombre)
    		{
    			//affiche une image représentant le symbole +
    			document.write('<tr><td><img src ="'+emplacement_img+'/plus.gif" width="300" height="300" border="0" ></td></tr>');
    			sonPlus.load;
    			sonPlus.play();
    			afficheChiffres();
    		}
    		else if(nbRecup == nombre)
    		{
    			document.write('<tr>');//création de cellule de tableau contenant l'image
    			document.write('<td><img src="'+emplacement_img+'/gagne.gif" width="300" height="300" border="1"></td>'); //affichage des images de chaque cartes
    			document.write('</tr>');//fermeture de cellule
    			document.write('</br>Bravo bonne réponse !');
    			sonGagne.load;
    			sonGagne.play();
    			afficheChiffres();
    		}
    	}
     
    	function afficheChiffres()// Boucle d'affichage des nombres en image
    	{
    		k=0;
    		document.write('<table><tr>');//création du tableau
     
     
    		for(i=1; i<nbChiffres; i++)
    		{	
    			document.write('<td><img name = "'+i+'" src="'+emplacement_img+'/'+i+'.gif" width="65" height="65" border="1" onclick="quelclic(this)"></td>'); //affichage des images de chaque cartes	
    			k++;
    			if(k == 8)
    			{
    				document.write('</tr><tr>');
    				k=0;
    			}
    		}
    		document.write('</table>');//fin création du tableau
     
    	}
     
    	function quelclic(elementclicked) //fonction de récupération du chiffre cliqué qui va permettre la comparaison
    	{
    		nbRecup = elementclicked.name;
    		start();
    	}
    D'avance merci pour vos réponses.

    PS : je suis relativement débutant dans ce langage, j'espère que vous ne serez pas trop choqués par mes pratiques ^^.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 132
    Par défaut
    Bonjour,

    Tu es sûr que tout ton code source est là ? Tu n'as pas de fichier HTML ?

    - N'utilise pas d'attribut name pour les balises img mais plutôt un id ou un data-attribute (HTML5).

    - Évite l'usage de document.write : ça peut avoir un comportement bizarre (genre remplacement complet du HTML) et c'est une mauvaise pratique de mettre du HTML dans le javascript. Le code HTML est dans le fichier HTML, en Javascript tu manipules le DOM, la structure de la page.

    - Je n'ai pas bien compris ta boucle while???

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonsoir,

    Citation Envoyé par JérémieL Voir le message
    - Évite l'usage de document.write : ça peut avoir un comportement bizarre (genre remplacement complet du HTML).
    le comportement de document.write n'a rien d'aléatoire, il remplace le code de la page HTML. Supprimer cette méthode du code JS posté résoudra une bonne partie du problème.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 13
    Par défaut
    Trés bien, merci pour toutes ces infos, du coup vous me conseilleriez d'utiliser quelle méthode pour afficher les images ?

    est ce que document.images ferait l'affaire ?

    Et de quelle manière pourrais créer mes tableaux si je n'utilise pas .write ?

  5. #5
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    A lire : Comprendre document.write() en JavaScript

    Alternatives :
    Manipulation du DOM
    Templating Javascript : Par exemple avec Mustache (mais il existe d'autres solutions)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 13
    Par défaut
    Bon alors déja,

    Merci beaucoup pour vos réponses (surtout Kaamo qui m'a bien aidé à progresser )

    J'ai réussi à pas mal avancer, même si c'est pas encore ça (boucle d'affichage qui se répète et que je n'arrive pas à effacer et l'insertion d'élément dans un div qui ne fonctionne pas mais je persévère. Pour les curieux, je fournirais le code source une fois que celui ci sera entièrement fonctionnel

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 132
    Par défaut
    Citation Envoyé par Auteur Voir le message
    bonsoir,

    le comportement de document.write n'a rien d'aléatoire, il remplace le code de la page HTML. Supprimer cette méthode du code JS posté résoudra une bonne partie du problème.
    Je me suis mal exprimé. Le comportement n'est pas aléatoire, il est bien connu. Mais il est inconstant, selon que l'on appelle la méthode avant (dans ce cas-là, le code HTML n'est pas remplacé) ou après la fin du chargement d'une page.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Plus exactement, selon que le document est ouvert ou fermé.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 13
    Par défaut
    En effet, j'ai bien compris tout ça, c'est d'ailleurs pour cette raison que je n'utilise plus cette méthode ^^

    Là je manipule uniquement mon document avec le DOM, mais je n'arrive toujours pas à faire effacer l'image précédente lorsqu'une nouvelle apparaît, c'est asez rageant d'ailleurs car une fois que je saurais faire ça, cela m'ouvrirait pas mal de porte vers des travaux futurs en plus d'en finir avec ce mini jeu.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 13
    Par défaut
    En effet, je n'ai cité que mon code javascript, le javascript étant contenu dans un html, avec les fonctions stockées dans le header et l'appel de la fonction start se situe dans le body.

    Le but de ma boucle while était de faire des tests, mais je n'ai pas vraiment réfléchis, je l'ai supprimée d'ailleurs, n'en tiens plus compte stp (d'ailleurs je vais mettre à jour le code posté).

    Du coup tu me conseilles quoi si je ne fais pas un .write ?

    PS : du coup j'ai remplacé les name par des id pour le moment, je suppose que je vais devoir m'orienter vers du getElementsById ?

  11. #11
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bonjour,

    Il est peu encourageant de répondre à ce genre de demandes, "voici tout mon code, merci de trouver le bug". Tu auras plus de réponses et plus rapidement si tu parviens à isoler le problème à une portion de code plus réduite. Aussi tu ne l'as pas précisé donc j'ignore si tu as le réflexe, as-tu pensé à checker la console Javascript après ton bug ?

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 13
    Par défaut
    Désolé si ma démarche est maladroite.

    En fait je vais t'expliquer mon code,

    j'ai la fonction qui contient les comparaisons entre la valeur récupérée a partir de la fonction (qui elle récupère le nom l'identifiant de l'image qui a été cliquée) et la valeur aléatoire produite par la variable nombre.

    A partir de là selon les conditions remplies, une image et un son sont retournés.

    La fonction quant à elle récupère une suite d'images correspondant à la valeur maximale du nombre aléatoire à piocher pour ensuite les afficher, celles-ci sont ensuite rendues cliquables grâce à leur nom.


    Je viens de tester avec la console javascript (firebug) et en effet, une fois une image cliquée (il se produit en partie ce que je souhaite, c'est à dire que le son se lance et l'image plus, moins ou encore gagné s'affiche, mais les chiffres ne sont pas re cliquables), la console qui au départ affichait le code javascript, affiche par la suite un vide et me dit

    "Pas de JavaScript sur cette page

    If <script> tags have a "type" attribute, it should equal "text/javascript" or "application/javascript". Also scripts must be parsable (syntactically correct)."

  13. #13
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Non, ce n'est pas ça la console Javascript. Là c'est la vue Scripts de Firebug.

Discussions similaires

  1. [Android] Le Bon Nombre: (Plus ou Moins Avec un mode Histoire!)
    Par DeveloST dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 07/02/2015, 23h57
  2. Jeu du plus ou moins avec une fonction récursive
    Par Pimousse22 dans le forum C
    Réponses: 6
    Dernier message: 29/10/2014, 21h26
  3. Jeu du plus ou moins
    Par Tom Dar dans le forum Débuter
    Réponses: 25
    Dernier message: 01/07/2014, 22h51
  4. Jeu de plus ou moins à faire boucler
    Par stachys12 dans le forum Débuter
    Réponses: 7
    Dernier message: 28/08/2013, 21h10
  5. [PHP-JS] case avec plus et moins a coté
    Par budiste dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2005, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo