64 lines
2.0 KiB
Racket
64 lines
2.0 KiB
Racket
#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))))
|