neural-boy / src /game /keymap.py
sachinkumarsingh's picture
Upload folder using huggingface_hub
d548197 verified
Raw
History Blame Contribute Delete
2.05 kB
from typing import Dict, List, Tuple
import gymnasium
import pygame
ActionNames = List[str]
Keymap = Dict[Tuple[int], int]
def get_keymap_and_action_names(name: str) -> Tuple[Keymap, ActionNames]:
if name == "empty":
return EMPTY_KEYMAP, EMPTY_ACTION_NAMES
if name == "dataset_mode":
return DATASET_MODE_KEYMAP, DATASET_MODE_ACTION_NAMES
if name == "atari":
return ATARI_KEYMAP, ATARI_ACTION_NAMES
assert name.startswith("atari/")
env_id = name.split("atari/")[1]
action_names = [x.lower() for x in gymnasium.make(env_id).unwrapped.get_action_meanings()]
keymap = {}
for key, value in ATARI_KEYMAP.items():
if ATARI_ACTION_NAMES[value] in action_names:
keymap[key] = action_names.index(ATARI_ACTION_NAMES[value])
return keymap, action_names
ATARI_ACTION_NAMES = [
"noop",
"fire",
"up",
"right",
"left",
"down",
"upright",
"upleft",
"downright",
"downleft",
"upfire",
"rightfire",
"leftfire",
"downfire",
"uprightfire",
"upleftfire",
"downrightfire",
"downleftfire",
]
ATARI_KEYMAP = {
(pygame.K_SPACE,): 1,
(pygame.K_w,): 2,
(pygame.K_d,): 3,
(pygame.K_a,): 4,
(pygame.K_s,): 5,
(pygame.K_w, pygame.K_d): 6,
(pygame.K_w, pygame.K_a): 7,
(pygame.K_s, pygame.K_d): 8,
(pygame.K_s, pygame.K_a): 9,
(pygame.K_w, pygame.K_SPACE): 10,
(pygame.K_d, pygame.K_SPACE): 11,
(pygame.K_a, pygame.K_SPACE): 12,
(pygame.K_s, pygame.K_SPACE): 13,
(pygame.K_w, pygame.K_d, pygame.K_SPACE): 14,
(pygame.K_w, pygame.K_a, pygame.K_SPACE): 15,
(pygame.K_s, pygame.K_d, pygame.K_SPACE): 16,
(pygame.K_s, pygame.K_a, pygame.K_SPACE): 17,
}
DATASET_MODE_ACTION_NAMES = [
"noop",
"previous",
"next",
"previous_10",
"next_10",
]
DATASET_MODE_KEYMAP = {
(pygame.K_LEFT,): 1,
(pygame.K_RIGHT,): 2,
(pygame.K_PAGEDOWN,): 3,
(pygame.K_PAGEUP,): 4,
}
EMPTY_ACTION_NAMES = [
"noop",
]
EMPTY_KEYMAP = {}