Refactor(Positie ADT): Add grid-based position ADT with message-passing dispatch
Constructor maak-positie returns dispatch closure with rij/kolom getters, rij!/kolom! mutators, vergelijk? predicate, and beweeg method. All coordinates are in grid units, not pixels. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
52
pacman-project/adt-positie.rkt
Normal file
52
pacman-project/adt-positie.rkt
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#lang r7rs
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Positie ADT ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; Een positie stelt een locatie voor op het logische grid van het doolhof.
|
||||||
|
;; Coordinaten zijn in grid-eenheden (rij, kolom), NIET in pixels.
|
||||||
|
|
||||||
|
(define-library (pacman-project adt-positie)
|
||||||
|
(import (scheme base))
|
||||||
|
(export maak-positie)
|
||||||
|
|
||||||
|
(begin
|
||||||
|
|
||||||
|
;; maak-positie :: number, number -> positie
|
||||||
|
;; Maakt een nieuw positie-object aan met rij en kolom op het grid.
|
||||||
|
(define (maak-positie rij kolom)
|
||||||
|
|
||||||
|
;; rij! :: number -> /
|
||||||
|
;; Past de rij-coordinaat aan.
|
||||||
|
(define (rij! nieuwe-rij)
|
||||||
|
(set! rij nieuwe-rij))
|
||||||
|
|
||||||
|
;; kolom! :: number -> /
|
||||||
|
;; Past de kolom-coordinaat aan.
|
||||||
|
(define (kolom! nieuwe-kolom)
|
||||||
|
(set! kolom nieuwe-kolom))
|
||||||
|
|
||||||
|
;; vergelijk? :: positie -> boolean
|
||||||
|
;; Controleert of twee posities dezelfde coordinaten hebben.
|
||||||
|
(define (vergelijk? andere-positie)
|
||||||
|
(and (= rij (andere-positie 'rij))
|
||||||
|
(= kolom (andere-positie 'kolom))))
|
||||||
|
|
||||||
|
;; beweeg :: number, number -> positie
|
||||||
|
;; Geeft een nieuwe positie terug verschoven met delta-rij en delta-kolom.
|
||||||
|
(define (beweeg delta-rij delta-kolom)
|
||||||
|
(maak-positie (+ rij delta-rij)
|
||||||
|
(+ kolom delta-kolom)))
|
||||||
|
|
||||||
|
;; dispatch-positie :: symbol -> any
|
||||||
|
(define (dispatch-positie msg)
|
||||||
|
(cond ((eq? msg 'rij) rij)
|
||||||
|
((eq? msg 'kolom) kolom)
|
||||||
|
((eq? msg 'rij!) rij!)
|
||||||
|
((eq? msg 'kolom!) kolom!)
|
||||||
|
((eq? msg 'vergelijk?) vergelijk?)
|
||||||
|
((eq? msg 'beweeg) beweeg)
|
||||||
|
(else (error "Positie ADT -- Onbekend bericht:" msg))))
|
||||||
|
|
||||||
|
dispatch-positie)))
|
||||||
Reference in New Issue
Block a user