Programmin 'Pac-Man
Réglage
Vous incarnez Pac-Man. Vous voulez collecter des boulettes, des fruits et des boulettes de puissance avant tout le monde, tout en évitant les fantômes.
Règles
- Chaque Pac-Man valide sera dans un seul labyrinthe. Le joueur avec le score cumulé le plus élevé après 10 matchs gagnera.
- Une partie se termine lorsque tous les Pac-Men sont morts, que tous les plombs ont disparu ou que 500 tours sont passés
- Si un Pac-Man meurt, il continue de jouer comme un fantôme
- Manger une pastille de puissance vous rend invincible pendant 10 tours et vous permet de manger des fantômes
- Manger un fantôme téléportera le fantôme à un endroit aléatoire
- Les fantômes ne peuvent rien manger sauf Pac-Men et n'obtiennent aucun point
- En mangeant les articles suivants en tant que Pac-Man, vous obtiendrez les points suivants:
- Pellet: 10
- Granule de puissance: 50
- Fruits: 100
- Fantôme: 200
Le labyrinthe
S'il y a n Pac-Men, puis un labyrinthe de taille sqrt(n)*10
en sqrt(n)*10
sera généré en utilisant l'algorithme de Prim ( en raison de son faible facteur de rivière de), puis tressées complètement, en donnant la préférence à des impasses déjà existantes. De plus, ce tressage peut être effectué sur les bords, de sorte qu'il y a quelques voies de haut en bas et de gauche à droite.
Il y aura:
2n
Des fantômes4n
Pellets de puissance2n
Fruitn
Pac-Men dans des endroits où les carrés voisins connectés sont vides.- Tous les espaces vides restants seront remplis de pellets
Par conséquent, une carte initiale avec 10 joueurs ressemblera à ceci (Ghosts = vert, Pellets = aqua, fruit = rouge, Pac-Man = jaune):
Entrée sortie
Au début du jeu , vous recevrez une seule ligne de personnages, représentant les murs dans chaque carré de la carte. Pour chaque carré, en commençant par le coin supérieur gauche, en se déplaçant vers la droite et en passant à la ligne suivante, vous recevrez un chiffre hexadécimal représentant la situation du mur:
0: No walls
1: North wall
2: East wall
3: East & North wall
4: South wall
5: South & North wall
6: South & East wall
7: Won't occur
8: West wall
9: West & North wall
A: West & East wall
B: Won't occur
C: West & South wall
D: Won't occur
E: Won't occur
F: Won't occur
En termes simples, Nord = 1, Est = 2, Sud = 4 et Ouest = 8, additionnés.
Ensuite, à chaque tour , vous recevrez votre position actuelle et les objets dans votre ligne de vue (si vous êtes un Pac-Man. Tous les fantômes reçoivent tous les carrés de -5 à +5 de leur position relative). Votre ligne de vue sera basée sur la direction que vous avez parcourue au dernier virage. Si vous avez voyagé vers le nord, vous recevrez toutes les cases directement au nord, à l'est et à l'ouest jusqu'à ce qu'un mur coupe votre vue, plus un seul carré au nord-ouest et au nord-est, si aucun mur ne coupe votre vue. Si vous choisissez de ne pas bouger, vous recevrez les carrés dans les 8 directions.
Pour le visuel, I
signifie invisible, V
signifie visible, P
signifie Pac-Man (en supposant que Pac-Man fait face au nord):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Chaque carré sera donné par une coordonnée, puis son contenu. Son contenu est représenté par les caractères suivants:
P
: 1 ou plusieurs Pac-ManG
: 1 ou plusieurs fantômeso
: PelletO
: Power pelletF
: Morceau de fruitX
: Rien
S'il y a un fantôme et quelque chose d'autre sur une case, G
sera retourné.
Par conséquent, si vous étiez sur la place 23,70
, vous venez de vous déplacer vers le nord, la place au-dessus de vous est une impasse et contient une pastille de puissance, et vous avez des murs des deux côtés de vous, votre entrée serait:
23,70X 22,70O
Sur votre carré actuel, il affichera un G
si vous êtes un fantôme, un P
s'il y a un autre Pac-Man sur votre carré, sinon unX
Ensuite, vous retournerez les articles suivants via STDOUT:
Un seul caractère représentant une direction ( N
orth, E
ast, S
outh, W
est ou X
Stay).
Avant de passer dans une direction, vous pouvez également passer dans n'importe quelle coordonnée comme x,y
, et les murs de ce carré seront repassés (comme décrit ci-dessus)
Le programme doit être exécuté en continu jusqu'à ce qu'il lui Q
soit transmis via STDIN. Les programmes seront redémarrés pour chaque partie.
L'accès à d'autres informations en dehors de ce qui est transmis à STDIN (y compris d'autres données Pac-Men ou les données détenues par le programme hôte) n'est pas autorisé.
Le fait de ne pas retourner un mouvement dans les 1000 ms mettra fin au programme (en cours d'exécution sur ma machine Win8 assez décente). Vous disposerez de 2 secondes pour traiter la disposition initiale du labyrinthe lorsqu'elle vous sera donnée.
L'hôte sera écrit en Python, et le code pour tester votre bot est à venir.
Cas exceptionnels
- Si plusieurs Pac-Men se retrouvent au même endroit, ni le contenu du carré actuel, sauf si exactement 1 d'entre eux est invincible, auquel cas, l'invincible Pac-Man recevra le culot.
- Un Pac-Man mangé par un fantôme ne sera pas téléporté ailleurs. Si deux Pac-Men sont sur une case et que l'un est invincible, le fantôme sera téléporté.
- La téléportation en tant que fantôme vous empêche de bouger pendant 1 tour. Lorsque vous jouez en tant que fantôme, votre tour sera simplement ignoré
- Tenter de traverser un mur sera interprété comme «rester»
Chacun des fantômes initiaux recevra l'un des 4 traits de personnalité, comme décrit ici , avec la modification suivante:
- Les bugs décrits ne seront pas dupliqués
- Ils seront tous actifs dès le début
- Ils ne sont vulnérables qu'au joueur qui a mangé la boulette
- Ils passeront indéfiniment de la dispersion à la poursuite, chacun ayant un nombre fixe de tours avant de passer
- En passant à la poursuite, ils trouveront le Pac-Man le plus proche à poursuivre, et poursuivront ce Pac-Man pendant la durée de leur poursuite. (S'il y a une égalité pour la proximité, le Pac-Man sera choisi pseudo-aléatoirement)
- Blinky n'accélèrera pas
- Inky choisira le fantôme le plus proche sur lequel baser ses calculs après être passé à la poursuite.
- Clyde trouvera tous les joueurs à 8 cases de là, puis suivra le joueur le plus éloigné.
- Tous les fantômes sauf Clyde ne cibleront pas un joueur à plus de 5 cases de distance
J'accepterai du code compilable à partir d'une langue standard ou d'un .exe (avec le code d'accompagnement).
Conseils de programmation
Vous pouvez avec mon contrôleur. Vous devez placer un dossier / bots / your_bot_name / dans le même répertoire que le programme. Dans le dossier, vous devez ajouter un command.txt contenant une commande pour exécuter votre programme (ex python my_bot.py
:) et votre bot.
Le code du contrôleur est sur Github (code Python, nécessite Pygame si vous voulez des graphiques.) Testé sur Windows et Linux
LES SCORES
ghostbuster: 72 840 points
pathétique: 54 570 points
myope: 50 820 points
éviter l'interaction: 23 580 points
physicien: 18 330 points
Randonnée aléatoire: 7 760 points
dumbpac: 4,880 points
la source
Réponses:
GhostBuster - Python
Choisit un endroit aléatoire sur la carte, utilise l'algorithme A * pour trouver la meilleure voie à suivre. Une fois arrivé à destination, il en choisira un nouveau et continuera. Il essaiera d'éviter les fantômes, mais avec le champ de vision limité, il se heurtera parfois à eux. Cela évitera de marcher sur des spots déjà visités.
Utilise du code de Sparr, merci pour la logique.
Windows 7, Visual Studios avec Python Tools. Devrait fonctionner sur les boîtiers Linux.
la source
myope
Ce pac évite les fantômes adjacents à moins qu'il ne puisse les manger, se déplace sur des fruits ou des granulés adjacents et marche au hasard en dernier recours.
la source
éviter
Évitez tous les fantômes en tant que pacman et tous les pacmen en tant que fantôme. Essaie d'éviter tout type de son genre si possible, puis évite de tourner à 180 si possible.
la source
Physicien, Haskell
Le physicien Pac-Man pense que la loi de Newton sur la gravitation universelle peut l'aider à gagner la partie. Il l'applique ensuite à tous les autres objets qu'il connaît pendant le jeu. Puisque le physicien est vieux et a une mauvaise mémoire, il ne peut se souvenir des choses qu'en 5 tours. Hooooly, le mauvais souvenir l'aide en fait à mieux marquer.
Cette réponse a deux filles:
Main.hs
, contient la partie intéressante.Pacman.hs
, juste du code ennuyeux pour gérer le protocole. Vous pouvez l'utiliser pour écrire votre propre solution haskell. Il ne contient aucun code AI.Oh, attendez, nous en avons un
Makefile
aussi.Les voici:
Main.hs
Pacman.hs
Makefile
command.txt
la source
Main' Expected
Pacman» lorsque j'essaye de le faire. De plus, pour l'exécuter, dois-je simplement le faire, ou y a-t-il une autre commande que je dois exécuter?physicist
exécutable. Modifié et ajoutécommand.txt
, maintenant.physicist.hs
enMain.hs
peut fonctionner. J'ai mis à jour la réponse.dumbpac
Ce pac se déplace simplement au hasard, sans égard à la disposition du labyrinthe ou aux fantômes ou à tout autre facteur.
Perl:
Python:
la source
marche aléatoire
ce pac marche au hasard, mais pas dans les murs
la source
Pathy, Python 3
Ce bot utilise un chemin pour trouver beaucoup de choses. Étant donné une position de départ et une condition de fin, il utilise le simple BFS pour trouver le chemin le plus court. La recherche de chemin est utilisée dans:
command.txt
pathy.py
la source
objects = [(tuple(map(int, x[:-1].split(',')))[::-1], x[-1]) for x in line.split(' ')]
jette unValueError: invalid literal for int() with base 10: '8o'