Если у вас есть вопросы или вы просто хотите пообщаться, присоединяйтесь к нам в Discord.
Обучите агентов RL играть в Pokemon Red | Перемотать любую игру | |
Играйте в классику | Создайте свой собственный ИИ | Побейте мировые рекорды с помощью ИИ |
Инструкции просты:
$ pip install pyboy
Подробности смотрите в инструкции по установке.
Теперь вы готовы! Либо используйте PyBoy прямо из терминала.
$ pyboy game_rom.gb
Или используйте его в своих скриптах Python:
from pyboy import PyBoy
pyboy = PyBoy ( 'game_rom.gb' )
while pyboy . tick ():
pass
pyboy . stop ()
Если вы хотите создать бота или ИИ, то эти ресурсы — хорошее место для начала:
Когда эмулятор запущен, вы можете легко получить доступ к API 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' )
В Wiki показано, как взаимодействовать с PyBoy из вашего собственного проекта.
Производительность является приоритетом для PyBoy, чтобы обучение ИИ и сценарии выполнялись как можно быстрее.
Самый простой способ улучшить производительность — пропустить рендеринг ненужных кадров. Если вы знаете, что вашему персонажу требуется X кадров для перемещения, или игра не принимает входные данные в каждом кадре, вы можете пропустить их, чтобы утроить свою производительность. Вся игровая логика и т. д. по-прежнему будут обрабатываться.
Вот простое сравнение рендеринга каждого кадра, рендеринга каждого 15-го кадра и отсутствия рендеринга кадров (чем выше, тем лучше). См. pyboy.tick
чтобы узнать, как это работает. Ваша производительность будет зависеть от игры.
Полный рендеринг | Пропуск кадров 15 | Нет рендеринга |
x124 в реальном времени | x344 в реальном времени | x395 в реальном времени |
for _ in range ( target ):
pyboy . tick () | for _ in range ( target // 15 ):
pyboy . tick ( 15 ) | pyboy . tick ( target , False ) |
Первоначально Game Boy работал со скоростью 60 кадров в секунду, поэтому ускорение в 100 раз в реальном времени составит 6000 кадров в секунду. И как банально видно из таблицы выше, симулировать 395 часов геймплея можно за 1 час без рендеринга.
Также рекомендуется запускать несколько экземпляров PyBoy параллельно. На 8-ядерной машине вы потенциально можете провести 3160 часов игрового процесса за 1 час.
Любой вклад ценится. Известные на данный момент проблемы отслеживаются на вкладке «Проблемы». Не стесняйтесь атаковать любого из них. Если вы задумали что-то оригинальное, приходите и обсудите это в Discord.
Из наиболее важных функций вы можете попробовать следующие. Более подробно они также описаны в списке проектов в Wiki:
api
или игровые оболочки для обучения нейронной сети.Если вы хотите реализовать что-то, чего нет в списке, все равно смело это делайте. Если вы хотите объединить его с нашим репозиторием, просто отправьте запрос на включение, и мы его рассмотрим.