package snake /** m05 game: one `update` turns every action into a new state; replaying a game is a fold over its actions. */ object Game: def update(state: GameState, action: Action): GameState = action match case Action.Tick => Spawn.tick(state) case Action.Turn(dir) => Rules.turn(state, dir) case _ => state // TogglePause, Restart and Frame arrive in m10 def replay(state: GameState, actions: List[Action]): GameState = actions.foldLeft(state)(update) // scanLeft is foldLeft that keeps every intermediate result. def history(state: GameState, actions: List[Action]): List[GameState] = actions.scanLeft(state)(update)