15 lines
670 B
Scala
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)
|