Programmin 'Pac-Man
Ajuste
Juegas como Pac-Man. Desea recolectar gránulos, frutas y gránulos de energía antes que nadie, evitando los fantasmas.
Reglas
- Cada Pac-Man válido estará en un solo laberinto. El jugador con el puntaje acumulado más alto después de 10 juegos ganará.
- Un juego termina cuando todos los Pac-Men están muertos, todos los perdigones se han ido, o han pasado 500 turnos
- Si un Pac-Man muere, él continúa jugando como un fantasma.
- Comer una píldora Power te hará invencible durante 10 turnos y te permitirá comer fantasmas.
- Comer un fantasma teletransportará al fantasma a una ubicación aleatoria
- Los fantasmas no pueden comer nada excepto Pac-Men, y no obtienen ningún punto
- Comer los siguientes artículos como Pac-Man te dará los siguientes puntos:
- Pellet: 10
- Power Pellet: 50
- Fruta: 100
- Fantasma: 200
El laberinto
Si hay n Pac-Men, a continuación, un laberinto de tamaño sqrt(n)*10
por sqrt(n)*10
será generado usando el algoritmo de Prim (debido a su bajo factor de río), después se trenzan por completo, dando preferencia a los callejones sin salida ya existentes. Además, este trenzado se puede hacer a través de los bordes, de modo que hay algunas rutas de arriba a abajo y de izquierda a derecha.
Habrá:
2n
Fantasmas4n
Pellets de energía2n
Frutan
Pac-Men en lugares donde las plazas de vecinos conectados están vacías.- Todos los espacios vacíos restantes se llenarán con gránulos.
Por lo tanto, un mapa inicial con 10 jugadores se verá más o menos así (Fantasmas = verde, Pellets = aguamarina, fruta = rojo, Pac-Man = amarillo):
De entrada y salida
Al comienzo del juego , se te dará una sola línea de personajes, que representan las paredes en cada cuadro del mapa. Para cada cuadrado, comenzando con la parte superior izquierda, moviéndose a la derecha y pasando a la siguiente línea, se le dará un dígito hexadecimal que representa la situación del muro:
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 pocas palabras, Norte = 1, Este = 2, Sur = 4 y Oeste = 8, sumados.
Luego, en cada turno , se le dará su posición actual y los elementos en su línea de visión (si es un Pac-Man. Todos los fantasmas reciben todos los cuadrados de -5 a +5 desde su posición relativa). Su línea de visión se basará en la dirección en la que viajó el último turno. Si viajó hacia el norte, se le darán todos los cuadrados directamente al norte, este y oeste hasta que un muro corte su vista más un solo cuadrado al noroeste y noreste, si ningún muro corta su vista. Si elige no moverse, se le darán los cuadrados en las 8 direcciones.
Para lo visual, I
significa invisible, V
significa visible, P
significa Pac-Man (suponiendo que Pac-Man esté mirando hacia el norte):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Cada cuadrado será dado por una coordenada, y luego es contenido. Su contenido está representado por los siguientes caracteres:
P
: 1 o más Pac-ManG
: 1 o más fantasmaso
: PelletO
: Pellet de potenciaF
: Pedazo de frutaX
: Nada
Si hay un fantasma y algo más en un cuadrado, G
se devolverá.
Por lo tanto, si estuvieras en el cuadrado 23,70
, simplemente te moviste hacia el norte, el cuadrado que está encima de ti es un callejón sin salida y contiene una píldora de Poder, y tienes paredes a ambos lados de ti, tu entrada sería:
23,70X 22,70O
En tu casilla actual, mostrará G
si eres un Fantasma, P
si hay otro Pac-Man en tu casilla, de lo contrario, unX
Luego devolverá los siguientes elementos a través de STDOUT:
Un solo personaje que representa una dirección ( N
orth, E
ast, S
outh, W
est o X
Stay).
Antes de pasar en una dirección, también puede pasar en cualquier coordenada como x,y
, y las paredes de ese cuadrado serán devueltas (como se describió anteriormente)
El programa debe estar ejecutándose continuamente hasta que Q
se le pase a través de STDIN. Los programas se reiniciarán para cada juego.
No está permitido acceder a otra información fuera de lo que se pasa a STDIN (incluidos otros datos de Pac-Men's o los datos en poder del programa anfitrión).
Si no se devuelve un movimiento dentro de 1000 ms, el programa finalizará (ejecutándose en mi máquina Win8 bastante decente). Se le darán 2 segundos para procesar el diseño inicial del laberinto cuando se le dé
El host se escribirá en Python, y el código para probar su bot está por llegar.
Casos excepcionales
- Si varios Pac-Men terminan en la misma ubicación, ninguno de los dos obtiene el contenido del cuadrado actual, a menos que exactamente 1 de ellos sea invencible, en cuyo caso, el Pac-Man invencible recibirá el perdigón.
- Un Pac-Man comido por un Fantasma no será teletransportado a otro lugar. Si dos Pac-Men están en una casilla, y uno es invencible, el fantasma será teletransportado.
- Ser teletransportado como fantasma evita que te muevas durante 1 turno. Cuando juegas como un fantasma, simplemente tendrás tu turno omitido
- Intentar moverse a través de una pared se interpretará como "Stay"
Cada uno de los fantasmas iniciales recibirá uno de los 4 rasgos de personalidad, como se describe aquí , con la siguiente modificación:
- Los errores descritos no se duplicarán.
- Todos estarán activos desde el principio.
- Son vulnerables solo al jugador que se comió la bolita
- Cambiarán indefinidamente de dispersión a persecución, cada uno con un número fijo de turnos antes de cambiar
- Al cambiar a perseguir, encontrarán al Pac-Man más cercano para perseguir, y perseguirán a ese Pac-Man mientras dure su persecución. (Si hay un empate para la cercanía, el Pac-Man se elegirá pseudoaleatoriamente)
- Blinky no acelerará
- Inky elegirá el fantasma más cercano para basar sus cálculos después de cambiar a persecución.
- Clyde encontrará a todos los jugadores a 8 casillas de distancia, luego seguirá al jugador más alejado.
- Todos los fantasmas, excepto Clyde, no apuntarán a un jugador a más de 5 casillas de distancia.
Aceptaré código compilable de un lenguaje estándar o un .exe (con el código que lo acompaña).
Consejos de programación
Puedes con mi controlador. Debe colocar una carpeta / bots / your_bot_name / en el mismo directorio que el programa. Dentro de la carpeta, debe agregar un command.txt que contenga un comando para ejecutar su programa (ej python my_bot.py
.:) y su bot.
El código del controlador está en Github (código Python, requiere Pygame si quieres gráficos). Probado en Windows y Linux
PUNTUACIONES
cazafantasmas: 72,840 puntos
pathy: 54,570 puntos
miopía: 50.820 puntos
evitar interacción: 23,580 puntos
físico: 18,330 puntos
paseo aleatorio: 7.760 puntos
dumbpac: 4.880 puntos
fuente
Respuestas:
GhostBuster - Python
Selecciona un punto aleatorio en el mapa, usa el algoritmo A * para encontrar la mejor ruta hacia adelante. Una vez que llegue a su destino, elegirá uno nuevo y continuará. Intentará evitar los fantasmas, pero con el campo de visión limitado, ocasionalmente se topará con ellos. Evitará caminar en lugares ya visitados.
Utiliza un código de Sparr's, gracias por la lógica.
Windows 7, Visual Studios con Python Tools. Debería funcionar en cajas de Linux.
fuente
miope
Este pac evita los fantasmas adyacentes a menos que pueda comerlos, se mueve sobre frutas o gránulos adyacentes y camina al azar como último recurso.
fuente
evitador
Evita a todos los fantasmas como pacman y a todos los pacmen cuando sea un fantasma. Intenta evitar cualquiera de su propia clase si es posible, y luego evita girar 180 si es posible.
fuente
Físico, Haskell
El físico Pac-Man cree que la ley de gravitación universal de Newton puede ayudarlo a ganar el juego. Luego lo aplica a todos los demás objetos que conoce durante el juego. Como el físico es viejo y tiene mala memoria, solo puede recordar cosas en 5 rondas. Hooooly, la mala memoria en realidad lo ayuda a anotar mejor.
Esta respuesta tiene dos archivos:
Main.hs
, contiene la parte interesante.Pacman.hs
, solo un código aburrido maneja el protocolo. Puede usarlo para escribir su propia solución haskell. No contiene ningún código AI.Oh, espera, nosotros también tenemos un
Makefile
.Aquí vienen ellos:
Main.hs
Pacman.hs
Makefile
comando.txt
fuente
Main' Expected
Pacman" cuando trato de hacerlo. Además, para ejecutarlo, ¿solo necesito hacerlo o hay otro comando que necesito ejecutar?physicist
ejecutable. Editado y agregadocommand.txt
, ahora.physicist.hs
aMain.hs
puede funcionar. He actualizado la respuesta.Dumbpac
Este pac simplemente se mueve al azar, sin tener en cuenta el diseño del laberinto o los fantasmas ni ningún otro factor.
Perl:
Pitón:
fuente
Caminata aleatoria
este pac camina al azar, pero no en paredes
fuente
Pathy, Python 3
Este bot utiliza la ruta para encontrar mucho. Dada una posición de inicio y una condición final, utiliza el BFS simple para encontrar la ruta más corta. La búsqueda de ruta se usa en:
comando.txt
pathy.py
fuente
objects = [(tuple(map(int, x[:-1].split(',')))[::-1], x[-1]) for x in line.split(' ')]
lanza unValueError: invalid literal for int() with base 10: '8o'