Wenn Sie Fragen haben oder einfach nur chatten möchten, besuchen Sie uns auf Discord.
Bilden Sie RL-Agenten aus, um Pokemon Red zu spielen | Spulen Sie ein beliebiges Spiel zurück | |
Spielen Sie die Klassiker | Erstellen Sie Ihre eigene KI | Schlagen Sie Weltrekorde mit KI |
Die Anleitung ist einfach:
$ pip install pyboy
Einzelheiten finden Sie in der Installationsanleitung.
Jetzt sind Sie bereit! Entweder verwenden Sie PyBoy direkt vom Terminal aus
$ pyboy game_rom.gb
Oder verwenden Sie es in Ihren Python-Skripten:
from pyboy import PyBoy
pyboy = PyBoy ( 'game_rom.gb' )
while pyboy . tick ():
pass
pyboy . stop ()
Wenn Sie einen Bot oder eine KI erstellen möchten, sind diese Ressourcen ein guter Ausgangspunkt:
Wenn der Emulator ausgeführt wird, können Sie problemlos auf die API von PyBoy zugreifen:
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' )
Das Wiki zeigt, wie Sie aus Ihrem eigenen Projekt heraus eine Schnittstelle zu PyBoy herstellen.
Leistung hat für PyBoy Priorität, um Ihr KI-Training und Ihre Skripte so schnell wie möglich zu gestalten.
Der einfachste Weg, Ihre Leistung zu verbessern, besteht darin, das Rendern unnötiger Frames zu überspringen. Wenn Sie wissen, dass Ihr Charakter X Frames benötigt, um sich zu bewegen, oder das Spiel nicht in jedem Frame Eingaben berücksichtigt, können Sie diese überspringen, um Ihre Leistung möglicherweise zu verdreifachen. Die gesamte Spiellogik usw. wird weiterhin verarbeitet.
Hier ist ein einfacher Vergleich zwischen dem Rendern jedes Frames, dem Rendern jedes 15. Frames und dem Rendern keines Frames (höher ist besser). Sehen Sie sich pyboy.tick
an, um zu erfahren, wie es funktioniert. Ihre Leistung hängt vom Spiel ab.
Vollständige Darstellung | Frame-Skip 15 | Kein Rendering |
x124 Echtzeit | x344 Echtzeit | x395 Echtzeit |
for _ in range ( target ):
pyboy . tick () | for _ in range ( target // 15 ):
pyboy . tick ( 15 ) | pyboy . tick ( target , False ) |
Der Game Boy lief ursprünglich mit 60 Bildern pro Sekunde, eine 100-fache Echtzeitgeschwindigkeit beträgt also 6.000 Bilder pro Sekunde. Und trivialerweise lässt sich aus der obigen Tabelle entnehmen, dass die Simulation von 395 Stunden Gameplay in einer Stunde ohne Rendering durchgeführt werden kann.
Es wird außerdem empfohlen, mehrere Instanzen von PyBoy parallel auszuführen. Auf einem 8-Kern-Rechner könnten Sie möglicherweise 3160 Stunden Spielzeit in einer Stunde absolvieren.
Jeder Beitrag wird geschätzt. Die aktuell bekannten Probleme werden auf der Registerkarte „Probleme“ nachverfolgt. Fühlen Sie sich frei, einen von ihnen auszuprobieren. Wenn Sie etwas Originelles im Sinn haben, kommen Sie vorbei und diskutieren Sie es auf Discord.
Für die größeren Funktionen gibt es die folgenden, die Sie ausprobieren können. Sie sind auch in der Projektliste im Wiki näher beschrieben:
api
oder Game Wrapper, um ein neuronales Netzwerk zu trainierenWenn Sie etwas implementieren möchten, das nicht auf der Liste steht, können Sie dies gerne trotzdem tun. Wenn Sie es in unser Repo einbinden möchten, senden Sie einfach eine Pull-Anfrage und wir werden es uns ansehen.