In dit deel van de opgave implementeren we de beweging van ons karakter binnen de wereld van Sokoban. Hiervoor hoeven we niets van de parsing te kennen, behalve ons gedeeld datatype World. We hoeven hier dus ook geen IO te gebruiken.

In onderstaande wereld kan ons karakter (@) enkel naar boven en naar onder bewegen. Bij het naar onder bewegen zal het een doos verduwen. Naar links staat een muur in de weg en rechts bevinden zich twee dozen na elkaar. (De testen zijn exact deze vier bewegingen.)

###
# ####
#@oo #
#o####
#.#
###

Als dit deel en “Sokoban - parsing” af zijn, kan je beide combineren in 1 bestand tesamen met een deel code om de GUI te voorzien. Gebruik hiervoor de play methode van Gloss:

play :: Display                   -- Het scherm waarop getekend wordt
     -> Color                     -- De achtergrondkleur
     -> Int                       -- Hoeveel FPS we willen berekenen
     -> world                     -- de initiële wereld
     -> (world -> Picture)        -- de render functie
     -> (Event -> world -> world) -- de event-handle functie
     -> (Float -> world -> world) -- de time-handle functie
     -> IO ()

Hierbij zijn:

Merk tenslotte nog op dat je met ESC gewoon Gloss kan afsluiten, en dat play en main hetzelfde returntype hebben.