2015-12-05 2 views
1

J'ai essayé de créer mon propre jeu de dragueur de mines (pour le plaisir) pendant quelques mois maintenant. La seule chose à laquelle j'ai vraiment été arrêté est la façon de rendre la fonction récursive (remplissage) pour remplir les zones vides du jeu.Fonction Javascript flood-fill ne fonctionnant que partiellement [Démineur]

L'inondation ne fonctionne que partiellement. Il ne s'étend pas au noeud droit ou inférieur à partir de n'importe quel noeud cliqué.

Current full code

FloodFill -partie:

function floodFill(node) { 

    if (node < 0) {return}; 

    if (document.getElementById("cell" + node).style.backgroundColor == "white") {return}; 

    if (document.getElementById("cell" + node).classList.contains("nearby")) {return}; 

    document.getElementById("cell" + node).style.backgroundColor = "white"; 

    floodFill(node -= 1);       
    floodFill(node += 1); 
    floodFill(node -= 16); 
    floodFill(node += 16); 

    return 

}; 

floodFill(here); 

Le "ici" signifie le nœud cliqué. La taille de la grille est de 16, donc le nœud inférieur est le nœud actuel + 16.

Ce petit jeu-projet signifie beaucoup pour moi, donc toute aide est grandement appréciée.

+0

J'ai le même problème. Je ne pouvais toujours pas le résoudre. Merci de demander. –

Répondre

1

Les opérateurs -= et += signifient soustraire/ajouter une certaine valeur à la variable.

a += 10; 

est équivalent à

a = a + 10; 

Par conséquent, dans votre code

floodFill(node -= 1);       
floodFill(node += 1); 
floodFill(node -= 16); 
floodFill(node += 16); 

node est en cours de modification sur chaque appel de fonction.

Si node était, par exemple, 10, ce qui suit se passerait-il:

  • node serait décrémenté par 1 (node -= 1) et est maintenant 9
  • floodFill seraient appelés, avec node == 9
  • node serait incrémenté par 1 (node += 1) et est maintenant 10
  • etc.

Au lieu des opérateurs d'affectation (-=/+=), utilisez plutôt les opérateurs normaux (-/+).


Solution: changement

floodFill(node -= 1);       
floodFill(node += 1); 
floodFill(node -= 16); 
floodFill(node += 16); 

à

floodFill(node - 1);       
floodFill(node + 1); 
floodFill(node - 16); 
floodFill(node + 16); 

Hope this helps!

+0

Merci beaucoup! Ça marche! –