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 <noreply@anthropic.com>
This commit is contained in:
49
pacman-project/adt-spel.rkt
Normal file
49
pacman-project/adt-spel.rkt
Normal file
@@ -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))))
|
||||||
Reference in New Issue
Block a user