2009-08-28 11 views
5

Je me demandais, quels sont les algorithmes les plus couramment utilisés pour trouver des modèles dans des jeux de puzzle conformes par des grilles de cellules. Je sais que cela dépend de nombreux facteurs, comme le type de modèles que vous voulez détecter, ou les règles du jeu ... mais je voulais savoir quels sont les algorithmes les plus couramment utilisés dans ce genre de problèmes .. Par exemple, des jeux comme des colonnes, Bejeweled, même Tetris. Je veux aussi savoir si détecter des patterns par "force brute" (comme, scruter toute la grille essayant de trouver trois cellules adjacentes de la même couleur) est nettement pire que d'utiliser des algorithmes particuliers dans des grilles très petites, comme 4 X 4 par exemple (et encore une fois, je sais que cela dépend du type de jeu et des règles ...)Trouver des modèles dans les jeux de puzzle

Quelles structures sont couramment utilisées dans ce genre de jeux?

Répondre

5

Cela dépend toujours du domaine. Mais il y a aussi deux situations où vous feriez ce genre de recherches. La situation des Ones est après un coup (un changement dans le champ de jeu fait par le joueur), et l'autre serait si/quand le plateau entier a changé.

Dans Tetris, vous n'avez pas besoin de scanner la totalité de la carte après la chute d'une pièce. Vous devez juste chercher les lignes que la pièce touche. Dans un jeu de match-3 comme Bejeweled, où vous échangez deux pièces adjacentes à la fois, vous devez d'abord lancer une recherche localisée dans chaque direction autour de chaque case qui a changé, pour voir si des pièces se sont déclenchées. Ensuite, s'ils le font, le jeu déversera de nouvelles pièces aléatoires sur le plateau. Maintenant, vous pouvez exécuter la même recherche localisée autour de chaque carré qui a changé, mais cela peut impliquer beaucoup de déclarations if et peut être plus lent à balayer tout le tableau de gauche à droite en bas à droite. Cela dépend de votre implémentation et nécessiterait un profilage. Comme le dit Adrian, un tableau 2D simple suffit. Souvent, cependant, vous pouvez ajouter une "bordure" de pixels autour de ce tableau, afin de simplifier l'aspect recherche de motifs. Sans une bordure, vous devez avoir des instructions if le long des carrés de bord qui indiquent «bien, si vous êtes dans la rangée supérieure, ne cherchez pas (et éloignez le tableau)».Avec une bordure autour de vous, vous pouvez en toute sécurité chercher simplement à travers tout: vous sauver if instructions, en économisant vous branchez, en économisant vous-même des problèmes de pipeline, en recherchant plus rapidement. Pour Jon: ce genre de choses a vraiment de l'importance dans les réglages de haute performance, même sur les machines modernes, si vous faites un algorithme de recherche pour jouer/résoudre le jeu. Si vous l'êtes, vous souhaitez que votre simulation sous-jacente s'exécute le plus rapidement possible afin de rechercher le plus profondément possible dans les cycles les plus courts.

2

En ce qui concerne les algorithmes: Cela dépend certainement du jeu. Par exemple pour tetris, il suffit de balayer chaque ligne si elle a la même couleur. Je ne peux même pas penser à quelque chose qui ne serait pas égal à l'approche de la force brute dans ce cas. Mais pour la plupart des jeux occasionnels, la force brute devrait être parfaite. La reconnaissance des formes devrait être négligeable par rapport aux graphiques et au traitement du son. En ce qui concerne les structures: Un simple tableau 2D devrait suffire pour représenter le tableau.

0

Compte tenu de la vitesse moyenne de l'ordinateur de nos jours, si c'est en temps réel que l'utilisateur joue au jeu, cela n'aura probablement pas d'importance (EDIT: pour les très petites cartes de jeu uniquement). Certainement, cela dépend de la complexité de la logique du jeu, mais aussi de la vitesse à laquelle le code va s'exécuter sur la machine cible (c'est-à-dire un jeu de page web JavaScript ou une application Windows écrite en C++).

Si c'est pour simuler des stratégies de jeu, utilisez un algorithme plus efficace.

Une stratégie plus efficace pourrait impliquer de garder une trace des changements incrémentiels sur le plateau de jeu, au lieu de re-scanner la totalité du plateau à chaque fois.