Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gérer les collisions avec le jeu du Snake

    5 octobre 2021 à 18:19:21

    Bonjour à tous,

    J'ai codé une version très basique du jeu du Snake et je n'arrive pas a faire en sort d'annulé une collision. 
    Si par exemple le serpent avance de la droite vers la gauche, et que j'appuie sur la flèche gauche. ( alors il y a une collision que j'aimerai annulé. ) 
    Vous pouvez voir le code entier sur codePen

    Et ci dessous la fonctions qui gère les colissions. 

      //function that deals with ALL the ove outcomes of the Snake
      function moveOutcomes() {
    
        //deals with snake hitting border and snake hitting self
        if (
          (currentSnake[0] + width >= (width * width) && direction === width ) || //if snake hits bottom
          (currentSnake[0] % width === width -1 && direction === 1) || //if snake hits right wall
          (currentSnake[0] % width === 0 && direction === -1) || //if snake hits left wall
          (currentSnake[0] - width < 0 && direction === -width) ||  //if snake hits the top
          squares[currentSnake[0] + direction].classList.contains('snake') //if snake goes into itself
        ) {
          return clearInterval(interval) //this will clear the interval if any of the above happen
        }
    
        const tail = currentSnake.pop() //removes last ite of the array and shows it
        squares[tail].classList.remove('snake')  //removes class of snake from the TAIL
        currentSnake.unshift(currentSnake[0] + direction) //gives direction to the head of the array
    
        //deals with snake getting apple
        if(squares[currentSnake[0]].classList.contains('apple')) {
          squares[currentSnake[0]].classList.remove('apple')
          squares[tail].classList.add('snake')
          currentSnake.push(tail)
          randomApple()
          score++
          scoreDisplay.textContent = score
          clearInterval(interval)
          intervalTime = intervalTime * speed
          interval = setInterval(moveOutcomes, intervalTime)
        }
        squares[currentSnake[0]].classList.add('snake')
      }
    
    • Partager sur Facebook
    • Partager sur Twitter

    Seul on va plus vite, ensemble on va plus loin. 'KawaBunga'

      7 octobre 2021 à 17:03:27

      Hello Tortue_Ninja,

      la collision de ton snake avec lui même se joue à la ligne 10 : 

      squares[currentSnake[0] + direction].classList.contains('snake')

      le remplissage de cette condition déclenche la fin du jeu 

      return clearInterval(interval)

      Je te suggère de renforcer cette condition afin qu'elle ne s'enclenche seulement quand currentSnake[0] + direction est positionné sur un carré contenant ton snake ET quand la direction n'est pas opposé à la direction du snake. De cette manière tu préviens que ton snake prenne une direction opposé à celle qu'il a déjà.

      Bon code,

      Fred

      • Partager sur Facebook
      • Partager sur Twitter
        7 octobre 2021 à 18:47:48

        Merci Fred

        Est ce que c'est le code que tu me suggère et de transformé la ligne 10 de cette façon ? Car ça ne change rien 

        ( squares[currentSnake[0] + direction].classList.contains('snake') && direction !== direction * -1  ) //if snake goes into itself



        -
        Edité par Tortue_Ninja 7 octobre 2021 à 19:07:06

        • Partager sur Facebook
        • Partager sur Twitter

        Seul on va plus vite, ensemble on va plus loin. 'KawaBunga'

          8 octobre 2021 à 18:40:15

          Salut, j'ai déjà codé un snake très sympa l'année dernière, mais je me rappele plus exactement comment j'ai fait.

          Je te passe mon Github, tu y trouveras le code commenté, ca pourra te servir:

          https://github.com/nadfri/snakejs

          https://nadfri.github.io/snakejs/

          -
          Edité par NadfriJS 8 octobre 2021 à 18:40:43

          • Partager sur Facebook
          • Partager sur Twitter

          La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]

          Gérer les collisions avec le jeu du Snake

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown