From d6d62083c90ec1d85472e76de7553541c2ab19a3 Mon Sep 17 00:00:00 2001 From: joren Date: Mon, 23 Mar 2026 10:53:21 +0100 Subject: [PATCH] Refactor(Spel ADT): Add top-level game orchestrator with message-passing Connects level (logic) with teken (graphics) via callbacks. Follows snake-wpo adt-spel pattern exactly. Co-Authored-By: Claude Opus 4.6 --- pacman-project/adt-spel.rkt | 49 +++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 pacman-project/adt-spel.rkt diff --git a/pacman-project/adt-spel.rkt b/pacman-project/adt-spel.rkt new file mode 100644 index 0000000..2b254e5 --- /dev/null +++ b/pacman-project/adt-spel.rkt @@ -0,0 +1,49 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Spel ADT ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Het top-level spel-object dat het level verbindt met het teken-ADT. +;; Registreert de callbacks voor de spellus, toetsen en tekenen. + +(define-library (pacman-project adt-spel) + (import (scheme base) + (pacman-project constanten) + (pacman-project adt-level) + (pacman-project adt-teken)) + (export maak-spel) + + (begin + + ;; maak-spel :: -> spel + ;; Maakt het spel-object aan. + (define (maak-spel) + (let ((level (maak-level)) + (teken (maak-teken venster-breedte-px venster-hoogte-px))) + + ;; toets-procedure :: symbol, any -> / + ;; Verwerkt toetsaanslagen en stuurt ze door naar het level. + (define (toets-procedure status toets) + (when (eq? status 'pressed) + ((level 'toets!) toets))) + + ;; spel-lus-procedure :: number -> / + ;; Wordt elk frame aangeroepen voor game-state updates. + (define (spel-lus-procedure delta-tijd) + ((level 'update!) delta-tijd)) + + ;; start! :: -> / + ;; Start het spel door alle callbacks te registreren. + (define (start!) + ((teken 'set-spel-lus-functie!) spel-lus-procedure) + ((teken 'set-toets-functie!) toets-procedure) + ((teken 'start-tekenen!) dispatch-spel)) + + ;; dispatch-spel :: symbol -> any + (define (dispatch-spel msg) + (cond ((eq? msg 'start!) start!) + ((eq? msg 'level) level) + (else (error "Spel ADT -- Onbekend bericht:" msg)))) + + dispatch-spel))))