diff --git a/pacman-project/adt-pacman.rkt b/pacman-project/adt-pacman.rkt new file mode 100644 index 0000000..cc050b6 --- /dev/null +++ b/pacman-project/adt-pacman.rkt @@ -0,0 +1,48 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Pac-Man ADT ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Het Pac-Man ADT beheert de logische toestand van de speler: positie op het +;; grid en de huidige richting. Bevat GEEN grafische code. + +(define-library (pacman-project adt-pacman) + (import (scheme base) + (pacman-project adt-positie)) + (export maak-pacman) + + (begin + + ;; maak-pacman :: number, number -> pacman + ;; Maakt een Pac-Man object aan op de opgegeven startpositie (rij, kolom). + (define (maak-pacman start-rij start-kolom) + (let ((positie (maak-positie start-rij start-kolom)) + (richting 'rechts)) + + ;; positie! :: positie -> / + ;; Vervangt de huidige positie. + (define (positie! nieuwe-positie) + (set! positie nieuwe-positie)) + + ;; richting! :: symbol -> / + ;; Past de huidige richting aan. + (define (richting! nieuwe-richting) + (set! richting nieuwe-richting)) + + ;; beweeg! :: number, number -> / + ;; Verplaatst Pac-Man met een delta op het grid. + (define (beweeg! delta-rij delta-kolom) + ((positie 'rij!) (+ (positie 'rij) delta-rij)) + ((positie 'kolom!) (+ (positie 'kolom) delta-kolom))) + + ;; dispatch-pacman :: symbol -> any + (define (dispatch-pacman msg) + (cond ((eq? msg 'positie) positie) + ((eq? msg 'positie!) positie!) + ((eq? msg 'richting) richting) + ((eq? msg 'richting!) richting!) + ((eq? msg 'beweeg!) beweeg!) + (else (error "Pac-Man ADT -- Onbekend bericht:" msg)))) + + dispatch-pacman))))