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