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 :

Mini jeu en JavaScript , error "to much recursion"


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    autodidacte
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut Mini jeu en JavaScript , error "to much recursion"
    Bonjour, je suis actuellement débutante en dans le développement Web, JS est mon premier langage de programmation ( après HTML et CSS). J'apprend pour le moment en autodidacte, donc j'ai du mal à voir et comprendre mes erreurs.
    J'essaie de crée un mini jeu en JS pour le présenter lors d'un entretient pour une formation ( le but étant de faire cette formation en alternance, donc d'avoir quelques base et quelques projets à presenter également aux entreprise).
    Je suis actuellement bloquer sur mon code, avec l'erreur "to much recursion".
    Le but de mon code est de crée un "jeu de la taupe" ( en gros, des visage apparaissent et disparaissent aléatoirement sur les positions aléatoire, pour une durée de temps aléatoire mais comprise entre deux valeurs, d'augmenter le score lorsqu'on appuie sur un visage, et de crée une fonction pour que le jeu ce finisse )
    J'aurais besoin d'une ame charitable pour m'aider à comprendre où et pouquoi ca bloque exactement...

    Merci par avance

    Voici mes codes HTML/ CSS et JS :
    Code html : 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
    <!DOCTYPE html>
    <html>
     
    <head>
        <title>Whack A Mole!</title>
        <meta charset="utf-8">
        <link href="https://fonts.googleapis.com/css?family=Amatic+SC:400,700" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="style.css">
    </head>
     
    <body>
        <div class="img" style="text-align: center;">
            <img src="Rick_and_Morty_logo.png" width="300px"><br>
            <span class="score">0</span>
        </div>
        <div class="play-img" style="text-align: center;">
            <a><img src="morty.png" style="width: 200px;margin-bottom: -50px;" id="morty-play"></a><br>
            <a id="demo1" style="color: white;font-size: 40px;"></a>
            <a id="demo2" style="color: white;font-size: 40px;"></a>
            <a id="demo3" style="color: white;font-size: 40px;"></a>
        </div>
     
        <div class="game">
            <div class="hole">
                <div class="head"></div>
            </div>
            <div class="hole">
                <div class="head"></div>
            </div>
            <div class="hole">
                <div class="head"></div>
            </div>
            <div class="hole">
                <div class="head"></div>
            </div>
            <div class="hole">
                <div class="head"></div>
            </div>
            <div class="hole">
                <div class="head"></div>
            </div>
        </div>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script src="index.js"></script>
    </body>
     
    </html>

    Code css : 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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    @font-face {
        font-family: "Jungle";
        src: url("dancing_jungle.ttf");
    }
     
    @font-face {
        font-family: "Sch";
        src: url("schw.ttf");
    }
     
    * {
        position: inherit;
    }
     
    html {
        box-sizing: border-box;
        font-size: 10px;
        background-color: black;
    }
     
    body {
        padding: 0;
        margin: 0;
        font-family: Sch;
    }
     
    .score {
        margin-top: 50px;
        color: deepskyblue;
        padding: 0 3rem;
        border-radius: 1rem;
        font-size: 80px;
    }
     
    #morty-play:hover {
        opacity: 0.5;
    }
     
    .play-img a {
        margin-right: 15px;
    }
     
    .game {
        width: 600px;
        height: 400px;
        display: flex;
        flex-wrap: wrap;
        margin: 0 auto;
    }
     
    .hole {
        flex: 1 0 33.33%;
        overflow: hidden;
        position: relative;
    }
     
    .hole:after {
        display: block;
        background: url("ricky.png") bottom center no-repeat;
        background-size: contain;
        content: "";
        width: 100%;
        height: 70px;
        position: absolute;
        z-index: 2;
        bottom: -30px;
    }
     
    .head {
        background: url("rick.png") bottom center no-repeat;
        background-size: 60%;
        position: absolute;
        top: 100%;
        width: 100%;
        height: 100%;
        transition: all 0.4s;
    }
     
    .up,
    .head {
        top: 0;
    }
     
    button {
        display: block;
        margin: 1em auto;
        padding: 1em;
        border-radius: 25%;
        background-color: black;
        color: #fff;
        font-size: 2em;
        font-family: Jungle;
    }

    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
    const clouds = document.querySelectorAll(".hole");
    const scoreBoard = document.querySelector(".score");
    const heads = document.querySelectorAll(".head");
     
    let lastCloud;
    let timeUp = false; // False si pas fini, true si fini
    let score = 0;
     
    function randomTime(min, max) { // Temps aléatoire
        return Math.round(Math.random() * (max - min) + min);
    }
     
    function randomCloud(clouds) { // Selection de nuage aléatoire avec une fonction récursive
        const indexCloud = Math.floor(Math.random() * clouds.lenght);
        const cloudSelect = clouds[indexCloud];
        if (cloudSelect === lastCloud) { // Pas renvoyer le meme nuage qu'avant
            return randomCloud(clouds);
        }
        lastCloud = cloudSelect;
        return cloudSelect;
    }
     
    function showHead() {
        const time = randomTime(1000, 1500); // interval de temps en MS
        const cloud = randomCloud(clouds);
        cloud.classList.add("up"); // .hole.up classe déja existante en CSS. Sert à faire sortir les têtes
        setTimeout(() => {
            if (!timeUp) showHead(); //Fonction récursive
            cloud.classList.remove("up");
        }, time); // exécuter une fonction à partir d'un certain délais
    }
     
    function playerScore(event) { // test de faux click
        if (!event.isTrusted) return;
        score++; // augmenter le score
        this.classList.remove("up");
        scoreBoard.textContent = score;
    }
    heads.forEach(head => head.addEventListener("click", playerScore));
     
    function startGame() {
        scoreBoard.textContent = 0;
        socre = 0;
        timeUp = false;
        showHead();
        setTimeout(() => {
            timeUp = true; // condition d'arret du jeu
            setTimeout(() => {
                scoreBoard.textContent = "end";
            }, 2000);
        }, 10000);
    }
    startGame();

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    essaies avec length à la place de lenght
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //const indexCloud = Math.floor(Math.random() * clouds.lenght);
    const indexCloud = Math.floor(Math.random() * clouds.length);
    Conseil, il te faut regarder dans la console pour voir qui provoque cette erreur, F12.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    autodidacte
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut
    Bonjour,
    Merci d'avoir repéré la coquille.
    Malheureusement même apres correction cela ne focntionne pas ( je regarde systématiquement la console, du plus j'ai tester la syntaxe du code sur different site de correction de syntaxe, et ca n'avais pas été relevé ^^" )

    Actuellement pas de changement (Si ce n'est que la console ne m'affiche plus d'erreur...) : les têtes s'affichent toutes, et en même temps.
    Le score augment bien quand je clique, mais pas forcement que sur les tete ( quand je clique sur la zone du DIV class="game"), sans s'arreter apres un labs de temps donné ( ce qui est le but).

    Peut être y a t'il un probleme au niveau des fonction math?

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Malheureusement même apres correction cela ne focntionne pas
    Ceci est une autre histoire qui n'a rien à voir avec le propos de ta première question


    Peut être y a t'il un probleme au niveau des fonction math?
    pas forcément mais il me semble que tu cibles mal tes éléments.

    Si tu veux que les « head » apparaissent quand les « hole » ont la classe up il te faut écrire le CSS suivant :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .up .head {
       top: 0;
    }
    de plus pourquoi mettre l'écouteur sur les « head », et non pas sur les « hole », en testant la présence de la class up :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function playerScore(event) {
      if (this.classList.contains("up")) {
        score++;
        this.classList.remove("up");
        scoreBoard.textContent = score;
      }
    }
    clouds.forEach(head => head.addEventListener("click", playerScore));
    après tu pourrais également gérer cela via le CSS avec la propriété pointer-events.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    autodidacte
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut
    Infiniement merciiii !!!!!

    Tout fonctionne parfaitement maintenant, merci beaucoup !

    J'ai bien vu ,du coup, l'erreur au niveau du ciblage des élements..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur JS "Internal Error: Too much recursion"
    Par Theoask dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/08/2017, 08h13
  2. Javascript HTML5 et Canvas - mini jeu
    Par mGraph dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 02/12/2015, 00h31
  3. Mini jeu de rôle en php
    Par Sh4dow49 dans le forum Projets
    Réponses: 5
    Dernier message: 23/10/2008, 16h08
  4. mini jeu en construction (débutant)
    Par samy100 dans le forum C
    Réponses: 45
    Dernier message: 23/04/2006, 23h36
  5. Error:Too much global data defined in file
    Par Morosh dans le forum C++
    Réponses: 5
    Dernier message: 24/02/2005, 16h07

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