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