first commit
This commit is contained in:
60
pacman-project/key.rkt
Normal file
60
pacman-project/key.rkt
Normal file
@@ -0,0 +1,60 @@
|
||||
#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))))
|
||||
Reference in New Issue
Block a user