first commit
BIN
pacman-project/.DS_Store
vendored
Normal file
0
pacman-project/Icon
Normal file
39
pacman-project/coin.rkt
Normal file
@@ -0,0 +1,39 @@
|
||||
#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!))))
|
||||
70
pacman-project/game-logic.rkt
Normal file
@@ -0,0 +1,70 @@
|
||||
#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!)))))))))))
|
||||
19
pacman-project/game.rkt
Normal file
@@ -0,0 +1,19 @@
|
||||
#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!)))
|
||||
|
||||
19
pacman-project/game.rkt~
Normal file
@@ -0,0 +1,19 @@
|
||||
#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!)))
|
||||
|
||||
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))))
|
||||
52
pacman-project/keyboard-handler.rkt
Normal file
@@ -0,0 +1,52 @@
|
||||
#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!))))
|
||||
30
pacman-project/main-loop.rkt
Normal file
@@ -0,0 +1,30 @@
|
||||
#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))))))))
|
||||
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"))))
|
||||
BIN
pacman-project/pacman-sprites/.DS_Store
vendored
Normal file
BIN
pacman-project/pacman-sprites/100-points.png
Normal file
|
After Width: | Height: | Size: 662 B |
BIN
pacman-project/pacman-sprites/1600-points.png
Normal file
|
After Width: | Height: | Size: 682 B |
BIN
pacman-project/pacman-sprites/200-points.png
Normal file
|
After Width: | Height: | Size: 682 B |
BIN
pacman-project/pacman-sprites/300-points.png
Normal file
|
After Width: | Height: | Size: 684 B |
BIN
pacman-project/pacman-sprites/400-points.png
Normal file
|
After Width: | Height: | Size: 680 B |
BIN
pacman-project/pacman-sprites/500-points.png
Normal file
|
After Width: | Height: | Size: 679 B |
BIN
pacman-project/pacman-sprites/700-points.png
Normal file
|
After Width: | Height: | Size: 680 B |
BIN
pacman-project/pacman-sprites/800-points.png
Normal file
|
After Width: | Height: | Size: 671 B |
|
After Width: | Height: | Size: 125 KiB |
BIN
pacman-project/pacman-sprites/Pac-Man General Sprites.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
pacman-project/pacman-sprites/apple.png
Normal file
|
After Width: | Height: | Size: 711 B |
BIN
pacman-project/pacman-sprites/bell.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
pacman-project/pacman-sprites/blinky-down-1.png
Normal file
|
After Width: | Height: | Size: 718 B |
BIN
pacman-project/pacman-sprites/blinky-down-2.png
Normal file
|
After Width: | Height: | Size: 716 B |
BIN
pacman-project/pacman-sprites/blinky-left-1.png
Normal file
|
After Width: | Height: | Size: 715 B |
BIN
pacman-project/pacman-sprites/blinky-left-2.png
Normal file
|
After Width: | Height: | Size: 713 B |
BIN
pacman-project/pacman-sprites/blinky-right-1.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
pacman-project/pacman-sprites/blinky-right-2.png
Normal file
|
After Width: | Height: | Size: 717 B |
BIN
pacman-project/pacman-sprites/blinky-up-1.png
Normal file
|
After Width: | Height: | Size: 703 B |
BIN
pacman-project/pacman-sprites/blinky-up-2.png
Normal file
|
After Width: | Height: | Size: 702 B |
BIN
pacman-project/pacman-sprites/cherry.png
Normal file
|
After Width: | Height: | Size: 750 B |
BIN
pacman-project/pacman-sprites/clyde-down-1.png
Normal file
|
After Width: | Height: | Size: 729 B |
BIN
pacman-project/pacman-sprites/clyde-down-2.png
Normal file
|
After Width: | Height: | Size: 732 B |
BIN
pacman-project/pacman-sprites/clyde-left-1.png
Normal file
|
After Width: | Height: | Size: 733 B |
BIN
pacman-project/pacman-sprites/clyde-left-2.png
Normal file
|
After Width: | Height: | Size: 730 B |
BIN
pacman-project/pacman-sprites/clyde-right-1.png
Normal file
|
After Width: | Height: | Size: 736 B |
BIN
pacman-project/pacman-sprites/clyde-right-2.png
Normal file
|
After Width: | Height: | Size: 736 B |
BIN
pacman-project/pacman-sprites/clyde-up-1.png
Normal file
|
After Width: | Height: | Size: 723 B |
BIN
pacman-project/pacman-sprites/clyde-up-2.png
Normal file
|
After Width: | Height: | Size: 724 B |
BIN
pacman-project/pacman-sprites/flower.png
Normal file
|
After Width: | Height: | Size: 719 B |
BIN
pacman-project/pacman-sprites/ghost-eyes-down.png
Normal file
|
After Width: | Height: | Size: 661 B |
BIN
pacman-project/pacman-sprites/ghost-eyes-left.png
Normal file
|
After Width: | Height: | Size: 658 B |
BIN
pacman-project/pacman-sprites/ghost-eyes-right.png
Normal file
|
After Width: | Height: | Size: 657 B |
BIN
pacman-project/pacman-sprites/ghost-eyes-up.png
Normal file
|
After Width: | Height: | Size: 662 B |
BIN
pacman-project/pacman-sprites/inky-down-1.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
pacman-project/pacman-sprites/inky-down-2.png
Normal file
|
After Width: | Height: | Size: 721 B |
BIN
pacman-project/pacman-sprites/inky-left-1.png
Normal file
|
After Width: | Height: | Size: 719 B |
BIN
pacman-project/pacman-sprites/inky-left-2.png
Normal file
|
After Width: | Height: | Size: 718 B |
BIN
pacman-project/pacman-sprites/inky-right-1.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
pacman-project/pacman-sprites/inky-right-2.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
pacman-project/pacman-sprites/inky-up-1.png
Normal file
|
After Width: | Height: | Size: 704 B |
BIN
pacman-project/pacman-sprites/inky-up-2.png
Normal file
|
After Width: | Height: | Size: 702 B |
BIN
pacman-project/pacman-sprites/key.png
Normal file
|
After Width: | Height: | Size: 697 B |
BIN
pacman-project/pacman-sprites/melon.png
Normal file
|
After Width: | Height: | Size: 762 B |
BIN
pacman-project/pacman-sprites/orange.png
Normal file
|
After Width: | Height: | Size: 713 B |
BIN
pacman-project/pacman-sprites/pacman-closed.png
Normal file
|
After Width: | Height: | Size: 694 B |
BIN
pacman-project/pacman-sprites/pacman-death-1.png
Normal file
|
After Width: | Height: | Size: 678 B |
BIN
pacman-project/pacman-sprites/pacman-death-10.png
Normal file
|
After Width: | Height: | Size: 657 B |
BIN
pacman-project/pacman-sprites/pacman-death-11.png
Normal file
|
After Width: | Height: | Size: 644 B |
BIN
pacman-project/pacman-sprites/pacman-death-12.png
Normal file
|
After Width: | Height: | Size: 618 B |
BIN
pacman-project/pacman-sprites/pacman-death-13.png
Normal file
|
After Width: | Height: | Size: 689 B |
BIN
pacman-project/pacman-sprites/pacman-death-2.png
Normal file
|
After Width: | Height: | Size: 693 B |
BIN
pacman-project/pacman-sprites/pacman-death-3.png
Normal file
|
After Width: | Height: | Size: 687 B |
BIN
pacman-project/pacman-sprites/pacman-death-4.png
Normal file
|
After Width: | Height: | Size: 683 B |
BIN
pacman-project/pacman-sprites/pacman-death-5.png
Normal file
|
After Width: | Height: | Size: 673 B |
BIN
pacman-project/pacman-sprites/pacman-death-6.png
Normal file
|
After Width: | Height: | Size: 662 B |
BIN
pacman-project/pacman-sprites/pacman-death-7.png
Normal file
|
After Width: | Height: | Size: 654 B |
BIN
pacman-project/pacman-sprites/pacman-death-8.png
Normal file
|
After Width: | Height: | Size: 667 B |
BIN
pacman-project/pacman-sprites/pacman-death-9.png
Normal file
|
After Width: | Height: | Size: 665 B |
BIN
pacman-project/pacman-sprites/pacman-open.png
Normal file
|
After Width: | Height: | Size: 692 B |
BIN
pacman-project/pacman-sprites/pinky-down-1.png
Normal file
|
After Width: | Height: | Size: 726 B |
BIN
pacman-project/pacman-sprites/pinky-down-2.png
Normal file
|
After Width: | Height: | Size: 723 B |
BIN
pacman-project/pacman-sprites/pinky-left-1.png
Normal file
|
After Width: | Height: | Size: 721 B |
BIN
pacman-project/pacman-sprites/pinky-left-2.png
Normal file
|
After Width: | Height: | Size: 721 B |
BIN
pacman-project/pacman-sprites/pinky-right-1.png
Normal file
|
After Width: | Height: | Size: 725 B |
BIN
pacman-project/pacman-sprites/pinky-right-2.png
Normal file
|
After Width: | Height: | Size: 725 B |
BIN
pacman-project/pacman-sprites/pinky-up-1.png
Normal file
|
After Width: | Height: | Size: 713 B |
BIN
pacman-project/pacman-sprites/pinky-up-2.png
Normal file
|
After Width: | Height: | Size: 714 B |
BIN
pacman-project/pacman-sprites/scared-ghost-blue-1.png
Normal file
|
After Width: | Height: | Size: 725 B |
BIN
pacman-project/pacman-sprites/scared-ghost-blue-2.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
pacman-project/pacman-sprites/scared-ghost-white-2.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
pacman-project/pacman-sprites/scared-ghost-white=1.png
Normal file
|
After Width: | Height: | Size: 723 B |
BIN
pacman-project/pacman-sprites/strawberry.png
Normal file
|
After Width: | Height: | Size: 734 B |
69
pacman-project/pacman.rkt
Normal file
@@ -0,0 +1,69 @@
|
||||
#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)))))
|
||||
39
pacman-project/pause-menu.rkt
Normal file
@@ -0,0 +1,39 @@
|
||||
#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!)))))
|
||||
BIN
pacman-project/pp1.zip
Normal file
36
pacman-project/score.rkt
Normal file
@@ -0,0 +1,36 @@
|
||||
#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!))))
|
||||
26
pacman-project/screen.rkt
Normal file
@@ -0,0 +1,26 @@
|
||||
#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!)))))
|
||||
60
pacman-project/test.rkt
Normal file
@@ -0,0 +1,60 @@
|
||||
#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)))))
|
||||
63
pacman-project/time-limit.rkt
Normal file
@@ -0,0 +1,63 @@
|
||||
#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))))
|
||||
BIN
pp1/PacMan.bmp
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
pp1/PacMan.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
pp1/PacMan_mask.png
Normal file
|
After Width: | Height: | Size: 673 B |
72
pp1/main.rkt
Normal file
@@ -0,0 +1,72 @@
|
||||
(import (scheme base)
|
||||
(scheme write)
|
||||
(pp1 graphics))
|
||||
|
||||
;; 1. Configuration
|
||||
#lang r7rs
|
||||
(define tile-size 40)
|
||||
(define wall-color "blue")
|
||||
(define pellet-color "white")
|
||||
(define pellet-size 10) ; Size of the dot
|
||||
|
||||
;; 2. Map Data (1 = Wall, 0 = Pellet)
|
||||
(define map-data
|
||||
'((1 1 1 1 1 1 1 1 1 1)
|
||||
(1 0 0 0 0 0 0 0 0 1)
|
||||
(1 0 1 1 0 0 1 1 0 1)
|
||||
(1 0 1 1 0 0 1 1 0 1)
|
||||
(1 0 0 0 0 0 0 0 0 1)
|
||||
(1 0 1 1 1 1 1 1 0 1)
|
||||
(1 0 0 0 0 0 0 0 0 1)
|
||||
(1 1 1 1 1 1 1 1 1 1)))
|
||||
|
||||
;; 3. Setup Window
|
||||
(define screen-width (* 10 tile-size))
|
||||
(define screen-height (* 8 tile-size))
|
||||
|
||||
(define screen (make-window screen-width screen-height "PacMan"))
|
||||
((screen 'set-background!) "black")
|
||||
(define game-layer ((screen 'new-layer!)))
|
||||
|
||||
;; 4. Build Level Function
|
||||
(define (build-level layer grid)
|
||||
(let loop-y ((rows grid) (y 0))
|
||||
(unless (null? rows)
|
||||
(let loop-x ((cols (car rows)) (x 0))
|
||||
(unless (null? cols)
|
||||
(let ((val (car cols))
|
||||
(tile (make-tile tile-size tile-size)[cite_start])) ; Create a fresh transparent tile [cite: 81]
|
||||
|
||||
(cond
|
||||
;; CASE 1: WALL
|
||||
((= val 1)
|
||||
((tile 'draw-rectangle!) [cite_start]0 0 tile-size tile-size wall-color) [cite: 85]
|
||||
((tile 'set-x!) (* x tile-size))
|
||||
((tile 'set-y!) (* y tile-size))
|
||||
((layer 'add-drawable!) [cite_start]tile)) [cite: 158]
|
||||
|
||||
;; CASE 2: PELLET (DOT)
|
||||
((= val 0)
|
||||
;; Calculate offset to center the dot
|
||||
(let ((offset (/ (- tile-size pellet-size) 2)))
|
||||
((tile 'draw-ellipse!) [cite_start]offset offset pellet-size pellet-size pellet-color) [cite: 86]
|
||||
((tile 'set-x!) (* x tile-size))
|
||||
((tile 'set-y!) (* y tile-size))
|
||||
((layer 'add-drawable!) tile))))
|
||||
|
||||
(loop-x (cdr cols) (+ x 1))))
|
||||
(loop-y (cdr rows) (+ y 1)))))
|
||||
|
||||
;; 5. Run it
|
||||
(build-level game-layer map-data)
|
||||
|
||||
;; 6. Add Pacman (on top)
|
||||
(generate-mask "/home/joren/Downloads/pp1/PacMan.bmp" "black") ; Ensure background color matches your image
|
||||
(define pacman (make-bitmap-tile
|
||||
"/home/joren/Downloads/pp1/PacMan.bmp"
|
||||
"/home/joren/Downloads/pp1/PacMan_mask.png"))
|
||||
|
||||
;; Place Pacman at (1, 1)
|
||||
((pacman 'set-x!) (* 1 tile-size))
|
||||
((pacman 'set-y!) (* 1 tile-size))
|
||||
((game-layer 'add-drawable!) pacman)
|
||||
16
pp1/main.rkt~
Normal file
@@ -0,0 +1,16 @@
|
||||
#lang r7rs
|
||||
(import (scheme base)
|
||||
(scheme write)
|
||||
(pp1 graphics))
|
||||
|
||||
;;GUI;;
|
||||
|
||||
;window;
|
||||
(define screen-width 600)
|
||||
(define screen-height 700)
|
||||
(define screen (make-window screen-width screen-height "PacMan"))
|
||||
((screen 'set-background!) "black")
|
||||
|
||||
;pacman;
|
||||
(define pacman_image (get-bitmap "/Users/yousraajridi/Desktop/pacman1.png"))
|
||||
(define pacman (get-bitmap-section pacman_image 50 50 20 20))
|
||||
1
pp1/pp1/compiled/drracket/errortrace/graphics_rkt.dep
Normal file
@@ -0,0 +1 @@
|
||||
("9.0" ta6le ("c3e5c0758f9b8ecce67b10bfe77b9463dfa6fbe7" . "c087ac06cfa4a70c5517dd89b10483400966c12d") (collects #"compatibility" #"mlist.rkt") (collects #"drracket" #"private" #"drracket-errortrace-key.rkt") (collects #"racket" #"gui" #"base.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt") (collects #"racket" #"string.rkt"))
|
||||
BIN
pp1/pp1/compiled/drracket/errortrace/graphics_rkt.zo
Normal file
1
pp1/pp1/compiled/graphics_rkt.dep
Normal file
@@ -0,0 +1 @@
|
||||
("9.1" ta6le ("c3e5c0758f9b8ecce67b10bfe77b9463dfa6fbe7" . "4e2cba1cdda1424dfa165dc344391a01e09bfc30") (collects #"compatibility" #"mlist.rkt") (collects #"racket" #"gui" #"base.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt") (collects #"racket" #"string.rkt"))
|
||||