Dans un prototype que je fais, il y a un mini-jeu similaire à bejeweled. En utilisant une grille qui est un tableau 2D ( int[,]
), comment puis-je savoir quand l'utilisateur a formé une correspondance? Je me soucie seulement horizontalement et verticalement.
Du haut de ma tête, je pensais que je ne ferais que regarder chaque direction. Quelque chose comme:
int item = grid[x,y];
if(grid[x-1,y]==item)
{
int step=x;
int matches =2;
while(grid[step-1,y]==item)
{
step++;
matches++
}
if(matches>2)
//remove all matching items
}
else if(grid[x+1,y]==item
//....
else if(grid[x,y-1==item)
//...
else if(grid[x,y+1]==item)
//...
Il semble qu'il devrait y avoir une meilleure solution. Y a-t-il?
Réponses:
Parcourez chaque élément dans le même axe (x ou y), s'ils sont identiques à l'élément précédent, ils incrémentent les correspondances. Lorsque l'élément suivant devient différent, vérifiez si les correspondances sont supérieures ou égales à 3, appelez une fonction qui supprime les éléments correspondants et continuez.
Code AS3:
C'est seulement pour l'axe x, pour y, la grille [col] [i] deviendrait la grille [i] [ligne], etc. Je suis sûr que vous pouvez le comprendre :)
la source
Je pensais juste peser avec notre expérience dans la construction d'un jeu de type match-3.
Nous avons construit un prototype pour un jeu de mots basé sur Match-3, un peu comme mélanger le scrabble et Bejeweled. Nous avons réalisé très tôt que le moteur qui fournit de nouvelles gemmes / tuiles pour remplir les espaces vides devrait être très introspectif (nous exécutons l'heuristique hybride et l'échantillonnage MonteCarlo) afin de créer de réelles opportunités pour un joueur de ficeler des lettres pour former des mots à travers le Mécanicien de match-3. C'est beaucoup plus élaboré que la description mais je suis bref car il faudrait écrire un article.
Pour répondre à l'OP - nous effectuons des vérifications de modèle pour marquer le nombre de correspondances sur un réseau donné, à l'heure actuelle, grâce à une méthode très similaire à l'extrait de code "gladoscc". Bien que cela fonctionne de manière robuste, le coût de calcul pour l'exécution de manière récursive pendant la lecture de la recherche d'arborescence devient une charge substantielle, nous sommes donc en train de réécrire cette partie de la logique et de la représentation des données avec la méthodologie de la carte à bits ( couramment implémenté dans des jeux comme les autres grilles comme les échecs, les dames, Othello, etc.) Dans les tests, nous avons montré qu'il peut fonctionner 20 fois plus rapidement dans ActionScript, et donc pour nous, la nécessité de le faire est un slam-dunk - et libère des cycles essentiels pour la réactivité, le son, l'animation, etc.
la source
Récursivité, yo. C'est pour quand vous ne connaissez pas vos limites.
la source
Vous pouvez utiliser l' algorithme de remplissage d'inondation . C'est vraiment utilisable pour ce type de problème.
la source