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:
48
pacman-project/adt-pacman.rkt
Normal file
48
pacman-project/adt-pacman.rkt
Normal 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))))
|
||||||
Reference in New Issue
Block a user