8
votes

Pacman Ghost Ai

Je fais actuellement un jeu Pacman à Java. J'ai une question sur les fantômes cependant.

Je comprends que les fantômes n'ont pas tous le même style d'attaque. Je veux d'abord travailler sur les bases d'obtenir le fantôme pour aller après le pacman et ne pas m'inquiéter de ses différences.

Ma question pour vous, les gens intelligents, il y a ce qui serait le meilleur moyen de faire chasser les fantômes le pacman mais parfois des chemins de retour au hasard. J'utilise actuellement un tableau de 21 par 21 2D pour avoir raconté où les murs sont et tels que je pensais que cela vous permettait d'essayer plus d'essayer la localisation actuelle de la grille de Pacman. (Par exemple, aller à 10,14) bien sûr en évitant de passer à travers des murs comme Pacman. Je me demande comment je pourrais faire cela que cela puisse faire cela et que les fantômes s'arrêtent parfois et font une autre direction ou quelque chose de pour que ce ne soit pas toujours une chasse constante et Pacman a la chance de s'en sortir. Peut-être que certains d'entre vous ont programmé un jeu Pacman ou connaissez simplement un bon moyen pour cela. Toute aide serait grandement appréciée.

(Veuillez noter que je suis actuellement dans un cours d'informatique de 11e année et à mi-chemin du premier semestre jamais appris Java.)


3 commentaires

Qu'est-ce que la 11e année, pour ceux d'entre nous qui résistent à l'assimilation par l'anglosaxoborg?


@larsmans C'est un cours de 3ème année au lycée, bien que je suis dans ma 2e année de lycée, j'avais hâte de suivre le parcours.


J'aurais pu voir cela sur votre profil d'utilisateur, bien sûr :)


5 Réponses :



6
votes

3 commentaires

Donc, votre dicton fait de les faire choisir un virage aléatoire de l'intersection pourtant le rendre plus probablement qu'ils vont aller dans la direction de Pacman?


@Fogest exactement. Les valeurs qui empêchent les fantômes de se blumbler, mais gardent le jeu intéressant devraient être déterminées par des expériences (en fonction de la forme du labyrinthe), mais je devinerais 50% de choix aléatoire - 50% de chemin le plus court donneraient des résultats acceptables.


Ok j'aime que j'aime l'idée et très probablement utilisera quelque chose sur les lignes de ce ou @Larsmans.



4
votes

Voici une possibilité: pour toutes les étapes que le fantôme peut prendre, calculer si cette étape le rapprochera de Pacman. Qui peut être fait avec le Distance Manhattan , qui dans une grille 2D est juste la x distance + le y distance. Puis choisissez aléatoirement une étape, avec une probabilité plus élevée attribuée à ces étapes qui le prennent réellement plus proches.

Si vous avez un tableau étapes avec le premier n_clusing_in étapes représentant la Étapes qui prendront le fantôme plus proche de Pacman, vous pouvez alors affecter ces probabilités totales de prob_clusive_in avec xxx

puis distribuera de la même manière Code> total_probabilité sur les étapes qui prendront le fanthérateur plus loin de Pacman. xxx

si le labyrinthe n'est pas trop compliqué et la probabilité de fermer est >. 5 , les fantômes apparaîtront à poursuivre après Pacman, mais de manière au hasard.

relance prob_clusive_in vers rendra le jeu plus difficile.

(tout ce qui précède est non testé et peut contenir des bugs. Je ne suis pas trop bon à Java.)


6 commentaires

Eh bien, vous m'avez un peu perdu là-bas. Je n'ai jamais appris les mesures auparavant.


@Fogest: Je pensais dans le sens de Enum Step {Gauche, à droite, en haut, en bas} .


@Fogest: Je veux dire que vous devriez représenter les étapes possibles d'une manière ou d'une autre. J'ai supposé avoir un type étape pour cela, ce qui pourrait être un Enum ou une classe . Cela n'a pas d'importance, tant que vous avez un moyen de représenter les informations qu'une étape peut être laissée, à droite, en haut ou en bas. Vous pouvez même utiliser un int à cette fin.


Vous voyez que je ne sais pas quelle étape est ou une classe ou un énumé. Jamais appris à ce sujet à ce sujet.


@FOGEST: Ramassez n'importe quel livre sur Java dans votre bibliothèque locale et recherchez des cours. Ils sont assez fondamentaux. (Et je parie que vous devrez apprendre à leur sujet assez bientôt.)


Je vais prendre cela en considération. Ce serait bien si ma bibliothèque d'écoles l'en a aussi.



1
votes

Pour le cours de mon collège AI, j'ai travaillé avec une version plus ancienne du Pacman Ghost Ai Cadre. On dirait que la version actuelle peut être trouvée ici http://www.pacman-vs-ghosts.net / Logiciel (maintenant mort) . Dans ce cas, vous développeriez vos propres agents de fantôme pour essayer de capturer un agent ou un utilisateur contrôlé par l'utilisateur.

C'était très utile pour jouer avec différentes techniques d'IA.

plus à votre question, les niveaux dans ce cadre sont en réalité construits sur un graphique et non un tableau 2D. Vous pouvez regarder le code pour voir comment ils le font.

Le lien d'origine est mort et je n'ai pas été capable de trouver un miroir officiel. Cependant, le ci-dessous sera probablement utile:

Comprendre le comportement de PAC Man Ghost Mme Pac Man vs Ghost Ai (GitHub) pacman_v6.2 (GitHub)


3 commentaires

Je vais y jeter un coup d'œil mais considérons mon niveau de compétence.


Je pense que le site Web pacman-vs-ghosts.net/software est inactif. Y a-t-il ailleurs que je peux trouver le cadre?


Jumpnett. Avez-vous un lien plus récent?



0
votes

Les implémentations les plus faciles d'un tel AI seraient d'utiliser un algorithme de recherche graphique naïf. BFS serait un simple qui fonctionnerait. Cependant, vous voudrez mettre en œuvre une heuristique pour mieux optimiser le temps d'exécution, donc une simple distance de Manhattan de Ghost Agent à Pac-Man serait suffisant.

Résumé: BFS avec heuristique à distance de Manhattan.

Si vous voulez avoir plus d'économie et que vos fantômes encore plus efficaces à la chasse, vous pouvez mettre en œuvre une heuristique d'état de jeu (basé sur la distance de Ghost à Pac-Man et combien de points Pac-Man a mangé jusqu'à présent, par exemple) à utiliser pour le moment où le fantôme doit choisir la prochaine étape à prendre. Vous pouvez utiliser Techniques de taille pour raccourcir le temps d'exécution dans ce cas.


0 commentaires