Refactor(Pac-Man ADT): Encapsulate Pac-Man state as message-passing ADT

Pure logic ADT with grid-based positie, richting, beweeg! method.
All sprite/animation code removed - drawing responsibility in adt-teken.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
joren
2026-03-23 10:50:49 +01:00
parent b342eeaeff
commit 4d74e42fe1

View File

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