Si tienes alguna pregunta o simplemente quieres chatear, únete a nosotros en Discord.
Entrena a los agentes de RL para jugar Pokémon Rojo | Rebobinar cualquier juego | |
Toca los clásicos | Crea tu propia IA | Batir récords mundiales con IA |
Las instrucciones son simples:
$ pip install pyboy
Para más detalles, consulte las instrucciones de instalación.
¡Ahora estás listo! Utilice PyBoy directamente desde la terminal
$ pyboy game_rom.gb
O úselo en sus scripts de Python:
from pyboy import PyBoy
pyboy = PyBoy ( 'game_rom.gb' )
while pyboy . tick ():
pass
pyboy . stop ()
Si está buscando crear un bot o una IA, estos recursos son un buen lugar para comenzar:
Cuando el emulador se está ejecutando, puedes acceder fácilmente a la API de PyBoy:
pyboy . set_emulation_speed ( 0 ) # No speed limit
pyboy . button ( 'down' )
pyboy . button ( 'a' )
pyboy . tick () # Process at least one frame to let the game register the input
value_of_interest = pyboy . memory [ 0xC345 ]
pil_image = pyboy . screen . image
pil_image . save ( 'screenshot.png' )
La Wiki muestra cómo interactuar con PyBoy desde su propio proyecto.
El rendimiento es una prioridad para PyBoy, para que el entrenamiento y los scripts de IA sean lo más rápidos posible.
La forma más sencilla de mejorar el rendimiento es omitir la representación de fotogramas innecesarios. Si sabes que tu personaje necesita X fotogramas para moverse, o si el juego no acepta entradas en cada fotograma, puedes omitirlos para triplicar potencialmente tu rendimiento. Toda la lógica del juego, etc., seguirá procesándose.
Aquí hay una comparación simple entre renderizar cada fotograma, renderizar cada 15 fotogramas y no renderizar ningún fotograma (cuanto más alto, mejor). Consulte pyboy.tick
para saber cómo funciona. Tu rendimiento dependerá del juego.
Representación completa | Salto de fotograma 15 | Sin renderizado |
x124 en tiempo real | x344 en tiempo real | x395 en tiempo real |
for _ in range ( target ):
pyboy . tick () | for _ in range ( target // 15 ):
pyboy . tick ( 15 ) | pyboy . tick ( target , False ) |
La Game Boy originalmente funcionaba a 60 cuadros por segundo, por lo que una aceleración de 100 veces en tiempo real es 6000 cuadros por segundo. Y, trivialmente, de la tabla anterior, se pueden simular 395 horas de juego en 1 hora sin renderizado.
También se recomienda ejecutar varias instancias de PyBoy en paralelo. En una máquina de 8 núcleos, podrías jugar 3160 horas de juego en 1 hora.
Cualquier contribución es apreciada. Los problemas conocidos actualmente se rastrean en la pestaña Problemas. Siéntete libre de darle un golpe a cualquiera de ellos. Si tienes algo original en mente, ven y discútelo en Discord.
Para conocer las funciones más importantes, existen las siguientes que puede probar. También se describen con más detalle en la lista de proyectos en la Wiki:
api
o los envoltorios del juego para entrenar una red neuronalSi desea implementar algo que no está en la lista, no dude en hacerlo de todos modos. Si desea fusionarlo en nuestro repositorio, simplemente envíe una solicitud de extracción y lo revisaremos.