질문이 있거나 채팅을 하고 싶다면 Discord에 참여하세요.
RL 에이전트에게 Pokemon Red를 플레이하도록 교육 | 모든 게임을 되감기 | |
클래식을 즐겨보세요 | 나만의 AI 만들기 | AI로 세계 기록 깨기 |
지침은 간단합니다.
$ pip install pyboy
자세한 내용은 설치 지침을 참조하세요.
이제 준비가 되었습니다! 터미널에서 직접 PyBoy를 사용하세요.
$ pyboy game_rom.gb
또는 Python 스크립트에서 사용하세요.
from pyboy import PyBoy
pyboy = PyBoy ( 'game_rom.gb' )
while pyboy . tick ():
pass
pyboy . stop ()
봇이나 AI를 만들려는 경우 다음 리소스를 시작하는 것이 좋습니다.
에뮬레이터가 실행 중이면 PyBoy의 API에 쉽게 액세스할 수 있습니다.
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와 인터페이스하는 방법을 보여줍니다.
AI 훈련과 스크립트를 최대한 빠르게 만들기 위해 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배 향상은 초당 6,000프레임입니다. 그리고 위의 표를 보면, 395시간의 게임 플레이 시뮬레이션을 렌더링 없이 1시간 안에 완료할 수 있습니다.
또한 여러 PyBoy 인스턴스를 병렬로 실행하는 것이 좋습니다. 8코어 시스템에서는 잠재적으로 1시간 안에 3160시간의 게임 플레이를 수행할 수 있습니다.
어떤 기여라도 감사하겠습니다. 현재 알려진 문제는 문제 탭에서 추적됩니다. 그 중 어느 곳이든 자유롭게 스윙해 보세요. 생각하고 있는 독창적인 내용이 있다면 Discord에 오셔서 토론해 보세요.
더 많은 주요 기능을 보려면 다음과 같은 기능을 시도해 볼 수 있습니다. 또한 Wiki의 프로젝트 목록에 더 자세히 설명되어 있습니다.
api
또는 게임 래퍼를 사용하여 신경망 훈련목록에 없는 것을 구현하고 싶다면 어쨌든 자유롭게 구현하세요. 이를 우리 저장소에 병합하고 싶다면 끌어오기 요청을 보내주시면 살펴보겠습니다.