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>
53 lines
1.8 KiB
Racket
53 lines
1.8 KiB
Racket
#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)))
|