#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))))