Si vous avez des questions ou souhaitez simplement discuter, rejoignez-nous sur Discord.
Entraînez les agents RL à jouer à Pokemon Red | Rembobinez n'importe quel jeu | |
Jouez les classiques | Créez votre propre IA | Battez des records du monde avec l'IA |
Les instructions sont simples :
$ pip install pyboy
Pour plus de détails, consultez les instructions d'installation.
Maintenant vous êtes prêt ! Soit utiliser PyBoy directement depuis le terminal
$ pyboy game_rom.gb
Ou utilisez-le dans vos scripts Python :
from pyboy import PyBoy
pyboy = PyBoy ( 'game_rom.gb' )
while pyboy . tick ():
pass
pyboy . stop ()
Si vous cherchez à créer un bot ou une IA, ces ressources sont un bon point de départ :
Lorsque l'émulateur est en cours d'exécution, vous pouvez facilement accéder à l'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' )
Le Wiki montre comment s'interfacer avec PyBoy à partir de votre propre projet.
La performance est une priorité pour PyBoy, pour rendre votre formation et vos scripts IA aussi rapides que possible.
Le moyen le plus simple d’améliorer vos performances consiste à ignorer le rendu des images inutiles. Si vous savez que votre personnage prend X images pour se déplacer, ou si le jeu ne prend pas en compte chaque image, vous pouvez les ignorer pour potentiellement tripler vos performances. Toute la logique du jeu, etc. sera toujours traitée.
Voici une comparaison simple entre le rendu de chaque image, le rendu toutes les 15 images et le rendu d'aucune image (plus c'est haut, mieux c'est). Voir pyboy.tick
pour savoir comment cela fonctionne. Votre performance dépendra du jeu.
Rendu complet | Saut d'image 15 | Pas de rendu |
x124 en temps réel | x344 en temps réel | x395 en temps réel |
for _ in range ( target ):
pyboy . tick () | for _ in range ( target // 15 ):
pyboy . tick ( 15 ) | pyboy . tick ( target , False ) |
La Game Boy fonctionnait à l'origine à 60 images par seconde, donc une accélération de 100x en temps réel équivaut à 6 000 images par seconde. Et trivialement d'après le tableau ci-dessus, simuler 395 heures de jeu peut être réalisé en 1 heure sans rendu.
Il est également recommandé d'exécuter plusieurs instances de PyBoy en parallèle. Sur une machine à 8 cœurs, vous pourriez potentiellement faire 3 160 heures de jeu en 1 heure.
Toute contribution est appréciée. Les problèmes actuellement connus sont suivis dans l'onglet Problèmes. N'hésitez pas à tenter votre chance sur l'un d'entre eux. Si vous avez quelque chose d'original en tête, venez en discuter sur Discord.
Pour les fonctionnalités les plus importantes, vous pouvez essayer les suivantes. Ils sont également décrits plus en détail dans la liste des projets dans le Wiki :
api
ou les wrappers de jeu pour entraîner un réseau neuronalSi vous souhaitez implémenter quelque chose qui ne figure pas sur la liste, n'hésitez pas à le faire quand même. Si vous souhaitez le fusionner dans notre dépôt, envoyez simplement une pull request et nous l'examinerons.