Se você tiver alguma dúvida ou apenas quiser bater um papo, junte-se a nós no Discord.
Treine agentes RL para jogar Pokémon Red | Retroceda qualquer jogo | |
Jogue os clássicos | Crie sua própria IA | Bata recordes mundiais com IA |
As instruções são simples:
$ pip install pyboy
Para obter detalhes, consulte as instruções de instalação.
Agora você está pronto! Use PyBoy diretamente do terminal
$ pyboy game_rom.gb
Ou use-o em seus scripts Python:
from pyboy import PyBoy
pyboy = PyBoy ( 'game_rom.gb' )
while pyboy . tick ():
pass
pyboy . stop ()
Se você deseja criar um bot ou IA, estes recursos são um bom lugar para começar:
Quando o emulador está em execução, você pode acessar facilmente a API do 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' )
O Wiki mostra como interagir com o PyBoy a partir do seu próprio projeto.
O desempenho é uma prioridade para PyBoy, para tornar seu treinamento e scripts de IA o mais rápidos possível.
A maneira mais fácil de melhorar seu desempenho é pular a renderização de quadros desnecessários. Se você sabe que seu personagem leva X quadros para se mover, ou que o jogo não recebe entrada em todos os quadros, você pode pular esses quadros para potencialmente triplicar seu desempenho. Toda a lógica do jogo, etc., ainda será processada.
Aqui está uma comparação simples entre renderizar cada quadro, renderizar cada 15 quadros e não renderizar nenhum quadro (quanto maior, melhor). Veja pyboy.tick
para saber como funciona. Seu desempenho dependerá do jogo.
Renderização completa | Pular quadro 15 | Sem renderização |
x124 em tempo real | x344 em tempo real | x395 em tempo real |
for _ in range ( target ):
pyboy . tick () | for _ in range ( target // 15 ):
pyboy . tick ( 15 ) | pyboy . tick ( target , False ) |
O Game Boy rodava originalmente a 60 quadros por segundo, então uma aceleração de 100x em tempo real é de 6.000 quadros por segundo. E trivialmente pela tabela acima, a simulação de 395 horas de jogo pode ser feita em 1 hora sem renderização.
Também é recomendado executar várias instâncias do PyBoy em paralelo. Em uma máquina de 8 núcleos, você poderia potencialmente jogar 3.160 horas de jogo em 1 hora.
Qualquer contribuição é apreciada. Os problemas atualmente conhecidos são rastreados na guia Problemas. Sinta-se à vontade para dar um soco em qualquer um deles. Se você tem algo original em mente, venha discutir no Discord.
Para os recursos mais importantes, existem os seguintes que você pode experimentar. Eles também são descritos com mais detalhes na lista de projetos no Wiki:
api
ou os wrappers do jogo para treinar uma rede neuralSe você quiser implementar algo que não esteja na lista, sinta-se à vontade para fazê-lo de qualquer maneira. Se você quiser mesclá-lo em nosso repositório, basta enviar uma solicitação pull e daremos uma olhada.