Chemin de trouver dans un jeu Java 2D?

voix
6

Essentiellement un jeu de son clone de Pacman je travaille. J'ai une classe ennemie, et 4 instances de cette classe créée qui sont tous des 4 fantômes du jeu.

Tous les fantômes de démarrage dans des zones aléatoires de l'écran, puis ils doivent se frayer un chemin vers le personnage de Pacman. En tant que joueur contrôle le pacman, la déplacer, ils devraient le suivre et prendre le plus court chemin possible vers lui.

Il n'y a pas de labyrinthe / obstacles (encore) de sorte que la carte entière (400x400 pixels) est une terre ouverte.

Pour le joueur et chaque fantôme, je peux récupérer le X, Y, largeur de l'image et les attributs de hauteur. De plus, je dispose déjà d'un algorithme de détection de collision, donc pas inquiet à ce sujet, à peu près les fantômes trouver leur chemin à Pacman.

Créé 08/03/2009 à 06:14
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
0

Vous pouvez commencer à regarder A * (une étoile)

Et voici une page qui a des liens vers d' autres algorithmes de recherche de chemin.

[modifier] Gah ... cerveau est trop lent ... oublié ce livre, il est C ou C ++ (je ne sais plus quel), mais vous pouvez toujours obtenir les concepts pour Java. Il ne peut pas être le plus facile pour vous de lire, mais pas mal dans l' ensemble. AI pour les développeurs du jeu par David M. Bourg, Glenn Seemann .

Créé 08/03/2009 à 06:17
source utilisateur

voix
12

Pour un bon algorithme de pathfinding, en utilisant A * serait probablement une bonne idée, cependant, pour un jeu simple qui ne nécessite pas de chemin sophistiqué, efficace, ni efficace la recherche, ayant simplement les personnages se déplacent vers une cible en trouvant la direction de la cible devrait être suffisant.

Par exemple, la décision de faire bouger le personnage, en pseudo-code:

if (target is to the left of me):
    move(left);
else
    move(right);

if (target is above me):
    move(up);
else
    move(down);

Oui, le personnage ne va pas faire le mouvement le plus efficace, mais il se rapproche de la cible à chaque itération de la boucle de jeu.

Il est aussi je pense qu'un jeu d'arcade du début des années 80 ne serait probablement pas en utilisant des algorithmes sophistiqués de pathfinding.

Créé 08/03/2009 à 06:25
source utilisateur

voix
6

Si vous avez juste une grille de pixels - un « grand champ » sur lequel Pacman et fantôme peut se déplacer librement - alors le chemin le plus court est facile - une ligne droite entre le fantôme et le Pacman.

Mais « chemin le plus court » signifie invariablement que nous essayons de résoudre un problème théorie des graphes. (Je suppose la connaissance des graphiques, une théorie des graphes, adj. Matrices, etc!)

Dans le cas ci-dessus, considérer chaque pixel à un nœud sur un graphique. Chaque noeud est relié à ses voisins par un bord, et chaque bord présente égal « poids » (déplacement vers le noeud sur « au-dessus » est pas plus lent que le déplacement vers le noeud « en dessous »).

Vous avez donc ceci: ( "*" = nœud, "-, /, \, |" = bord)

*-*-*
|\|/|
*-*-*  ... (etc)
|/|\|
*-*-* 

Si Pacman est au centre, il peut se déplacer à un autre nœud très facilement.

peut-être quelque chose de plus proche de la réalité ceci:

*-*-*
| | |
*-*-*  ... (etc)
| | |
*-*-* 

Maintenant, Pacman ne peut pas se déplacer en diagonale. Pour aller du centre vers le coin inférieur droit nécessite 2 « houblon » au lieu d'un.

Pour continuer la progression:

*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*

Maintenant, pour passer d'un noeud au milieu d'un nœud au sommet, vous avez besoin 3 sauts. Cependant, pour se diriger vers le seul fond prend 1 hop.

Il serait facile de traduire une configuration plateau de jeu dans un graphique. Chaque « intersection » est un nœud. Le chemin entre deux intersections est un bord, et la longueur de ce chemin est le poids de ce bord.

Entrez A *. En construisant un graphique (utiliser une matrice adjency ou une liste de nœuds), vous pouvez utiliser l'algorithme A * pour trouver le chemin le plus court. D'autres algorithmes comprennent Dijkstra. Et plein d'autres! Mais d'abord vous devez encadrer votre problème en termes d'un graphique, puis jouer avec la façon dont vous iriez du noeud A (Pacman) au noeud B (fantôme).

