#lang r7rs ; Time limit ADT ; (define-library (pacman-project time-limit) (import (scheme base) (pp1 graphics) (pacman-project screen)) (export draw-time-limit! decrease-time-limit! update-time-limit! time-up?) (begin (define time-remaining 60) ;1 min = 60 seconden (define time-since-last-tick 0) (define time-layer (make-new-layer!)) (define time-tile (make-tile screen-width screen-height)) ((time-layer 'add-drawable!) time-tile) ;omn de tijdslimiet mooi op het scherm te kunnen krijgen (define (format-time seconds) (let* ((minutes (quotient seconds 60)) ;om het aantal minuten te krijgen (seconds (remainder seconds 60)) ;om het aantal seconden te krijgen (min-str (number->string minutes)) (sec-str (number->string seconds))) (string-append min-str ":" (if (< seconds 10) (string-append "0" sec-str) ;om .. : 0.. te krijgen sec-str)))) ;anders gwn tekenen ;teken de remaning time op het scherm (define (draw-time-limit!) ((time-tile 'draw-text!) "Time remaining:" 35 710 300 "white") ((time-tile 'draw-rectangle!) 670 0 24 screen-height "white") ((time-tile 'draw-text!) (format-time time-remaining) 40 800 400 "white")) ;tijd verminderdt met 1 seconde (define (decrease-time-limit! ms) (set! time-since-last-tick (+ time-since-last-tick ms)) (when (>= time-since-last-tick 1000) (set! time-since-last-tick 0) (when (> time-remaining 0) (set! time-remaining (- time-remaining 1)) ((time-tile 'clear!)) (draw-time-limit!)))) ;tijd verhogen met 1 seconde wanneer pacman een muntje opeet (define (update-time-limit!) (set! time-remaining (+ time-remaining 1)) ((time-tile 'clear!)) (draw-time-limit!)) (define (time-up?) (= time-remaining 0))))