#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))))