Files
functional-programming-snake/scala/solutions/Game.scala
T
2026-10-29 00:07:27 +01:00

15 lines
670 B
Scala

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)