diff --git a/pacman-project/coin.rkt b/pacman-project/coin.rkt deleted file mode 100644 index c08943c..0000000 --- a/pacman-project/coin.rkt +++ /dev/null @@ -1,39 +0,0 @@ -#lang r7rs - -(define-library (pacman-project coin) - (import (scheme base) - (pp1 graphics) - (pacman-project screen) - (pacman-project maze)) - - (export draw-coins! - remove-coin!) - - (begin - - (define coin-size-offset 20) - - (define coins-layer (make-new-layer!)) - (define coin-tile (make-tile screen-width screen-height)) - ((coins-layer 'add-drawable!) coin-tile) - - ;tekent de muntjes - (define (draw-coins!) - (do ((row 0 (+ row 1))) - ((= row maze-rows)) - (do ((col 0 (+ col 1))) - ((= col maze-cols)) - (when (cell-coin? row col) - ((coin-tile 'draw-rectangle!) - (+ (* col cell-size) 7) - (+ (* row cell-size) maze-offset-y 7) - (- cell-size coin-size-offset) - (- cell-size coin-size-offset) - "yellow"))))) - - (draw-coins!) - - ;muntjes verwijderen - (define (remove-coin! row col) - ((coin-tile 'clear!)) ;alle coins verwijderen en alleen de coins die niet verwijderdt zijn tekenen - (draw-coins!)))) diff --git a/pacman-project/game-logic.rkt b/pacman-project/game-logic.rkt deleted file mode 100644 index 59a7579..0000000 --- a/pacman-project/game-logic.rkt +++ /dev/null @@ -1,70 +0,0 @@ -#lang r7rs - -; Game-logic ; - - -(define-library (pacman-project game-logic) - (import (scheme base) - (pacman-project maze) - (pacman-project pacman) - (pacman-project coin) - (pacman-project key) - (pacman-project score) - (pacman-project time-limit)) - - (export move-pacman!) - - (begin - - (define key-taken? #f) - - ;muntje opeten - (define (eat-coin! row col) - (cell-set! row col 2) - (remove-coin! row col)) - - ;sleutel oppakem - (define (take-key! row col) - (cell-set! row col 2) - (set! key-taken? #t) - (remove-key!)) - - ;beweegt pacman en checkt voor muren, muntjes, sleutels etc. - (define (move-pacman! x y) - (when (not (time-up?)) - (let* ((cur-x (pacman-x)) - (cur-y (pacman-y)) - (next-x (+ cur-x x)) - (next-y (+ cur-y y)) - (grid-col (quotient next-x cell-size)) - (grid-row (quotient (- next-y maze-offset-y) cell-size))) - - (cond - ;van links naar rechts - ((< grid-col 0) - (set-pacman-x! (* (- maze-cols 1) cell-size)) - (set-pacman-y! next-y)) - - ;van rechts naar links - ((>= grid-col maze-cols) - (set-pacman-x! 0) - (set-pacman-y! next-y)) - - ;als het een deur is openen we de deur - ((cell-door? grid-row grid-col) - (when key-taken? - (remove-door! grid-row grid-col))) - - ;normale beweging - (else - (when (not (cell-wall? grid-row grid-col)) - (set-pacman-x! next-x) - (set-pacman-y! next-y) - ;om te zien wat er op de volgende pos staat - (cond - ((cell-key? grid-row grid-col) - (take-key! grid-row grid-col)) - ((cell-coin? grid-row grid-col) - (eat-coin! grid-row grid-col) - (update-time-limit!) - (update-score!))))))))))) diff --git a/pacman-project/game.rkt b/pacman-project/game.rkt deleted file mode 100644 index 0ce546b..0000000 --- a/pacman-project/game.rkt +++ /dev/null @@ -1,19 +0,0 @@ -#lang r7rs - -; Game ; - -(define-library (pacman-project game) - (import (scheme base) - (pacman-project score) - (pacman-project time-limit) - (pacman-project keyboard-handler) - (pacman-project main-loop) - (pacman-project test)) - - (begin - ;om het spel op te starten - (start-main-loop!) - (start-keyboard-handler!) - (draw-score!) - (draw-time-limit!))) - \ No newline at end of file diff --git a/pacman-project/game.rkt~ b/pacman-project/game.rkt~ deleted file mode 100644 index 0ce546b..0000000 --- a/pacman-project/game.rkt~ +++ /dev/null @@ -1,19 +0,0 @@ -#lang r7rs - -; Game ; - -(define-library (pacman-project game) - (import (scheme base) - (pacman-project score) - (pacman-project time-limit) - (pacman-project keyboard-handler) - (pacman-project main-loop) - (pacman-project test)) - - (begin - ;om het spel op te starten - (start-main-loop!) - (start-keyboard-handler!) - (draw-score!) - (draw-time-limit!))) - \ No newline at end of file diff --git a/pacman-project/key.rkt b/pacman-project/key.rkt deleted file mode 100644 index d03fe77..0000000 --- a/pacman-project/key.rkt +++ /dev/null @@ -1,60 +0,0 @@ -#lang r7rs - -(#%require (only racket/base random)) - - -; Key ADT ; - -(define-library (pacman-project key) - (import (scheme base) - (pp1 graphics) - (pacman-project screen) - (pacman-project maze) - (pacman-project coin)) - - (export draw-key! - remove-key!) - - (begin - - (define key-layer (make-new-layer!)) - - ;bitmap voor de sleutel - (define key (make-bitmap-tile "pacman-sprites/key.png")) - ((key 'set-scale!) 1.5) - ((key-layer 'add-drawable!) key) - - ;sleutel naast de score tekenen - (define taken-key (make-bitmap-tile "pacman-sprites/key.png")) - ((taken-key 'set-scale!) 3) - ((taken-key 'set-x!) 20) - ((taken-key 'set-y!) 35) - - - - ;de sleutel op een random positie in het doolhof plaatsen - (define (place-key-at-random-position!) - (let loop ((attempts 0)) ;attempts is het aantal keer dat er een key geplaats wordt. - ;dit wordt gedaan zodat er geen herhaling is bij het plaatsen van keys - (if (>= attempts 1000) - (error "valid position not found") ; - (let ((col (random 0 maze-cols)) - (row (random 0 maze-rows))) - (if (cell-coin? row col) ;als de cell een valid cell is (dus de plek waar een coin kan komen) - (begin - ((key 'set-x!) (* cell-size col)) - ((key 'set-y!) (+ (* row cell-size) maze-offset-y)) - (cell-set! row col 3) - (remove-coin! row col)) - (loop (+ attempts 1))))))) - - ;sleutel tekenen - (define (draw-key!) - (place-key-at-random-position!)) - - (draw-key!) - - ;sleutel verwijderen en aanduiden dat de sleutel gepakt werd - (define (remove-key!) - ((key-layer 'remove-drawable!) key) - ((key-layer 'add-drawable!) taken-key)))) diff --git a/pacman-project/keyboard-handler.rkt b/pacman-project/keyboard-handler.rkt deleted file mode 100644 index 6037e12..0000000 --- a/pacman-project/keyboard-handler.rkt +++ /dev/null @@ -1,52 +0,0 @@ -#lang r7rs - -; Keyboard-handler ; - - -(define-library (pacman-project keyboard-handler) - (import (scheme base) - (scheme write) - (pacman-project screen) - (pacman-project maze) - (pacman-project pacman) - (pacman-project game-logic) - (pacman-project pause-menu) - (pacman-project main-loop)) - - (export start-keyboard-handler!) - - (begin - - ;toetsen te beheren - (define (handle-keyboard! state key) - (when (eq? state 'pressed) - (cond - ((eq? key 'escape) - (if (not (paused?)) - (begin - (set-paused! #t) - (stop-main-loop!) - (draw-pause-menu!)) - (begin - (remove-pause-menu!) - (set-paused! #f) - (start-main-loop!)))) - ((not (paused?)) - (let ((cell cell-size)) - (cond - ((eq? key 'right) - (move-pacman! cell 0) - (rotate-pacman! 'right)) - ((eq? key 'left) - (move-pacman! (- cell) 0) - (rotate-pacman! 'left)) - ((eq? key 'up) - (move-pacman! 0 (- cell)) - (rotate-pacman! 'up)) - ((eq? key 'down) - (move-pacman! 0 cell) - (rotate-pacman! 'down)))))))) - - ;zodat de keyboard geconnecteert is met het spelscherm - (define (start-keyboard-handler!) - ((screen 'set-key-callback!) handle-keyboard!)))) diff --git a/pacman-project/main-loop.rkt b/pacman-project/main-loop.rkt deleted file mode 100644 index 448e5c2..0000000 --- a/pacman-project/main-loop.rkt +++ /dev/null @@ -1,30 +0,0 @@ -#lang r7rs - -; Main loop ADT ; - -(define-library (pacman-project main-loop) - (import (scheme base) - (pacman-project screen) - (pacman-project pacman) - (pacman-project time-limit)) - - (export start-main-loop! - stop-main-loop!) - - (begin - - ;stopt de game-loop - (define (stop-main-loop!) - ((screen 'set-update-callback!) - (lambda (ms) (values)))) - - ;start de game-loop - (define (start-main-loop!) - ((screen 'set-update-callback!) - (lambda (ms) - (cond - ((time-up?) ;wanneer de tijd om is stopt het spel - (stop-main-loop!)) - (else - (animate-pacman! ms) - (decrease-time-limit! ms)))))))) diff --git a/pacman-project/maze.rkt b/pacman-project/maze.rkt deleted file mode 100644 index 7399f9d..0000000 --- a/pacman-project/maze.rkt +++ /dev/null @@ -1,128 +0,0 @@ -#lang r7rs - -; Maze ADT ; - - -(define-library (pacman-project maze) - (import (scheme base) - (pp1 graphics) - (pacman-project screen)) - - (export maze-rows - maze-cols - cell-size - maze-offset-y - cell-ref - cell-set! - cell-wall? - cell-coin? - cell-empty? - cell-key? - cell-door? - draw-maze! - remove-door!) - - (begin - - ;conmstanten - (define cell-size 24) - (define maze-offset-y 97) ;offsets om de maze mooi te kunnen plaatsen - (define maze-size-offset 6) - - ;we maken een maze aan van 31 rijen x 28 kolommen - ;vector ipv #() omda vector mutable is en #() ni. - - ;0 = muntje - ;1 = muur - ;2 = leeg - ;3 = sleutel - ;4 = deur - (define maze - (vector (vector 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) - (vector 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1) - (vector 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1) - (vector 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1) - (vector 1 0 1 4 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1) - (vector 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1) - (vector 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1) - (vector 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1) - (vector 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1) - (vector 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1) - (vector 2 2 2 2 2 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 2 2 2 2 2) - (vector 2 2 2 2 2 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 2 2 2 2 2) - (vector 2 2 2 2 2 1 0 1 1 0 1 1 1 4 4 1 1 1 0 1 1 0 1 2 2 2 2 2) - (vector 1 1 1 1 1 1 0 1 1 0 1 2 2 2 2 2 2 1 0 1 1 0 1 1 1 1 1 1) - (vector 2 0 0 0 0 0 0 0 0 0 1 2 2 2 2 2 2 1 0 0 0 0 0 0 0 0 0 2) - (vector 1 1 1 1 1 1 0 1 1 0 1 2 2 2 2 2 2 1 0 1 1 0 1 1 1 1 1 1) - (vector 2 2 2 2 2 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 2 2 2 2 2) - (vector 2 2 2 2 2 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 2 2 2 2 2) - (vector 2 2 2 2 2 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 2 2 2 2 2) - (vector 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1) - (vector 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1) - (vector 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1) - (vector 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1) - (vector 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1) - (vector 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1) - (vector 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1) - (vector 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 4 1 0 0 0 0 0 0 1) - (vector 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 0 0 1 1 1 1 1 0 1) - (vector 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1) - (vector 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1) - (vector 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1))) - - (define maze-rows (vector-length maze)) - (define maze-cols (vector-length (vector-ref maze 0))) - - - ;geeft waarde terug v/e cell - (define (cell-ref row col) - (vector-ref (vector-ref maze row) col)) - - ;past waarde aan v/e cell - (define (cell-set! row col value) - (vector-set! (vector-ref maze row) col value)) - - (define (cell-wall? row col) - (= (cell-ref row col) 1)) - - (define (cell-coin? row col) - (= (cell-ref row col) 0)) - - (define (cell-empty? row col) - (= (cell-ref row col) 2)) - - (define (cell-key? row col) - (= (cell-ref row col) 3)) - - (define (cell-door? row col) - (= (cell-ref row col) 4)) - - - (define maze-layer (make-new-layer!)) - (define maze-tile (make-tile screen-width screen-height)) - ((maze-layer 'add-drawable!) maze-tile) - - ;tekent de maze - (define (draw-maze!) - (do ((row 0 (+ row 1))) - ((= row maze-rows)) - (do ((col 0 (+ col 1))) - ((= col maze-cols)) - (let ((cell (cell-ref row col))) - (cond - ((= cell 1) - ((maze-tile 'draw-rectangle!) (* col cell-size) (+ (* row cell-size) maze-offset-y) (- cell-size maze-size-offset) (- cell-size maze-size-offset) "blue")) - ((= cell 4) - ((maze-tile 'draw-rectangle!) (* col cell-size) (+ (* row cell-size) maze-offset-y) (- cell-size maze-size-offset) (- cell-size maze-size-offset) "pink"))))))) ;we tekenen hier ook de deuren aangezien ze deel uitmaken van de maze - - (draw-maze!) - - ;verwijdert een deur uit de maze - (define (remove-door! row col) - (cell-set! row col 2) - ((maze-tile 'draw-rectangle!) - (* col cell-size) - (+ (* row cell-size) maze-offset-y) - (- cell-size maze-size-offset) - (- cell-size maze-size-offset) - "black")))) diff --git a/pacman-project/pacman.rkt b/pacman-project/pacman.rkt deleted file mode 100644 index a449321..0000000 --- a/pacman-project/pacman.rkt +++ /dev/null @@ -1,69 +0,0 @@ -#lang r7rs - -; Pacman ADT ; - - -(define-library (pacman-project pacman) - (import (scheme base) - (pp1 graphics) - (pacman-project screen) - (pacman-project maze)) - - (export pacman-x - pacman-y - set-pacman-x! - set-pacman-y! - animate-pacman! - rotate-pacman!) - - (begin - - (define time-since-last-animation 0) - (define animation-interval 100) - - (define pacman-layer (make-new-layer!)) - - ;bitmap-sequence voor pacman - (define pacman-bitmap-tiles - (list (make-bitmap-tile "pacman-sprites/pacman-death-1.png") - (make-bitmap-tile "pacman-sprites/pacman-closed.png") - (make-bitmap-tile "pacman-sprites/pacman-open.png"))) - - (define pacman-sprite (make-tile-sequence pacman-bitmap-tiles)) - ((pacman-sprite 'set-scale!) 1.5) - ((pacman-layer 'add-drawable!) pacman-sprite) - - ;start-positie van pacman - ((pacman-sprite 'set-x!) (* 2 cell-size)) - ((pacman-sprite 'set-y!) (+ (* 5 cell-size) maze-offset-y)) - - - ;geeft x-waarde terug - (define (pacman-x) - ((pacman-sprite 'get-x))) - - ;geeft y-waarde terug - (define (pacman-y) - ((pacman-sprite 'get-y))) - - ;past de x-waarde aan - (define (set-pacman-x! x) - ((pacman-sprite 'set-x!) x)) - - ;past de y-waarde aan - (define (set-pacman-y! y) - ((pacman-sprite 'set-y!) y)) - - ;pacman roteren obv zijn direction - (define (rotate-pacman! direction) - (cond ((eq? direction 'right) ((pacman-sprite 'rotate!) 0)) - ((eq? direction 'left) ((pacman-sprite 'rotate!) 180)) - ((eq? direction 'up) ((pacman-sprite 'rotate!) 90)) - ((eq? direction 'down) ((pacman-sprite 'rotate!) -90)))) - - ;pacman animaten door langs de bitmap sequence te gaan - (define (animate-pacman! ms) - (set! time-since-last-animation (+ time-since-last-animation ms)) - (when (>= time-since-last-animation animation-interval) - ((pacman-sprite 'set-next!)) - (set! time-since-last-animation 0))))) diff --git a/pacman-project/pause-menu.rkt b/pacman-project/pause-menu.rkt deleted file mode 100644 index 5579fb8..0000000 --- a/pacman-project/pause-menu.rkt +++ /dev/null @@ -1,39 +0,0 @@ -#lang r7rs - -; Pause-menu ADT ; - - -(define-library (pacman-project pause-menu) - (import (scheme base) - (pp1 graphics) - (pacman-project screen)) - - (export paused? - set-paused! - draw-pause-menu! - remove-pause-menu!) - - (begin - - (define pause-status #f) - - (define pause-layer (make-new-layer!)) - - ;checken of we gepauzeerd zijn - (define (paused?) - pause-status) - - ;om de pauze status aan te passen - (define (set-paused! status) - (set! pause-status status)) - - ;pauzescherm tekenen - (define (draw-pause-menu!) - (let ((pause-tile (make-tile screen-width screen-height))) - ((pause-layer 'add-drawable!) pause-tile) - ((pause-tile 'draw-rectangle!) 0 90 670 screen-height "black") - ((pause-tile 'draw-text!) "Game Paused" 40 200 400 "red"))) - - ;pauzescherm verwijderen - (define (remove-pause-menu!) - ((pause-layer 'empty!))))) diff --git a/pacman-project/score.rkt b/pacman-project/score.rkt deleted file mode 100644 index 944d17e..0000000 --- a/pacman-project/score.rkt +++ /dev/null @@ -1,36 +0,0 @@ -#lang r7rs - -; Score ADT ; - - -(define-library (pacman-project score) - (import (scheme base) - (pp1 graphics) - (pacman-project screen)) - - (export draw-score! - update-score! - get-score) - - (begin - - (define score 0) - - (define score-layer (make-new-layer!)) - (define score-tile (make-tile screen-width screen-height)) - ((score-layer 'add-drawable!) score-tile) - - ;de current score teruggeven - (define (get-score) - score) - - ;score op het scherm tekenen - (define (draw-score!) - ((score-tile 'draw-text!) - (number->string score) 40 560 20 "white")) - - ;wanneer een muntje gegeten wordt wordt de score met 10 verhoogt - (define (update-score!) - (set! score (+ score 10)) - ((score-tile 'clear!)) - (draw-score!)))) diff --git a/pacman-project/screen.rkt b/pacman-project/screen.rkt deleted file mode 100644 index 029d765..0000000 --- a/pacman-project/screen.rkt +++ /dev/null @@ -1,26 +0,0 @@ -#lang r7rs - -; Screen ADT ; - -(define-library (pacman-project screen) - (import (scheme base) - (pp1 graphics)) - - (export screen - screen-width - screen-height - make-new-layer!) - - (begin - - ;constanten - (define screen-width 1000) - (define screen-height 830) - - ;scherm aanmaken - (define screen (make-window screen-width screen-height "Pacman")) - ((screen 'set-background!) "black") - - ;nieuwe layer op her scherm maken - (define (make-new-layer!) - ((screen 'new-layer!))))) diff --git a/pacman-project/test.rkt b/pacman-project/test.rkt deleted file mode 100644 index fa76c73..0000000 --- a/pacman-project/test.rkt +++ /dev/null @@ -1,60 +0,0 @@ -#lang r7rs - -;;; Tests voor de spelinteracties van het Pac-Man project. - -(define-library (pacman-project tests) - (import (scheme base) - (scheme write) - (pp1 graphics) - (pacman-project screen) - (pacman-project maze) - (pacman-project coin) - (pacman-project key) - (pacman-project pacman) - (pacman-project score) - (pacman-project time-limit) - (pacman-project pause-menu) - (pacman-project game-logic)) - - (begin - - ;test of pacman door de muur kan of niet - (set-pacman-x! (* 1 cell-size)) - (set-pacman-y! (+ (* 1 cell-size) maze-offset-y)) - (display "Pac-Man kan niet door de muur: ") - (display (= (pacman-x) (begin (move-pacman! (- cell-size) 0) (pacman-x)))) - (newline) - - ;test of pacman een muntje opeet - (set-pacman-x! (* 4 cell-size)) - (set-pacman-y! (+ (* 5 cell-size) maze-offset-y)) - (move-pacman! cell-size 0) - (display "Muntje wordt opgegeten: ") - (display (cell-empty? 5 5)) - (newline) - (cell-set! 5 5 0) - (remove-coin! 5 5) - - ;test of de score verhoogd wordt of niet - (display "Score is verhoogd: ") - (display (>= (get-score) 10)) - (newline) - - ;check of de teleportatie werkt - (set-pacman-x! (* 0 cell-size)) - (set-pacman-y! (+ (* 14 cell-size) maze-offset-y)) - (move-pacman! (- cell-size) 0) - (display "Teleportatie links naar rechts: ") - (display (= (pacman-x) (* (- maze-cols 1) cell-size))) - (newline) - - ;test of een deur pas open gaat als de sleutel opgepakt werd. - (set-pacman-x! (* 2 cell-size)) - (set-pacman-y! (+ (* 4 cell-size) maze-offset-y)) - (let ((x-voor (pacman-x))) - (move-pacman! cell-size 0) - (display "Deur blokkeert zonder sleutel: ") - (display (= (pacman-x) x-voor)) - (newline) - (set-pacman-x! (* 2 cell-size)) - (set-pacman-y! (+ (* 5 cell-size) maze-offset-y))))) \ No newline at end of file diff --git a/pacman-project/time-limit.rkt b/pacman-project/time-limit.rkt deleted file mode 100644 index deb1216..0000000 --- a/pacman-project/time-limit.rkt +++ /dev/null @@ -1,63 +0,0 @@ -#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))))