Migrate babysnake to retro_gamer's observation_function

BabySnake's tabular Q-learning exercise needs a small discrete state,
not the flattened board encoding retro_gamer normally produces. Define
get_state(game) in babysnake_env.py, returning a plain
(agent_x, agent_y, food_x, food_y) tuple, and point babysnake's
observation_function at it instead of declaring a character_set.
Disable the on-screen state overlay so it doesn't clutter the
terminal watch view.
This commit is contained in:
Chris Proctor
2026-06-24 07:50:20 -04:00
parent 3d42de7b12
commit 7788e34ebd
3 changed files with 15 additions and 1 deletions

13
babysnake_env.py Normal file
View File

@@ -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']))