반응형
공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
2018/06/07 - [파이썬(Python)] - Windows 에서 OpenAI GYM 사용 시 import termios 에러 해결 방법
맥환경에서는 termios 라는 걸 사용하고
윈도우환경에서는 msvcrt 라는 걸 사용했었는데요.
mvscrt 사용해서 게임 실행!
import gym.spaces
from gym.envs.registration import register
import msvcrt
class _Getch:
def __call__(self):
keyy = msvcrt.getch()
return msvcrt.getch()
inkey = _Getch()
LEFT = 0
DOWN = 1
RIGHT = 2
UP = 3
arrow_keys = { '\x1b[A': UP, '\x1b[B': DOWN, '\x1b[C': RIGHT, '\x1b[D': LEFT }
register(
id='FrozenLake-v3',
entry_point='gym.envs.toy_text:FrozenLakeEnv',
kwargs={'map_name': '4x4', 'is_slippery': False}
)
env = gym.make('FrozenLake-v3')
env.render()
while True:
key = inkey()
if key not in arrow_keys.keys():
print(arrow_keys[key])
print("Game aborted!")
break
action = arrow_keys[key]
state, reward, done, info = env.step(action)
env.render()
print("State: ", state, "Action: ", action, "Reward: ", reward, "Info: ", info)
if done:
print("Finished with reward", reward)
break
위처럼하면 arrow_keys 부분에서 에러가 발생합니다.
\x1b[A 이런 식으로는 윈도우에서 읽어올 수가 없더라구요.
그래서 여러 블로그를 참고해보니
각 화살표를 아래처럼 읽어옵니다.
arrow_keys = {
b'H': UP,
b'P': DOWN,
b'M': RIGHT,
b'K': LEFT
}
이렇게 해줘야 방향키가 제대로 동작합니다.
그리고 위 코드를 보시면 _Getch 클래스에서 def __call__ 함수에서
getch() 함수를 2번 호출하는데요.
그 이유는 방향키를 눌렀을 때 224 xx, 224 xx 이런식으로 읽어와서
앞에 있는 224를 거르고 뒤에 xx 만 불러오기 위함입니다.
class _Getch:
def __call__(self):
return msvcrt.getch()
이렇게만 선언하고 위 프로그램을 실행하면 에러가 발생하는 걸 확인하실 수 있습니다.
이상입니다.
반응형