#lang r7rs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Spel ADT ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Het top-level spel-object dat het level verbindt met het teken-ADT. ;; Registreert de callbacks voor de spellus, toetsen en tekenen. (define-library (pacman-project adt-spel) (import (scheme base) (pacman-project constanten) (pacman-project adt-level) (pacman-project adt-teken)) (export maak-spel) (begin ;; maak-spel :: -> spel ;; Maakt het spel-object aan. (define (maak-spel) (let ((level (maak-level)) (teken (maak-teken venster-breedte-px venster-hoogte-px))) ;; toets-procedure :: symbol, any -> / ;; Verwerkt toetsaanslagen en stuurt ze door naar het level. (define (toets-procedure status toets) (when (eq? status 'pressed) ((level 'toets!) toets))) ;; spel-lus-procedure :: number -> / ;; Wordt elk frame aangeroepen voor game-state updates. (define (spel-lus-procedure delta-tijd) ((level 'update!) delta-tijd)) ;; start! :: -> / ;; Start het spel door alle callbacks te registreren. (define (start!) ((teken 'set-spel-lus-functie!) spel-lus-procedure) ((teken 'set-toets-functie!) toets-procedure) ((teken 'start-tekenen!) dispatch-spel)) ;; dispatch-spel :: symbol -> any (define (dispatch-spel msg) (cond ((eq? msg 'start!) start!) ((eq? msg 'level) level) (else (error "Spel ADT -- Onbekend bericht:" msg)))) dispatch-spel))))