2017-03-24 3 views
0

Contexte: Je fais une version du jeu populaire, Snake. Et je rencontre quelques problèmes quand j'essaie d'éviter l'apparition de la nourriture au même endroit des parties de mon serpent.Google Chrome se bloque lorsque mon script est en cours

Je produit le code avec le cadre Phaser:

generateFood: function() { 
     var randomX, randomY; 
     var rightLocation = false; 
     var foodOnSnake = false; 

     while(rightLocation === false) { 
      randomX = Math.floor(Math.random() * (this.game.width/squareSize)) * squareSize; 
      randomY = Math.floor(Math.random() * (this.game.height/squareSize)) * squareSize; 
      foodOnSnake = false; 

      for (var i = 0; i < snake.length; i++) { 
       if (snake[i].x === food.x && snake[i].y === food.y) { 
        foodOnSnake = true; 
        break; 
       } 
      } 

      if(foodOnSnake === false) { 
       rightLocation = true; 
      } 
     } 
     food = this.game.add.sprite(randomX, randomY, 'snake', 15); 
    } 

L'objectif, est de créer des coordonnées aléatoires sur le jeu. Et, tandis que la nourriture est générée sur une partie du serpent (la boucle for), je vais générer d'autres coordonnées. Mais pour une raison inconnue, après que mon serpent est mangé le premier repas, le jeu s'est écrasé et l'onglet de Google Chrome ne répond pas. Je pense qu'il y a une erreur avec une boucle mais je ne la trouve pas.

+0

Vous avez un certain nombre d'objets/variables non déclarés. –

+0

ajouter plus de définitions, en particulier le serpent –

+0

et ici vous exécutez n'importe ce que 'food = this.game.add.sprite (randomX, randomY, 'snake', 15);' - tant que le temps se termine .. –

Répondre

4

Vous comparez les coordonnées du segments de serpent avec food.x et food.y, que vous ne mettez à jour dans la boucle:

if (snake[i].x === food.x && snake[i].y === food.y) { 

Je crois que vous voulez le comparer à randomX et randomY à la place:

if (snake[i].x === randomX && snake[i].y === randomY) { 

Selon la valeur des coordonnées de food, votre fonction lts dans une boucle infinie.

+0

Un des problèmes il semble :) –

+0

Un point de vue externe est souvent la solution, vous avez résolu mon problème. Merci beaucoup :) – Lodec