J'espère que cela pourra aider!

Créé 08/03/2009 à 06:55
source utilisateur

voix
0

Je pense que le plus court pour aller algorithme de chemin à chaque mouvement fait par pacman. Une très bonne mise en œuvre est l'algorithme de Dijkstra .

Pour résumer: le labyrinthe Visualise comme un graphe dont les sommets et les arêtes. Chaque bord a une attente (dans votre cas, tous les bords ont même poids). L'algorithme trouve le plus court chemin de vertice de source vers la cible vertice en déplaçant une étape vers le bas de chaque bord accessible immédiat. Ensuite, la prochaine Vertice vous faire la même chose et que vous continuez à faire jusqu'à ce que d'obtenir à la cible. Le premier chemin atteint est le plus court chemin. Il peut y avoir de nombreuses optimisations effectuées à cet algorithme pour accélérer les choses comme prendre en compte lorsque l'pacman était dans sa position précédente et dans quelle direction il déplacé de sorte que vous pouvez obtenir des heiristics dans l'algorithme. Je suggère de trouver le chemin le plus court de chaque fantôme à Pacman sur chaque mouvement et déplacer le fantôme dans cette direction. Finalement, la distance réduira et vous serez en mesure d'attraper Pacman.

Une autre heuristique qui peut être utilisé pour trouver tous les abords immédiats de pacman accessibles et essayer de couvrir le plus grand nombre de ces sommets que possible par des fantômes. Ainsi, au lieu de mettre en pacman comme Vertice cible nous avons fixé les sommets immediatetly accessibles par pacman comme cible, le résultat sera que les fantômes disponibles vont essayer de couvrir themajor voies d'évacuation de Pacman et l'attraper.

Créé 08/03/2009 à 08:26
source utilisateur

voix
3

Il a été très longtemps, mais de la mémoire des fantômes dans Pac-Man n'a pas fait grand-chose dans la façon de pathfinding. Ils feraient un labyrinthe aléatoire assez standard traversal jusqu'à ce qu'ils « repérés » vous, ce qui implique de trouver un chemin sans obstacle le long de l'axe d'un couloir vers vous, puis ils se déplaçaient directement vers vous jusqu'à ce que vous avez disparu de leur ligne de mire, après quoi ils reprendrait un motif aléatoire. Sur des niveaux plus élevés Pac-Man laisserait des sentiers invisibles derrière lui pendant un certain temps que les fantômes se « sentir » et parfois suivre.

Lorsque Pac-Man a une mise sous tension, la seule différence dans l'algorithme est que, quand ils vous ont repéré, les fantômes ne vous fuir au lieu d'aller vers vous.

Ainsi, pour une expérience authentique, vous n'avez probablement pas besoin d'un algorithme de pathfinding très sophistiqué du tout. Si vous voulez être de fantaisie, bien sûr, vous pouvez mettre en œuvre A *.

Créé 10/03/2009 à 09:11
source utilisateur

voix
2

Marcher directement vers vos ennemis est un début, mais lorsque vous ajoutez un labyrinthe que vous aurez envie d'ajouter un peu plus intelligent pathfinding afin que vos fantômes ne sont pas coincés dans les virages ou des impasses.

Le tutoriel suivant est un excellent guide léger pour commencer avec A *, avec des exemples téléchargeables.

Carte basée sur le chemin de trouver sur le carreau

Créé 12/03/2009 à 13:42
source utilisateur

voix
1

Pacman tous le fantôme avait un algorithme de ciselure différent

  • Blinky -> Poursuites. Habituellement prendre pour vous le plus court chemin, et tend à suivre.
  • Pinky -> Embuscades. Tend à prendre de façon plus rond-point à pac-man. Mortel. (Petit doigt et Blinky ont tendance à faire des choix différents au moment de choisir une direction, Confiner souvent le joueur dans un coin)
  • Inky -> Freak. Ce mec se comporte bizarrement. Il se déplace sur le bord assez au hasard, mais parfois quand il pourchasse obtient à proximité.
  • Clyde -> Imbécile. Au hasard se déplace. Pas grand-chose d'une menace.

Les fantômes ont un modèle intéressant programmé dans leurs mouvements: de temps en temps, ils en même temps cesser leur poursuite de Pac-Man et retourner dans leurs coins respectifs du labyrinthe, entrer dans « le mode de diffusion ».

il y a une description complète de l'algo au dossier de pacman

Cordialement

Guillaume

Créé 10/04/2009 à 15:59
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more