diff --git a/babysnake/__init__.py b/babysnake/__init__.py index 2e0f3da..776d2cc 100644 --- a/babysnake/__init__.py +++ b/babysnake/__init__.py @@ -101,6 +101,7 @@ def create_game(): }, board_size=(bw, bh), framerate=6, + show_state=False, ) forager.position = (randint(0, bw - 1), randint(0, bh - 1)) food.relocate(game) diff --git a/babysnake/pyproject.toml b/babysnake/pyproject.toml index a073f61..c605c41 100644 --- a/babysnake/pyproject.toml +++ b/babysnake/pyproject.toml @@ -1,4 +1,4 @@ [tool.retro-gamer] actions = ["KEY_RIGHT", "KEY_UP", "KEY_LEFT", "KEY_DOWN"] reward = "reward" -character_set = ["@", "*"] +observation_function = "babysnake_env:get_state" diff --git a/babysnake_env.py b/babysnake_env.py new file mode 100644 index 0000000..9f5d2f5 --- /dev/null +++ b/babysnake_env.py @@ -0,0 +1,13 @@ +"""BabySnake's observation_function: maps a game to its tabular Q-learning state. + +Referenced from babysnake/pyproject.toml's [tool.retro-gamer] section, and +used directly by train_babysnake.py via GameEnvironment. +""" + +ACTIONS = ["KEY_RIGHT", "KEY_DOWN", "KEY_LEFT", "KEY_UP"] + + +def get_state(game): + """Return BabySnake's state as a hashable (agent_x, agent_y, food_x, food_y) tuple.""" + s = game.state + return (int(s['agent_x']), int(s['agent_y']), int(s['food_x']), int(s['food_y']))