Pyboy

Baekalfen Baekalfen
Dépôt créer le : 29/05/2015
Release du : 25/02/2026 v2.7.0
Forks: 523 Watcher: 0 5081
Choisir une liste...
FR

pyboy10.svg

Si vous avez des questions, ou que vous voulez juste discuter, rejoignez-nous sur Discord.

Discord

Trainer les agents RL pour jouer Pokemon RedRemonter tout jeu
Watch the video
5.gif
Jouer les classiques
Créez votre propre AI
Battre les records du monde avec l'IA
1.gifpinball.gif7.gif

Commencer

Les instructions sont simples:

$ pip install pyboy

Pour plus de détails, voir instructions d'installation.

Tu es 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()

L'API

Si vous cherchez à faire un robot ou une AI, alors ces ressources sont un bon endroit pour commencer:

Lorsque l'émulateur est en marche, vous pouvez facilement accéder 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')

Les Wiki montre comment interagir avec PyBoy depuis votre propre projet.

Résultats

La performance est une priorité pour PyBoy, pour rendre votre entraînement et vos scripts d'IA aussi rapides que possible.

La façon la plus simple d'améliorer vos performances est de sauter le rendu des cadres inutiles. Si vous connaissez votre caractère prend des images X pour se déplacer, ou le jeu ne prend pas d'entrée chaque image, vous pouvez sauter ceux-ci à potentiellement triple votre performance. Toute la logique de jeu etc. sera toujours processus.

Voici une comparaison simple du rendu de chaque cadre, du rendu de chaque 15ème cadre, et non du rendu des cadres (plus haut est mieux). Voir pyboy.tick pour comment ça marche. Votre performance dépendra du jeu.

rendu complet Châssis 15 Pas de rendu
x124 temps réel x344 temps réel x395 temps réel
for _ in range(target):
    pyboy.tick()

for _ in range(target//15):
    pyboy.tick(15)

pyboy.tick(target, False)

Le Game Boy courait à l'origine à 60 images par seconde, donc une vitesse de 100x en temps réel est de 6 000 images par Deuxième. Et triviallement du tableau ci-dessus, simulant 395 heures de gameplay peut être fait en 1 heure sans rendu.

Il est également recommandé d'exécuter plusieurs instances de PyBoy en parallèle. Sur une machine 8-core, vous pourriez potentiellement faire 3160 heures de gameplay en 1 heure.

Contribution

Toute contribution est appréciée. Les problèmes actuellement connus sont suivis dans l'onglet Questions. N'hésitez pas à faire une balançoire. Si vous avez quelque chose d'original en tête, venez et en discuter sur Discord.

Discord

Pour les fonctionnalités les plus importantes, il ya ce qui suit que vous pouvez donner un essai. Ils sont également décrits de manière plus détaillée dans le liste de projets dans le Wiki:

  • Hacking jeux
  • Câble de liaison
  • Débogueur (VSCode, GDB, terminal ou autre)
  • Oui. utiliser les api ou des enveloppes de jeu pour former un réseau neuronal
  • Game Wrappers - faire des emballages pour les jeux populaires

Si vous voulez implémenter quelque chose qui n'est pas sur la liste, n'hésitez pas à le faire de toute façon. Si vous voulez le fusionner dans notre repo, il suffit d'envoyer une demande de tirage et nous allons l'examiner.

Contributeurs GitHub

Baekalfen
Baekalfen
2 contributions
krs013
krs013
52 contributions
troelsy
troelsy
16 contributions
NicoleFaye
NicoleFaye
14 contributions
BackrndSource
BackrndSource
7 contributions
nicoeps
nicoeps
6 contributions
MathisFederico
MathisFederico
5 contributions
thatguy11325
thatguy11325
4 contributions
stillinbeta
stillinbeta
3 contributions
naclander
naclander
3 contributions
grungi-ankhfire
grungi-ankhfire
2 contributions
FKatenbrink
FKatenbrink
2 contributions
rmoraes92
rmoraes92
2 contributions
Artucuno
Artucuno
1 contributions
cmacrae
cmacrae
1 contributions
Fieoner
Fieoner
1 contributions
jardiacaj
jardiacaj
1 contributions
JonathanMurray
JonathanMurray
1 contributions
LittleNyima
LittleNyima
1 contributions
MaciekBaron
MaciekBaron
1 contributions
stangerm2
stangerm2
1 contributions
not-chciken
not-chciken
1 contributions
kr1tzy
kr1tzy
1 contributions
owen-crook
owen-crook
1 contributions
posixpascal
posixpascal
1 contributions
PWhiddy
PWhiddy
1 contributions
Santitub
Santitub
1 contributions
sofianedjerbi
sofianedjerbi
1 contributions
thomafred
thomafred
1 contributions
marginalhours
marginalhours
1 contributions