Pure logic ADT with verlaag!/verhoog! mutators, tijd-op? predicate, and formatteer-tijd method. No graphics code. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
64 lines
2.5 KiB
Racket
64 lines
2.5 KiB
Racket
#lang r7rs
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Tijdslimiet ADT ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; Beheert de aftellende tijdslimiet van het spel. Bevat GEEN grafische code.
|
|
|
|
(define-library (pacman-project adt-tijdslimiet)
|
|
(import (scheme base)
|
|
(pacman-project constanten))
|
|
(export maak-tijdslimiet)
|
|
|
|
(begin
|
|
|
|
;; maak-tijdslimiet :: -> tijdslimiet
|
|
;; Maakt een nieuw tijdslimiet-object aan.
|
|
(define (maak-tijdslimiet)
|
|
(let ((resterende-tijd start-tijd-seconden)
|
|
(tijd-sinds-laatste-tick 0))
|
|
|
|
;; verlaag! :: number -> /
|
|
;; Verlaagt de tijd op basis van het aantal verstreken milliseconden.
|
|
(define (verlaag! ms)
|
|
(set! tijd-sinds-laatste-tick (+ tijd-sinds-laatste-tick ms))
|
|
(when (>= tijd-sinds-laatste-tick ms-per-seconde)
|
|
(set! tijd-sinds-laatste-tick 0)
|
|
(when (> resterende-tijd 0)
|
|
(set! resterende-tijd (- resterende-tijd 1)))))
|
|
|
|
;; verhoog! :: -> /
|
|
;; Verhoogt de resterende tijd met een bonus (bij het eten van een muntje).
|
|
(define (verhoog!)
|
|
(set! resterende-tijd (+ resterende-tijd tijd-bonus-per-muntje)))
|
|
|
|
;; tijd-op? :: -> boolean
|
|
;; Controleert of de tijd verstreken is.
|
|
(define (tijd-op?)
|
|
(= resterende-tijd 0))
|
|
|
|
;; formatteer-tijd :: -> string
|
|
;; Geeft de resterende tijd terug als "m:ss" string.
|
|
(define (formatteer-tijd)
|
|
(let* ((minuten (quotient resterende-tijd 60))
|
|
(seconden (remainder resterende-tijd 60))
|
|
(min-str (number->string minuten))
|
|
(sec-str (number->string seconden)))
|
|
(string-append min-str
|
|
":"
|
|
(if (< seconden 10)
|
|
(string-append "0" sec-str)
|
|
sec-str))))
|
|
|
|
;; dispatch-tijdslimiet :: symbol -> any
|
|
(define (dispatch-tijdslimiet msg)
|
|
(cond ((eq? msg 'resterende-tijd) resterende-tijd)
|
|
((eq? msg 'verlaag!) verlaag!)
|
|
((eq? msg 'verhoog!) verhoog!)
|
|
((eq? msg 'tijd-op?) tijd-op?)
|
|
((eq? msg 'formatteer-tijd) formatteer-tijd)
|
|
(else (error "Tijdslimiet ADT -- Onbekend bericht:" msg))))
|
|
|
|
dispatch-tijdslimiet))))
|