From 3abc9aae5563e24a3082a906c5a25111eb31f031 Mon Sep 17 00:00:00 2001 From: joren Date: Mon, 23 Mar 2026 10:28:54 +0100 Subject: [PATCH] first commit --- README.md | 0 pacman-project/.DS_Store | Bin 0 -> 10244 bytes "pacman-project/Icon\r" | 0 pacman-project/coin.rkt | 39 + pacman-project/game-logic.rkt | 70 ++ pacman-project/game.rkt | 19 + pacman-project/game.rkt~ | 19 + pacman-project/key.rkt | 60 ++ pacman-project/keyboard-handler.rkt | 52 ++ pacman-project/main-loop.rkt | 30 + pacman-project/maze.rkt | 128 +++ pacman-project/pacman-sprites/.DS_Store | Bin 0 -> 12292 bytes pacman-project/pacman-sprites/100-points.png | Bin 0 -> 662 bytes pacman-project/pacman-sprites/1600-points.png | Bin 0 -> 682 bytes pacman-project/pacman-sprites/200-points.png | Bin 0 -> 682 bytes pacman-project/pacman-sprites/300-points.png | Bin 0 -> 684 bytes pacman-project/pacman-sprites/400-points.png | Bin 0 -> 680 bytes pacman-project/pacman-sprites/500-points.png | Bin 0 -> 679 bytes pacman-project/pacman-sprites/700-points.png | Bin 0 -> 680 bytes pacman-project/pacman-sprites/800-points.png | Bin 0 -> 671 bytes ... - Miscellaneous - All Assets_Palettes.png | Bin 0 -> 127980 bytes .../Pac-Man General Sprites.png | Bin 0 -> 17677 bytes pacman-project/pacman-sprites/apple.png | Bin 0 -> 711 bytes pacman-project/pacman-sprites/bell.png | Bin 0 -> 720 bytes .../pacman-sprites/blinky-down-1.png | Bin 0 -> 718 bytes .../pacman-sprites/blinky-down-2.png | Bin 0 -> 716 bytes .../pacman-sprites/blinky-left-1.png | Bin 0 -> 715 bytes .../pacman-sprites/blinky-left-2.png | Bin 0 -> 713 bytes .../pacman-sprites/blinky-right-1.png | Bin 0 -> 720 bytes .../pacman-sprites/blinky-right-2.png | Bin 0 -> 717 bytes pacman-project/pacman-sprites/blinky-up-1.png | Bin 0 -> 703 bytes pacman-project/pacman-sprites/blinky-up-2.png | Bin 0 -> 702 bytes pacman-project/pacman-sprites/cherry.png | Bin 0 -> 750 bytes .../pacman-sprites/clyde-down-1.png | Bin 0 -> 729 bytes .../pacman-sprites/clyde-down-2.png | Bin 0 -> 732 bytes .../pacman-sprites/clyde-left-1.png | Bin 0 -> 733 bytes .../pacman-sprites/clyde-left-2.png | Bin 0 -> 730 bytes .../pacman-sprites/clyde-right-1.png | Bin 0 -> 736 bytes .../pacman-sprites/clyde-right-2.png | Bin 0 -> 736 bytes pacman-project/pacman-sprites/clyde-up-1.png | Bin 0 -> 723 bytes pacman-project/pacman-sprites/clyde-up-2.png | Bin 0 -> 724 bytes pacman-project/pacman-sprites/flower.png | Bin 0 -> 719 bytes .../pacman-sprites/ghost-eyes-down.png | Bin 0 -> 661 bytes .../pacman-sprites/ghost-eyes-left.png | Bin 0 -> 658 bytes .../pacman-sprites/ghost-eyes-right.png | Bin 0 -> 657 bytes .../pacman-sprites/ghost-eyes-up.png | Bin 0 -> 662 bytes pacman-project/pacman-sprites/inky-down-1.png | Bin 0 -> 722 bytes pacman-project/pacman-sprites/inky-down-2.png | Bin 0 -> 721 bytes pacman-project/pacman-sprites/inky-left-1.png | Bin 0 -> 719 bytes pacman-project/pacman-sprites/inky-left-2.png | Bin 0 -> 718 bytes .../pacman-sprites/inky-right-1.png | Bin 0 -> 722 bytes .../pacman-sprites/inky-right-2.png | Bin 0 -> 720 bytes pacman-project/pacman-sprites/inky-up-1.png | Bin 0 -> 704 bytes pacman-project/pacman-sprites/inky-up-2.png | Bin 0 -> 702 bytes pacman-project/pacman-sprites/key.png | Bin 0 -> 697 bytes pacman-project/pacman-sprites/melon.png | Bin 0 -> 762 bytes pacman-project/pacman-sprites/orange.png | Bin 0 -> 713 bytes .../pacman-sprites/pacman-closed.png | Bin 0 -> 694 bytes .../pacman-sprites/pacman-death-1.png | Bin 0 -> 678 bytes .../pacman-sprites/pacman-death-10.png | Bin 0 -> 657 bytes .../pacman-sprites/pacman-death-11.png | Bin 0 -> 644 bytes .../pacman-sprites/pacman-death-12.png | Bin 0 -> 618 bytes .../pacman-sprites/pacman-death-13.png | Bin 0 -> 689 bytes .../pacman-sprites/pacman-death-2.png | Bin 0 -> 693 bytes .../pacman-sprites/pacman-death-3.png | Bin 0 -> 687 bytes .../pacman-sprites/pacman-death-4.png | Bin 0 -> 683 bytes .../pacman-sprites/pacman-death-5.png | Bin 0 -> 673 bytes .../pacman-sprites/pacman-death-6.png | Bin 0 -> 662 bytes .../pacman-sprites/pacman-death-7.png | Bin 0 -> 654 bytes .../pacman-sprites/pacman-death-8.png | Bin 0 -> 667 bytes .../pacman-sprites/pacman-death-9.png | Bin 0 -> 665 bytes pacman-project/pacman-sprites/pacman-open.png | Bin 0 -> 692 bytes .../pacman-sprites/pinky-down-1.png | Bin 0 -> 726 bytes .../pacman-sprites/pinky-down-2.png | Bin 0 -> 723 bytes .../pacman-sprites/pinky-left-1.png | Bin 0 -> 721 bytes .../pacman-sprites/pinky-left-2.png | Bin 0 -> 721 bytes .../pacman-sprites/pinky-right-1.png | Bin 0 -> 725 bytes .../pacman-sprites/pinky-right-2.png | Bin 0 -> 725 bytes pacman-project/pacman-sprites/pinky-up-1.png | Bin 0 -> 713 bytes pacman-project/pacman-sprites/pinky-up-2.png | Bin 0 -> 714 bytes .../pacman-sprites/scared-ghost-blue-1.png | Bin 0 -> 725 bytes .../pacman-sprites/scared-ghost-blue-2.png | Bin 0 -> 722 bytes .../pacman-sprites/scared-ghost-white-2.png | Bin 0 -> 722 bytes .../pacman-sprites/scared-ghost-white=1.png | Bin 0 -> 723 bytes pacman-project/pacman-sprites/strawberry.png | Bin 0 -> 734 bytes pacman-project/pacman.rkt | 69 ++ pacman-project/pause-menu.rkt | 39 + pacman-project/pp1.zip | Bin 0 -> 8674 bytes pacman-project/score.rkt | 36 + pacman-project/screen.rkt | 26 + pacman-project/test.rkt | 60 ++ pacman-project/time-limit.rkt | 63 ++ pp1/PacMan.bmp | Bin 0 -> 115738 bytes pp1/PacMan.png | Bin 0 -> 8739 bytes pp1/PacMan_mask.png | Bin 0 -> 673 bytes pp1/main.rkt | 72 ++ pp1/main.rkt~ | 16 + .../drracket/errortrace/graphics_rkt.dep | 1 + .../drracket/errortrace/graphics_rkt.zo | Bin 0 -> 77873 bytes pp1/pp1/compiled/graphics_rkt.dep | 1 + pp1/pp1/compiled/graphics_rkt.zo | Bin 0 -> 52366 bytes pp1/pp1/compiled/info_rkt.dep | 1 + pp1/pp1/compiled/info_rkt.zo | Bin 0 -> 4107 bytes pp1/pp1/compiled/tests_rkt.dep | 1 + pp1/pp1/compiled/tests_rkt.zo | Bin 0 -> 21805 bytes pp1/pp1/graphics.rkt | 783 ++++++++++++++++++ pp1/pp1/graphics.rkt~ | 783 ++++++++++++++++++ pp1/pp1/info.rkt | 2 + pp1/pp1/tests.rkt | 97 +++ 109 files changed, 2467 insertions(+) create mode 100644 README.md create mode 100644 pacman-project/.DS_Store create mode 100644 "pacman-project/Icon\r" create mode 100644 pacman-project/coin.rkt create mode 100644 pacman-project/game-logic.rkt create mode 100644 pacman-project/game.rkt create mode 100644 pacman-project/game.rkt~ create mode 100644 pacman-project/key.rkt create mode 100644 pacman-project/keyboard-handler.rkt create mode 100644 pacman-project/main-loop.rkt create mode 100644 pacman-project/maze.rkt create mode 100644 pacman-project/pacman-sprites/.DS_Store create mode 100644 pacman-project/pacman-sprites/100-points.png create mode 100644 pacman-project/pacman-sprites/1600-points.png create mode 100644 pacman-project/pacman-sprites/200-points.png create mode 100644 pacman-project/pacman-sprites/300-points.png create mode 100644 pacman-project/pacman-sprites/400-points.png create mode 100644 pacman-project/pacman-sprites/500-points.png create mode 100644 pacman-project/pacman-sprites/700-points.png create mode 100644 pacman-project/pacman-sprites/800-points.png create mode 100644 pacman-project/pacman-sprites/Arcade - Pac-Man - Miscellaneous - All Assets_Palettes.png create mode 100644 pacman-project/pacman-sprites/Pac-Man General Sprites.png create mode 100644 pacman-project/pacman-sprites/apple.png create mode 100644 pacman-project/pacman-sprites/bell.png create mode 100644 pacman-project/pacman-sprites/blinky-down-1.png create mode 100644 pacman-project/pacman-sprites/blinky-down-2.png create mode 100644 pacman-project/pacman-sprites/blinky-left-1.png create mode 100644 pacman-project/pacman-sprites/blinky-left-2.png create mode 100644 pacman-project/pacman-sprites/blinky-right-1.png create mode 100644 pacman-project/pacman-sprites/blinky-right-2.png create mode 100644 pacman-project/pacman-sprites/blinky-up-1.png create mode 100644 pacman-project/pacman-sprites/blinky-up-2.png create mode 100644 pacman-project/pacman-sprites/cherry.png create mode 100644 pacman-project/pacman-sprites/clyde-down-1.png create mode 100644 pacman-project/pacman-sprites/clyde-down-2.png create mode 100644 pacman-project/pacman-sprites/clyde-left-1.png create mode 100644 pacman-project/pacman-sprites/clyde-left-2.png create mode 100644 pacman-project/pacman-sprites/clyde-right-1.png create mode 100644 pacman-project/pacman-sprites/clyde-right-2.png create mode 100644 pacman-project/pacman-sprites/clyde-up-1.png create mode 100644 pacman-project/pacman-sprites/clyde-up-2.png create mode 100644 pacman-project/pacman-sprites/flower.png create mode 100644 pacman-project/pacman-sprites/ghost-eyes-down.png create mode 100644 pacman-project/pacman-sprites/ghost-eyes-left.png create mode 100644 pacman-project/pacman-sprites/ghost-eyes-right.png create mode 100644 pacman-project/pacman-sprites/ghost-eyes-up.png create mode 100644 pacman-project/pacman-sprites/inky-down-1.png create mode 100644 pacman-project/pacman-sprites/inky-down-2.png create mode 100644 pacman-project/pacman-sprites/inky-left-1.png create mode 100644 pacman-project/pacman-sprites/inky-left-2.png create mode 100644 pacman-project/pacman-sprites/inky-right-1.png create mode 100644 pacman-project/pacman-sprites/inky-right-2.png create mode 100644 pacman-project/pacman-sprites/inky-up-1.png create mode 100644 pacman-project/pacman-sprites/inky-up-2.png create mode 100644 pacman-project/pacman-sprites/key.png create mode 100644 pacman-project/pacman-sprites/melon.png create mode 100644 pacman-project/pacman-sprites/orange.png create mode 100644 pacman-project/pacman-sprites/pacman-closed.png create mode 100644 pacman-project/pacman-sprites/pacman-death-1.png create mode 100644 pacman-project/pacman-sprites/pacman-death-10.png create mode 100644 pacman-project/pacman-sprites/pacman-death-11.png create mode 100644 pacman-project/pacman-sprites/pacman-death-12.png create mode 100644 pacman-project/pacman-sprites/pacman-death-13.png create mode 100644 pacman-project/pacman-sprites/pacman-death-2.png create mode 100644 pacman-project/pacman-sprites/pacman-death-3.png create mode 100644 pacman-project/pacman-sprites/pacman-death-4.png create mode 100644 pacman-project/pacman-sprites/pacman-death-5.png create mode 100644 pacman-project/pacman-sprites/pacman-death-6.png create mode 100644 pacman-project/pacman-sprites/pacman-death-7.png create mode 100644 pacman-project/pacman-sprites/pacman-death-8.png create mode 100644 pacman-project/pacman-sprites/pacman-death-9.png create mode 100644 pacman-project/pacman-sprites/pacman-open.png create mode 100644 pacman-project/pacman-sprites/pinky-down-1.png create mode 100644 pacman-project/pacman-sprites/pinky-down-2.png create mode 100644 pacman-project/pacman-sprites/pinky-left-1.png create mode 100644 pacman-project/pacman-sprites/pinky-left-2.png create mode 100644 pacman-project/pacman-sprites/pinky-right-1.png create mode 100644 pacman-project/pacman-sprites/pinky-right-2.png create mode 100644 pacman-project/pacman-sprites/pinky-up-1.png create mode 100644 pacman-project/pacman-sprites/pinky-up-2.png create mode 100644 pacman-project/pacman-sprites/scared-ghost-blue-1.png create mode 100644 pacman-project/pacman-sprites/scared-ghost-blue-2.png create mode 100644 pacman-project/pacman-sprites/scared-ghost-white-2.png create mode 100644 pacman-project/pacman-sprites/scared-ghost-white=1.png create mode 100644 pacman-project/pacman-sprites/strawberry.png create mode 100644 pacman-project/pacman.rkt create mode 100644 pacman-project/pause-menu.rkt create mode 100644 pacman-project/pp1.zip create mode 100644 pacman-project/score.rkt create mode 100644 pacman-project/screen.rkt create mode 100644 pacman-project/test.rkt create mode 100644 pacman-project/time-limit.rkt create mode 100644 pp1/PacMan.bmp create mode 100644 pp1/PacMan.png create mode 100644 pp1/PacMan_mask.png create mode 100644 pp1/main.rkt create mode 100644 pp1/main.rkt~ create mode 100644 pp1/pp1/compiled/drracket/errortrace/graphics_rkt.dep create mode 100644 pp1/pp1/compiled/drracket/errortrace/graphics_rkt.zo create mode 100644 pp1/pp1/compiled/graphics_rkt.dep create mode 100644 pp1/pp1/compiled/graphics_rkt.zo create mode 100644 pp1/pp1/compiled/info_rkt.dep create mode 100644 pp1/pp1/compiled/info_rkt.zo create mode 100644 pp1/pp1/compiled/tests_rkt.dep create mode 100644 pp1/pp1/compiled/tests_rkt.zo create mode 100644 pp1/pp1/graphics.rkt create mode 100644 pp1/pp1/graphics.rkt~ create mode 100644 pp1/pp1/info.rkt create mode 100644 pp1/pp1/tests.rkt diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/pacman-project/.DS_Store b/pacman-project/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..311e29b8128e264e42d7a7f320dbc90406e43961 GIT binary patch literal 10244 zcmeHML2nyH6n^7`dYv?>o4BD6iYzQ4BuX1M5E^m7b%Ia;DN!AQLtD(+-Z-nQcUHUW zxJiic8E!>f;RkR*91ubr5E3eX08U8s+!H?l3ErDoJ8OI6SQRKBW~ABocISIB6EyH+#E8xNo_$wB#^r6)S#eiZ!F`yVw z3@8Tv4GiErn~F9rtvV_O6a$KZ4g;hQX{=;(fo(}EqyrCP34nGKFN=act^-6&I*q$ah+FW2;(#mjPG8|aYGYeKIO!SU%X#oe8lU5xS1B!uu z259ZBK?OLNV29W5Ws8@wjiyr`>y^7*M74ehB~7N%(Tpa{~M~Wydl- ze{Sv<78@CT>`YvXYvbCT!ZvRfeBEz&dELE5XX~6><+iVvH%y~hN~V^$?dzs(xFW!; z8VI@lj%inUGtV1#)f2G=*`Ot~L@9ak;9!1n;d1)LYuUrg>4U{hJLzG822?0grAUv;R-+b~=YZ7JCkQ{2>DSGQ|Me(#Q@mkn#x&U4@AbwX0M3b)r> zgEAFO^l4a`SAUn>W^!+~o#&*Jgp72M@l@LjEX#baKM?-9&21x*$mG_7CJkPIC0K{)h|U1vAg8|*FiHrrq|=CB6aWlfnO)_(RhM?!_Q z@TBkATeWPV!t0IzYTxoGOr0+;2furIUH$Omm-lZ(9~(r#XH?;~ix)#Py zVrCuLqbM8i*28lbd-gGd*R6?y%b{aWTOYFvFQF!0Ul97ZIRB{nIFO%5)XJx3|0i16 zQO17J{F}70Bb5nMjgz$U(lJ{3A}|b%fNJG}?wnv=#~V49CW?KL@gi-bV#;y45E} z8W~0>un+p?bC13$!cQX7?7W-EBQ1@N zz1I^f9*{aH1{4E|0mZ;j42(!rn)d%+JO2Owp>ipZVn8wQ-(-M|E*F;ZgHLP_L=AzK z>S?U+W2HhH2`y>KrE`Li72EN6Li-zH{|2wkQ5zNXbAfG1i&wCm!k+<2>^6@z{8g-p UmAqR2AE@>J>F<^P)9e4g0CqE_n*aa+ literal 0 HcmV?d00001 diff --git "a/pacman-project/Icon\r" "b/pacman-project/Icon\r" new file mode 100644 index 0000000..e69de29 diff --git a/pacman-project/coin.rkt b/pacman-project/coin.rkt new file mode 100644 index 0000000..c08943c --- /dev/null +++ b/pacman-project/coin.rkt @@ -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!)))) diff --git a/pacman-project/game-logic.rkt b/pacman-project/game-logic.rkt new file mode 100644 index 0000000..59a7579 --- /dev/null +++ b/pacman-project/game-logic.rkt @@ -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!))))))))))) diff --git a/pacman-project/game.rkt b/pacman-project/game.rkt new file mode 100644 index 0000000..0ce546b --- /dev/null +++ b/pacman-project/game.rkt @@ -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!))) + \ No newline at end of file diff --git a/pacman-project/game.rkt~ b/pacman-project/game.rkt~ new file mode 100644 index 0000000..0ce546b --- /dev/null +++ b/pacman-project/game.rkt~ @@ -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!))) + \ No newline at end of file diff --git a/pacman-project/key.rkt b/pacman-project/key.rkt new file mode 100644 index 0000000..d03fe77 --- /dev/null +++ b/pacman-project/key.rkt @@ -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)))) diff --git a/pacman-project/keyboard-handler.rkt b/pacman-project/keyboard-handler.rkt new file mode 100644 index 0000000..6037e12 --- /dev/null +++ b/pacman-project/keyboard-handler.rkt @@ -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!)))) diff --git a/pacman-project/main-loop.rkt b/pacman-project/main-loop.rkt new file mode 100644 index 0000000..448e5c2 --- /dev/null +++ b/pacman-project/main-loop.rkt @@ -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)))))))) diff --git a/pacman-project/maze.rkt b/pacman-project/maze.rkt new file mode 100644 index 0000000..7399f9d --- /dev/null +++ b/pacman-project/maze.rkt @@ -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")))) diff --git a/pacman-project/pacman-sprites/.DS_Store b/pacman-project/pacman-sprites/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2e4ac07db500dbdc37554c60bdd9f7d646bb5379 GIT binary patch literal 12292 zcmeHN&5j#I5Uz0?v01?DO^`rvV8j81gVE+cK|*q(Ae2KSq&xs*f5@UZ>y_=*DiVji z!5Q%Yd4QbqSa|@h@O?Gjb=SD7-Ei0g=^4$m-P2!Hb#--DRnLe>_26jtn#ffVS;NJ$ z{{e2liPZ0-3=Tf$wRBuSO@-?bF8uC`jAbe_8OWZzTxz{s(LojQU0ff@Gub!zJMas4HON$(;DFVP~&1boR=p}sY?fL4B`2lA-o>=jj&wn>UlYw zmnTiBP+$~_vVm6f6r*b3sIS=^<#1k}G-U&qs)0*2=UmM*luEe+S8H>rhD}-SMFT|x z%NqC!Rhv%keT0lVo^>CZtXpJ5^X})!`UkR$Ec_T*_&~13(eeh{1-&2(kE5^0(bX3T z^awi-KkE)ef_LXnhxY=V;BC`N%%kSWM!N{!Z-{)7knI?LrSWhB@#tZc{sX;ly;zQ8 zX6W@G-%P#kv1~(66Pz#Ob560L=f@N*N6|phK+!G4{fWKYw2AzJ^ z2pp@x7ai z!EknB$MonmP9v5z=&y zxv%v#s7-P1AvT!Gk4lNM%y7E-xN6{S5J|0RL_t2$KF~spwl~p!6hyHrcc!SfRut?} zaN;ZKF-c(&i93q+|#wTyE(hBbwKIAeV+C2glFoVxuKTGNR{bW}qG3 zoV5nM4jbKvttH}7wV!Yf^nn>6dgTnr*w^I9naJP6J2KOD68OcqCoIS8t6KgGe2Ra# zFS}{_pJ_El0-u5-18v6Wpl4)QX)!CY4qw`f!LDN;nY(?*YBTZm2C|y<=8DM_`3+q2 z4cqCu<5LN(&ZBZVeo-p4J(Gud`v+(Jhu^>0#28ok{{K7w`@g1Dxfcx-4g4=PP<0!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAFxPJve_!bl+EFAGC&9_4 zmAk;lWl^Q<+gUq1?1d+M-@^P?-RHcZtW4*vUlGY_N$(i#*VO+kXtXIcdc|7sV?$l} q?LP)*s&r%x#b<~=y!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAC46a!&5jeOvBK z`OL;XPfO`pbye==scS!QGll6eJbQL~UHOOB+cU+NWW_NnOq4NH7Lw7gF7Ue`ve=lf z%YcGyvuQVodL&czmEqFe*4rPXjh_R|B#)D{r4Jm!9?BpQ$SJa M>FVdQ&MBb@08z=q8UO$Q literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/200-points.png b/pacman-project/pacman-sprites/200-points.png new file mode 100644 index 0000000000000000000000000000000000000000..bc1cd36ab0783db6c63fb0e82d43ae29006c5a72 GIT binary patch literal 682 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAZuk8E|7pn~Glf$NCwVmW z?JC={sw3j&7psgk<$wAGZLF^s1@K15)E`{MFzXrHoa#H-^~o+P%~L;^*!t?M{>b+C z>$EL@W-zfx8g<-OdMR=)K(WX4c20!o4(lE6Q4fCXu2Z&@-Ev+`Z=H*x{MB9J+dxt2 M>FVdQ&MBb@0Pt1CfdBvi literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/300-points.png b/pacman-project/pacman-sprites/300-points.png new file mode 100644 index 0000000000000000000000000000000000000000..dacd7275a84b47b6c9d31734a5a4ecc1700d03a7 GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA9-@*d#;_-+j8T? zKOQlWw0p~Aw3L>#tDnm{r-UW|rfkV> literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/400-points.png b/pacman-project/pacman-sprites/400-points.png new file mode 100644 index 0000000000000000000000000000000000000000..2dbe550df1e6f1a9ef295478c6bf88c2de98e25d GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAG^hUmziD$~uhTX;3ti(t zjSFt8XWyK$dvBlFXSKS(1QG8B*S9`$HoUuzb5xy>44nJ(Q$oHw{gkrRN>bKzRq(OEoJLIy+2g6cRG93yRE;O8@Vq!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAFVdQ I&MBb@0HPqkg8%>k literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/700-points.png b/pacman-project/pacman-sprites/700-points.png new file mode 100644 index 0000000000000000000000000000000000000000..c99e932fbe1725d8f31b781a9bd1be3a99518b06 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA zzdAAe!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAIWfd7VShLiHek%!or^(?+BD$8v89|np)Pgg&ebxsLQ0DK$1 A{r~^~ literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/Arcade - Pac-Man - Miscellaneous - All Assets_Palettes.png b/pacman-project/pacman-sprites/Arcade - Pac-Man - Miscellaneous - All Assets_Palettes.png new file mode 100644 index 0000000000000000000000000000000000000000..22773b00a3387efefef9f890f2dd69817a89ac6c GIT binary patch literal 127980 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

@&1wjy-6{j!-e)d^RQBaBD>m* zDw(Qp(q;dMnbrFpn@Z%&$fGheJ3VjZM5bQy<~U8UUceY*Df$nATvJx$B-Dw~n5gB1 zPmNIVDXAyr{W>As*!v(4gWmi=roS+>(!A9e?09qOQixC~fPlxWza`M2yxw3G+)wg( zZpj{d_=Y}aY$#M0}G zAH;9jl|qMHVD3^+O;cO6vt+N9dfp-rU|e=?IkP?`VJGDH?m;%zrvj>DMlMGeo^=aL4Na{_+A*sWL4Z2C+rT9or(EK@p3 zGxsRSy2%E^%zk(En5!V&g%Cs~ct5Vdoh4k4NX%P(bdbnNj@nV;RMT^A5*>rQL{umK zd|m5d-_;Hw;ak_i>ngobHCB>|!4q!!>mZ6-1W$K$b$@)}eilPHc+o1$-yxs(pQcMw-rYMV7zj;q?6J=H~hZ%V4BN1@Q|-zBO_%7|su4dIbK} zux4JaH{20d%O1xQd1R_)GWK=ZDH60B$55Bg6Is0gl#$;oG(f>u`S?;T26dhm*ivskDk+9vOYd-(6gblC04Q z_I}qnuB4M9{NHhF2-S_)ezQfqlg)qq1kswM>>GY^Dsf9Yy9>XnDnKcZNOqr0w7NLB zEx;{dt{SembMGK*tZW_oiitPYY}=&m^Cezc(!PLuL26NmCEu}$+6!!59QhVOIMXt` z*e9ubecY#wWG|&#^;<{p+-qYhocUk@JT;n`DVqjy6^zr8(Yt`zmVq*5jrI9hhpkWS z`=PFp)?{l;T{vNo4A;<+g7~)Zlo~L5w*Us?*hNMAA$kIZZ$|31Tr`&U1uhi zhSiVU(7Cxpv`uJ@{Ybv9B8sO14N$tj&Gg<7u($;O9`=}j5(y2e)GM?enHrNdbdTvC zlCRsY0LujO8ui?!pwWU+1|a4yEV-=Z1vY=aazJ~0v{ zMBEIsd&o9!+R39o7H>6psOS14TYg3=2vOR6Cqz$f@$AifxFb`yW32T*XuCMc1#>z3 zIW~)1nd!3^Z~=^byrMo_fAfEtNwRNSu44vSLDnZPCNX$L=``zea-GBdB|yU^eV2BG zl0hi0wrBDjEUFxedxz?uCfac2+b_o#X`=80 z$<4{KmUGBo_+**Vj4f-+-GVFe{JHVu5Z(Q<9cgK8V`c&T-mZL2umRxE(tY*kCKk0n?F8dlQJblwKY57YzsPUkzfF)jo!T-9?fdIRh0d59ol!3WmtpJbT0Z6>cCK;*OGasfhjpNqC z(y!$?=q`$KoM-xeSR-5921Z^`r>hs9Ifm-q%BeWMcxdu|KsxhHzqi(RFm>K3NZGew zU2s*(_PZgV0%%(ho+~Qj-|?`iYshUr?ckfYz_$4FY|qqEV>hZLdg(!3M|UZge8461 z&g`$p1&Zq|^Rki|EZYp(BuB&6r}<*uOx5JsE2IXbWFt9!A#2z8t7sOW{TbgKbYU3*-IM1@o#hN-e^!tqm+4&cCrPzA zpkQ`KKAn4Dx_8%d-$4ABS|mqdi6&`KluDt5*@oah=`1dJ6$7DZ*iHAJpsaVP9Um;n zv9%kDnXh%Q%uan>iq9>sb-N1Q+o;(i)@+#xTjL>)9c?bu_V*;74;sH=05eO0;mXFa z()WY9hb$)mGF}NO+i*c7*5Qi9R-HbVO?)5 z2eUgS^~8|>Cd|SOp8Vg0+0bY1#+iCnUvBYW>YWtoj@S&y0kBoNdt>#@9o{D8K$)1O zK!oQn@ihtIv9Xb$JHKfl?z~;Ib)~6Et0G^4>o{jqo_EQ`hs*S6d@ysH9t*Jt+ z+xUyj%OdKCSKZzM9Ox{@q*?qeCDvt#{JGTuBKC0`v;X>pf}lH9v_?XI{Z4gtt$dS{wr@}D&W150%|17evq;Wu7 z)Mhc9O!bd@3n#3X1*_eZrwH}~Ddg6<`l1kI{!cB{iq58!v)d}BViHp&}eh`VyM2PCNZ0brVmtT#Hhk7>J7{i0o|j5gd@#Czfswqy?fO-_d|`d_uH zJ!D`1_1HT~aL>R6MT4v@Gf@inXFhWWp1a7b!HvMxywjX>#s$}hL4WqmZ>&TUM!Q}5 z;jfcNeFy0V!CyKn*A&CHue0A*o}Kd`RZ0@9(S+Yk#iX}r!scMXUhxLUR*y)`aZ5j! z)m%Zqc=AAY`?-t`@FzR>CF=nS;#_ye)9SsdWJm}=JmjlgQt3nKc6&G8_HlTK#c>!c zI$g}+S!t_l2RUpDO?P+a^&9Y2yzYA)v2HpCvTH^9`;NVDNm+---c%HRz09GgXr9p< zzpO$?FmLT{I37(*Q#Jx=TY$0p=>9X>FQ)^`VW(yrRC><$_8U9VT>}Hs?8r&hU8ebR z8cG1Ed&NjY4erZ#7k{|&pg=?k4O>jitvY!!OIlL_O+8I@eC_FFQi1Uw@@v;59}Hg_ zs5vK(v+Q>uIo`**o8qXhUD)cyGgX`TBn3j$ut;|fA@&| z-e6Rt`}M7LE-3}XT?>OV%3dm;ng$@B)}NlT^qaHF6Y(KaN1#(G8Sk#w-oJWqg|-&% zE3Qo$9el&+2zcM7U_iJnYzTqabE7t;i6re@~}-W!AJR<!T6 zH7YMb{yuYk%F04ttB#19iY>$kZ#uySoePf|@R#H)JU%U7pe4U;E=#d@q@c|Ir4>WJ zF(IOtC|V?Ap7F-?RQgjwU;?b7Bpc&XE}hMRW62Ebd@OML4*6>Bx7pWN^v@rUhZrcp?p|&f-oLf=$SxC2+k8xbCH_9jh|?c0<`MFq;%7Vh(+B%4 z*^I<5gZ$*2g26F8#}n29E<8tD{8C?mcGkU>(Vt1Qc;(H%?ZTdU^JRUc>!5V^9hnYe z8y9m)zg4|}HV8vNr?0SY@yE5$G+s~za!<*A6l8iQzg{J)toR7$GP20AZTJ`z=sLiSjom)KnyLk@)S^wRR&6oTHeApe14!_l_|Aw@p z$VCr(&+mR|Qjq5*b+8q39WbVu5C(yM{^!oH!gW37k7Szx*L+FpooUn7m1c7jdeXiK zl5O`0Z9^uI-p~H4+|rAqZ%E~Yo5b}863GYBmKX3~J-X1`pRe#&nbjN4r0*O~YjR|k zo9$m+SyZUR;dnamb%Sv>pQCz3fkT{ssJ~k6Ge88aCq1JE;VbPG;?9&`NN>@YWrxe9 zpt4$eQc26}{`g-cECSag{w}XSy>;jPGXp{*E*HYr660C8C1>i9r(F3#X*Lcx|$#{>3|` zz=ORb3grx2C%8G^}D=`W=DT>WlLzX(tOR@PlP5fP+w)A^O$x%+s*h)E<`e5K|b|4aM+1Xhd4_DZ12U?70vJ| z?=SV+zaOTALzEyLV@|aDtD&$JIItK=$u^ANzgggYlh@cZEXubrVL&>4PP)=Lj+iYS z3xlmB?IsAKkaB1ss>&{g)@UtJQvM>iP3;Ix3NEpXQ_qTVD;@guvP1P!4-&i_yLztk zdn(G!tF}cbu}Mo!DzB1Sm5y|goIlo59#!22aj`D?^0Rx&rgm=8a*Bqd3BGQP{T=Rd z)nH%20BUc%VDUKZ5L3>ta=4T%%{hu}2k;Q;>|Eplz@tE0OMa}BdPb>C6Ij?`yTES*Nng0*RwVqMX z43_ukU*XulHTahr%e(cGJJT5de;bFZ=!T8$FnPI|4Lz7(s6)iusjN4OidAos&#|de z_-oY@zXJh`94#?iLAUPaC+0y(x{NdB1x{5ng8z1W&(;az;P9wqWkbu*vP?zT2XT%v zQo8ycB5j9&Sa}kP5^@GiLk!vT-W}GUBqdA!zv;2jvO^#}e&O>v+wXx1l+j3@Rz%^F3IJA@imEnt zjW@;2xZYF^pET*K0)NHU8A|1OYqW~df}4e!ZKN8_2~S=*)2uuc416MZiE{w)E<64` zSHe~1@9bVK=g{MJNWtmn&C_+?9&tb|qBO6_mTu$VrhO>2s;$by{?I!Lh3j6G zl7}C)%^V)@eORQ^e7@FKze~%&t$|gpk$A|x+RW~QYcfU;z^#sshAsenJx8(q7UomcDn%X1bt{Mq25- z(7eDg0btj%GyGn=SjfZsZ_YU!>aNdrWA!?bFLo%!(@?4zNiKdknL>&C3nctp)-)L8 ztwwPQHjng5op}Bsmg{rmLrbUThbvek4;R>E!F-4}?o6b6qU^Z`Mt27nK$0GVo#G@_+w`oK|7wf-*z2~j7rqRTdbwZpD+T&x8Q+5I zd-1=O4F(K@2)He@_s9I#7w2k_xkH!k7dd0?0-gIBwnA^+%P5GxxxxPGrMBaaVBlT2EQ@dtddUGYs7-9Btx2c-f)G z-29DbJz!&RvDSH(xMb9cxq(z~ zQB8SD{SO=C-L&Z`2L!$g4ZBrgc9NKQ%M;tG86cNV)!B}?7-M7XoL}L3U1qm8z01d| zZA#W+)ZLY+KJd~lmslnIMZwmk&EBV_hAEn&11YbXt(nR&Wwk}TI$GjJwKueyxr{AO zVfQTmtWwzc8~kjmlC=aKj8-yD+bemi2M=ApcO7=Fb zs6VWg(Z|GM5CPIyT&TjVsvEp}EsG)l8|j(Q?%euYN@ zhOg+j0LyG(v2S&FXR`zuL@R-W-a<3>M!afF?hPKln{$y(Eh*8$@J_FW?$IVCX+r$u zlocJ!A!-4wJx^{6K~6=0^y7`C9@5Yw2wFlrj;e_WB#fFVmZ|;O$7{=0TNp% z`K6pI07r6FO;al$m7nkGk?P}>HJ3o6iGxjA^EAm*cOSgLLYz)d24%Xg1n}P;J0oI| z1z!)ljzcku!8ZAiFXe`&;wYuGpCsZtau#J-Ye6ksL>tdsSKLQRm$^%ypra^x&>}VL znB4P6VhPN)gZ=5!cW5_z6d!P!uXFl$qRx}XK`Z*pcikvEBYB&AE*9--a9kYLcslIL8*tnY!@HH4Qd! zoFTTYD$jMcmJ9>iQs%z^ufcBsxJw#gHgIDVWPZ4^r^yxm;mWd#eB&zpLxhSm%iS5a zy0G!+B7~uX1zPu>>Hb?pSqL&0NRgxGLW)Meret8KysTA0$P-Cijr^JbbK2;~1wR`* zk4{IF`0i;J{Ze0t$lJ(IJ41T(ppBHSy()nXL>e$j&#n@nK?RncY~h=hU*Q+8jJsUlumlb)_PD%&0e)Je;*fn+y`kcEKa+0Khhz#oH)DrCxO|OIN{InA7Gx1rm#eb4HNN^b?VCzEkeb3w8NvJI>qP5^v@J@a*ew?-UBoMdYCerkawjjKofiN`4Q6kwfj$h z4~o_7H_9^MxB`q=cEL_@mB~fxX63T>**cn88$n#$8aLS$^PEM?;RWg#N=$?KP?Wej z8))ryjx^P4(Aq7CeJl@Td-SpXK*)-8I>(W<*tM!*2z^O5YcG8q@$n_oLlPGgE;xNd zM^J$f7feq=boE68F2uLRCmMEp4Qd9=QMDp7R;mb`s|=1&QK*-rxu`!>5L?T8=`K&3 z--sZ()%$s=~MpAx(z z3E;6N$gFYNLcFX%Y_eQ|hOK#sp`-NR(HzehvVkuQaus4yj#t za#iAZ!>G!HCrg(8&1R)KO5V*s{+8V?%ogG>h|~6qV)4zj{bkCghCg-5t}Gz=uS<4a z(lV14^l}6Y1!b1m*K^Rvhn>-SvG5!DhM&H(e2>k1?S96YX}^fxEyteADB3Lad|FBT z^NszpM~MY~32U*wu4;|0gWi>0#iui>r?kZRdDVy2KXs(P9yWC6E+`2y$$7fqEUbMH zKHZbk^k+c=4|_Ocn$6X&nXanE9H}5(j;UqSR@)mlPFzkb>nYf|G$&X32>gzkSFl9#n+zlmE4wIPnRxDT&XmJajv5$*XYIW|J&#vN(N zCwCKVOQO2g1?nD?@$QEe8ZGi^_-!$GrOyit;rl!4;H~Fl2+OII7uuADh^Vb>XL$P&nQg; zU|gKF1_aFtwhNBy;aG)jYrm*9MH>L9HNx&ssP(N(#EF^_ri)E`p>?gfXj%tWlcMfh zv0n{t8%l=zFp`0w-N!z5&2`gfk{C5Vv2+bkPm)`;ML8Q|DM#mbk;qFI$NXz@lz9t; zEwbu+=V1&Q6lX*u+b{8&HkPm;UFZB?wDwMu7B z^K`PP!IqwWZ@b=jtRG!S-~0=~b;eVX`out~;E_pROqzZJwMI}C1sqm#-BhFVgk!wf zGEbr;>?&U*%zNccMnnz9$Srd& zvME9?iN6TrCIPa71kDTWp6vgxz)QGwmMFU*@;<`{#&s%dR!*K%UFV+W4-Cv z4(c1AY0Jv45e-^3lh5@J4RlR{bT6V`TyG}yHP?P*rov|+EH`cnh=*JZhUaz(qY`LomOgZ`2`i>YF_Vig^mp@ln<%<%-N?*J^jWeva(@)=2TzuO`?tD8f{60O*zJ>2Y=HPT7qX^Ls z^t1g)-$D*Fc}p1Ky@CIGTS>oOe^KgU^V@6-IJ?_LstJY*#)u}jyGA1W?!%2=2DAT| zCe?7iS;tV_XO_tMtD6cwlw*jqzDK(gi23xx`)T?^%>%k#RX1K7TIe?TOaf>v)6Y?% zFd8*cu_tg$%u{(DhN}zLH=4!Jms{uaOq-xMCRm+$mF>J->0ox{b20k1b&M{DrZbNh zR2GLkZ{bze_~8fKx~%OuWc;b^cTJShYe2{fdv*pB>Apm~Xccc$s3obbWuXYFmq@1- z-TV<~A$RtMyzJP#kOunE=k_z{GU)4YkJPJmlI(3+WoB)tkLt5i`2BL0FrS8&S|k6A z_p3C{;4%Ta2w=)#_rjmK)&mU*I}p-Q7Fmo_J-MBHmuOS0xHr&qpcdtdC_O&;z22_v zCGYNGMOs&~G>2R^q-QVjX#V9#Gsq4PZdTp}5{m2mN?odG-Tf?6%ee}1apxP_Iqvv- zC~vHHfCj-xjGtbD*m)*>wbaamAlX-msvz)-e=@_|Cyfm=`uj~KKKhmzYD`_ZbR8_f zjOZA9P8~)VXY=7di zVks@CKcqhC`Nz&YjZ-_FM+aVfDWTD(JpKv2du8okv#paAH zk?5y?Gg!0L#X>41D_3La0mQ;*cnRGe6q(Z9eu%(qKU1aXlu4?sP zveeYSu)H7%yb>ul{TD(jdsO%(s}cwH;9F7^LuE3z+&@gRYI_;eJR}OoxmCY92UD1A zZL=^3V6KB{b+L`73}8Ps`d~0wjv-wFbnT8vQ@VB2Bh39s3v%u zn_2#7u647+Mhrd18-&yoEVY#h+aa}hbo*Loz@=8ZlRePFW}o)uhYFBFtI?SP!TWM+ zC_xW4IWyhNt!Y=Rmbsk%&C}@2H7{4wwPU1(?_|QminyDpY`#~r<87s`)*k;M*Xjbf zHmQvy*FMMhn7uXe8nR5I+a}90ZPhts!f0sAQq>L(T1(Akn(f(Ie4Lv<-!$ho*$uN+ zmY+r3bV?wG4GeqF$}bHGOs^PA0~NL)L_Y==mFyfwi%Q~PXr+I4*K26>5X3bPRw5Hl z=P0!frg@>5@U)psP?qT(0}*N`4N7DXKh}mrG#_)sNNZ|Ccc*Hbz2icjb92!bq8s0k3PE!rVQxC?nDNjFs65;sE6ZIq zILB4*XA4X;v1xB`bKF9AnhrJe+W-(_n3HUi#HPUyRHP*7H>oiigwN0yd+mc?sXuQv zXnwgxVcAvENSiO4 zI>m-w+hg0}qg{O2L3Trma}vQ#yKO8fov^OQ9ij#)krEPHva#Hll`+s6Pet_JG0(Va z<~01eYv<-Pmh^eEyBqU-<`RB_NpawSp&7Ox(%D>)hcoKtmr`p6`X5O~Epp^_3Cd1u zij;be2YIHg`#aE+%E6YB4DZQ5r{ILgc7ns*PF-stRc~0t^y+F2_fA@q!|GlX0Bx^` zBk63e$iwO3sR5;r*`zV<3fT@ffP(8vEjA-k=u;Imwd9R!N3;eA+0{q%=@yl}j$UQ$ z=lsZkgbB3UH96M;zd$4MFCVv1l6@hrC^_ZPkXS(-``eAFO?sW{tX-#6jwEv-)#4e` z;G4I{r~UBvw9C>S4G})W8x!;b4s~1F?-T|ohJV3wlUD7toIzJdwY$G)BNrW3K4hh9 zj;D4@gs8$f7UTvLQ>^CgjhWeXQn0@)-0NsKI)(L&V8rD+fyE=WHR+{sSGJNOFh*K6 zHfFz2T$6<^r*BZ{1m5TT!T$e+z7164)tfT!mI}F>6$I&cyJxRJ>_9X-!(wcevc5>Z zb@#GPNp<|Dunc1hhTfeO(@CT2xI|G+aTZ0q-QBfoXr{(xPLD$Ol z0a!~-8N_$cuRTbR^I0xbxf*MVyz0GL1AonslGkUUQ4Wh?=%Zb!Gd8Q*sFG%A@GhI

laoE(dC8PTbXGW8Bc~+|%T{1;9 zwu1O;HeFY9ljuyFG}3qHN?w^1IXV==Rps=3{=@Mz-C(6rPBl+mchPLNcCl+Z6Ws4f z_v{EuljX_k%nnIDik{w#$W{A@jp|Yfq#3{7;qpjKLT2y&)vRt+dT9HJ1r{PW!gEK@@7h{=Qray}(XvN#TFE1CC&f|9*J{_` zXRw=C2zIR=kAj(2=y-oQuQ{u!sNpGV?~>W0s>4C=*b0Ru&7^%`;KlW4&&+jQ`S4-I zvW$^Ynoz4c43k(ZEX<9}Jacx!bdO8q-E^(#H95lKN8?uWr!{`d>lUKUFomZ{;vn+- zZYxTHQhO$?r~o}^869^86pJ%%)t;nvf)2SUn`FzTWdxfLvBk%=v+HhMJ8U;Jp{ep* zlSmriu$h;QO7|j~;b?WOt1XkxwhZ}jjOQcNtd$jlH#T1qq=~%IG5kU_ULK+Dq)O|2 zGQOrkBUMe*^#`GPwqH`jMa3fe^kKBy%ynut(sC9@c?-SI%3j?cxzDCqDZ#ZRJB|VC z@!iEQraQ^+<~Es|ODqT71nDaB8r+7?f#4~s#ZbtTFa^rKpTz4{Z}n6@{wi5$z|85> z34Bbeh{<0-46CS*bk-+BWj>|i(3JZLPvZU>2}-3}Uwy4XKZUq`5E3nViTGzw+#mvhe^Q`;B6n>K=Fw7_OLy2U>@9Vm5){N}+`6i3_FV2Wz(A z($x46)~TBwe(1@HC+uJMqPxw_WqQlpk+O|G$5EW2=e!7tjuXhFWt45*r;=Rm&-!ej zCbcNpN_R*aEx18%h^}*RPB8EyG47>?K zUYtwZ~kkuwImoPCC4`ZnFkWumh zk$(RcbokeVVHHdmVhme@#-BR9lvWMY{BB7OQgYX5&}<6~P2_-vLh*bp<^TKQ^tE3R zjV~NqrM3*Tf6WSJ?xCr~+g^iN!C12oI~Z#?Wb5Yip^0mo=)HmbJjDBk<>T_L2`?8A zy0~J~8VULg#QE~R5gYZJ99pxntW>M}!>9AHMmy8;C0pRVE`E_@ccYT{%uSjKtf5H; z;+SXCIgrgRXgq$z=z+i#!#ZB|^yY9NRThabWbe^c>(Pi`t3L^wZB}K z3k7&m-aH!-pKU8^`gq9IHBs7~EI!2w@UJ-XJ;GIaNpBv;C@yB@&T>3SfqjP){d`1i zOqb-w$|It6J*Np_+5^XF8-TAUI9)F^N=R*5j)lkvYA~BMJ0Gx1$lqwWXE(I9F)jbx zK{f(2R9>VUm`=P3CV$(tZ_4~D6@%Lwf`>wHH*I=mXSPROUX+a>j{h#>$|r6O+*dKx zDPtG##6_7!pg4V1be9{l(`3yb?TEUp`P;TOWwwSw_Cu6DeZi=d85lafk!pCE#sX6g zYgl0p&|E!j=A8m{gAb&f-Tjw@1D+hje-H~-O6gvj6Z+JivAn43h¨@KaySYO&4v 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

Kgo9{&kzaWJGHG%gT*7d$vF_`P$gj~ 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 LyjO77H1NLwMi0AZ literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/Pac-Man General Sprites.png b/pacman-project/pacman-sprites/Pac-Man General Sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0185152334912b12c5a0e6263f3d08c837b493 GIT binary patch literal 17677 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

M6n-e_@>RwVi-33E#~4sgDwEnV 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 literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/apple.png b/pacman-project/pacman-sprites/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..b7afa61842c8c9abf852774fe5f0841b60f828c3 GIT binary patch literal 711 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAuS~IdpQ?KnY{sRa9oxbE_aQh{b%V)<|f=hdrf#TWI)z4*}Q$iB}{dv|& literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/bell.png b/pacman-project/pacman-sprites/bell.png new file mode 100644 index 0000000000000000000000000000000000000000..c8bf9e4ba114d8e52295e423ff96ad9afbd2b14a GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAyKU$4D|W^J*v)n^+lE=SEBD-i*omzF-JS{?^)YOr7VXtu77wm-pS2h z&}#6)f+gj1v^oRlfgaCn7KSVOg&Y?`brP5ln0)@c;Oqmo4XYw{@*Q|NP0-S?)2?IY zF4N;-OMY{52Yx7Zxg7dB;n`bB$?D^FvO2SvE2tDnm{r-UW|dcM-F literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/blinky-down-1.png b/pacman-project/pacman-sprites/blinky-down-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a7d25237c29f2f6107ba563982f6b58497fdd5 GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAGX|X&{TY{DOE*5&kfFq_w{<=UV4#!pQ1 w#b1T_=T9;hSa3&5W#^eEZt_20Nvqvum$y<=o$;^-l$;nmUHx3vIVCg!0PH=`m;e9( literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/blinky-down-2.png b/pacman-project/pacman-sprites/blinky-down-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ac85dfdf58f713789aa4cbd5a8e8fc46053f10 GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA)oeV@`Oolhnnh=!quR(%HZkh=d#Wzp$Pzq3erXZ literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/blinky-left-1.png b/pacman-project/pacman-sprites/blinky-left-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b94f45a78aa668c2df4b482f1c9aeaf3dc51f3be GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA&fK}7X~?Z?9HjX$j2 vEgf?C4f9t{7D?SBbE!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAU45&q}D_!rH~Nmh+H zH@~QGGJ3rSB;OKJV&UjZYoX6O|Z* za#hr~bL7nCu!-VU_h+5Ane)4H`WNwt53f$YD!+T^U=h>bVq50JsqFhqD?7;F4m?jw*JYD@<);T3K0RZVn&XoWF literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/blinky-right-1.png b/pacman-project/pacman-sprites/blinky-right-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f81352c9e3c59b8195fdadbe43410984a15a2e GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA#}k$duC* zZTfgxZOPlO>$VuQ3Iy5B&wZ&`dwr#|NL=CSC5oSV(@slv9{oCJQ!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAkW&C;8J^dn@^3YG$+OJmrV@yHV z6_y>1ORnzlXK38=IxBKgLT9J&I^h!^BR|-feife)aKtn%-$CY4BD2{in!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAeQHUdfr^8 z8D;U@Sh(TK)gA_GrxX>p*qu&$Ef*9r-}Eu?TRU}sL$s1Sdw9!#v12xWHoJ&jdaZQq h%tdB*o8LTL?-;!|$ho}u!z2ZYUr$#*mvv4FO#nHp&1C=p literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/blinky-up-2.png b/pacman-project/pacman-sprites/blinky-up-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e5153866a3d7a0cc1a2c01bdbaf6bde237a34754 GIT binary patch literal 702 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAm>;`;_@6&%`3hOH+ZR+% z+*CcaCfA(Ja%oA-`I0pgHBqLs_SYF*;txx1Q1Wpr`jEoCtJvW&$mFdj=Th=Pb^$1QJzf1=);T3K0RXkn&LjW; literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/cherry.png b/pacman-project/pacman-sprites/cherry.png new file mode 100644 index 0000000000000000000000000000000000000000..93cc7e9a503948d585f530f2734c0e7c1cd03a45 GIT binary patch literal 750 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA6A@9AL89%hm= zn&zp)olx<`dqKAU+Vw0d7bjnyq@$pF^XyhBnWqg04j06GulYLFVf*^e0X_zoDGE`<<)ieMA literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/clyde-down-2.png b/pacman-project/pacman-sprites/clyde-down-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5a2a4768e3b4e417fb949fa0148cd2b19265396d GIT binary patch literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAX#f zo@%aq+0dqOV@1>gHkMeGrHK3~qT|G96}&t0D9RHi$aeQ;rVx%a{mwm<4c z{FhmjQusFCP&@Ffu2N-2{o-955lJe?CTJyuf12!WX}O8V2=2Htc!VE8fYt zuKYl$l(obIwUlNB|Aha7AD(wj+$;5}l=*gwPyWffQH&?jnI6vm&X&V&`qgS{+GJ4V Nd%F6$taD0e0szBl+}i*E literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/clyde-left-1.png b/pacman-project/pacman-sprites/clyde-left-1.png new file mode 100644 index 0000000000000000000000000000000000000000..44144c26a5f0478c8466adea30e919249cffc267 GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPARY@F!_??r_z8Lu=aZ20odmaTU6 zI(4CUj$)54t;)XtkMT+T$0W9&v$FPuf4;p%*MY^hbB5fCuj`Mq{M1>;@y{~;@q^zB PL9y@Y>gTe~DWM4f58UA+ literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/clyde-left-2.png b/pacman-project/pacman-sprites/clyde-left-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f0738276d5091753a579c95b48b0d46305b69d02 GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA_@p?`=9Tl;7tuC9 zMN&Q5w(uT#nj(D3Xs)EALdOZo!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA9_t++x}4 zX?g`B2Rh@PSU9@O?GUN`{k#6O=K<^I+miq9{bl_8+uTi)w=MQV)NCn*YsaSj_#)J!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA3z|E-{1XjSdusr{azP^RG+HM=? z+>_R)8DDsm|Ceu5&Vkpr&Nd|J+HAhR_sFtH-Q{wxMIR;>v+q(Ba_>;v&&2Ms<=>x@ z07+ea{YQNXtvf3IoL3F15zEg?un(6!{=`6 PB`O9_S3j3^P6!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA z4>V(KPe%53byY135>el{SS8C~^OUu}ZO=`4Y3!}(liw-H!}7&Yty%VdWSmsa?f4!2 z`tJiDO=50Z-!Sp}oCvY&oEo1W6sgX15D{n26u7?p^tyxz&f7}%>?qG{E^us_9&{aw8CDg^NVWd4AZJ7_5T}Mhjvg=&7vY9#?6z86!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPANnsX?vHG9S?=mszOHBWv z_QDwnJQ8bH{Fu+!a*-X{Hu^CB6@_I1d;Z{(;&(8JcF8B5JLk?o> zD_bi$kFsi5bv#)hv7o}3V_mO=nTMgWz<+oC!X26{5(@bXb~H3pt+}+A%^-o_B|^!O z&on1Vp|U_h$@|a^1F0n($J#DxBsuUYF*l@murRD^)46=Pf~N@->7K5BF6*2UngC;) B%3uHh literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/flower.png b/pacman-project/pacman-sprites/flower.png new file mode 100644 index 0000000000000000000000000000000000000000..83d6ada3b8adbe11ec5c0b019e7a47f90de07fa6 GIT binary patch literal 719 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAEPc47=pEvFIOwOQ97LpT7qtBTz1blI|Ykw;xGjol>bZe~> z`R8w`eSNpUTR!vV3$+_&?z^u1UUqQb@z;h6A}%?&vON{)!{Bq#Tpn zOQ}n_oN!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAQpy2}UG1Wxig$j0cMRfa@Rm8u&?5FI kLLyGVPul6~3Pv6thL>WB+;aP(rhsD2)78&qol`;+0Mk6O`Tzg` literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/ghost-eyes-left.png b/pacman-project/pacman-sprites/ghost-eyes-left.png new file mode 100644 index 0000000000000000000000000000000000000000..3b48774a25dd5994ff9fb15b5ede48728f8a4462 GIT binary patch literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAO{LLTu2TIy$#S+ov*&^hzc%S$1X<$zk>RfZO^ kLpoi14YC-RnU4Zf)*2=SMpplq(V!UfboFyt=akR{00)P$NdN!< literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/ghost-eyes-up.png b/pacman-project/pacman-sprites/ghost-eyes-up.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b73529319fb090cd46f3c8898cbc10de11aab8 GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA#KwSZubp*oosUNCoVVtyrfY-;8Ed`guwNDY`@bs39fnbgD!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA`0(XrMGX3a{w@|5^w z_UkKtZ-$ucJt?q8y@Fg{oxDin~)LyZb7ci+?C2c zmjyTQKG><2y!xBeiL|q?&y<{ft&??se&=lA$Bf_H)U}IST6IA&?&<31vd$@?2>@3` B*U|t0 literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/inky-left-1.png b/pacman-project/pacman-sprites/inky-left-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b010a412bfdc33dff430f7a26af051c6a8e6c102 GIT binary patch literal 719 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAtIQBQ7K=stg<#C-U zjEo1<&K*c=e61w3{n~0~an@B6FGw6a(i!c+>1NOG`~GUD`63pRT&3j3KWxGu)Sl!s yJ)3<>nRR`;`HUh~6M<}@b1xK&Z1Wf!T7NLjaMP95dY%VLp$wj`elF{r5}E+DozbHJ literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/inky-left-2.png b/pacman-project/pacman-sprites/inky-left-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6641ff59baef01e51dd6307797dec1f28a1ff7f5 GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAckTqwKTkqx>SM4V^=s#kc?xZVw>0(eXD7rme{an^LB{Ts5;&a%e literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/inky-right-1.png b/pacman-project/pacman-sprites/inky-right-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e59def548185f6c43573683dc9478706edb97ae8 GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA6xY-KU<^IA;WLZuQasVwApR#=qG!PV@!$1(-gXnfv|hjpj#3 zo~oEJerk2OG;x>82K(m62@1E`9`QV95y>pusCK`}c*2Xjk|%Ns_>V*Ly^H`IqH9i4HhcQ^>fWTk}Di&7=lUlzY1RxvX!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA8142BUb3f;RhBh9or@rHd->e{@Ueoc>Mz&ld5tyE9p7TmlG^_q-@$Obi^LT z^WJ%1wLCZR#slpuzH3X>w_e*7F0r49aq?@X`R$qymM;$44T^A2S3j3^P6!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAB?^(?=$GXEGSbD*pzTl9NS%4G0#^>bP0l+XkKYT?ft literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/inky-up-2.png b/pacman-project/pacman-sprites/inky-up-2.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3a4aebe43306527a43a3f7597e1b73c79590ee GIT binary patch literal 702 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAv9R!a>dW(GBsIue9%owR|smbf2wqUbLlSj%M3f5 zmS;SRc~=}CIrq&0g^D-AMhdESZk!i{4)?KS+?>v+k>jYs&hTZQqkG1z`+|$u);|5b bky};I_>i6MKJUUSpqTY^^>bP0l+XkK{|?7E literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/melon.png b/pacman-project/pacman-sprites/melon.png new file mode 100644 index 0000000000000000000000000000000000000000..212ee4671dbf6431ade3103cb98e0a30532565d0 GIT binary patch literal 762 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA%rPf%45ww}@c zh;P~)X^-=BohNY#xODXd7+#F$ny|<^#UOg^^GBym1HLtPEH>WXc)k7bHHMa?=^nx} r(&Fod-teXc&RD;@_GkK}-LaMXB-r#+TpuVe1SJhmS3j3^P6!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPANnuvoRO)0Zl+JLX*Wym+ z^@i%p%z>s!h8*h|6T*!aRSNa;KU!q*?tj^WwGIXU8D}sFcX4r;Eq-3b!hXW3kkQB3 zqjeEehsy;4xeI11SPks%u)Yv7VBL{1!#g0R!Q0U8qhkug8UG)1xF!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAzopr01WKPWdHyG literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-1.png b/pacman-project/pacman-sprites/pacman-death-1.png new file mode 100644 index 0000000000000000000000000000000000000000..15645d36be4c465c46e98e80471436e0a4aaf116 GIT binary patch literal 678 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA|MF~r>*7mrz+NT{lW^B$GF>NkCW3+MN2j>Z#u4jCi z>~3eQ-N*j#zHP(R|7WkC(G8b0I48NaSH`7Yo1s9;{=Fl!Acv5&-3-5QP&9hF`njxg HN@xNAhk3o) literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-10.png b/pacman-project/pacman-sprites/pacman-death-10.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fbaed0e6affab9e64b408cf744aa200ac535de GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA)Zxs4Wy!H9n56drB-5h#$XQH0TF>k8>Jdfo8>%`U`q&YdBasw$-^umIdQ77 kfxr{yslpu^AmdKI;Vst0J37R5&!@I literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-11.png b/pacman-project/pacman-sprites/pacman-death-11.png new file mode 100644 index 0000000000000000000000000000000000000000..c6abefa7170460ae0170811798385eafda8d96f8 GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAzp3oOLTPoTKMZZe}H)Cg8^`A*twfA#;YC1aFX=!lDGPjh7ix Wukc8ojtIRBiX=~0KbLh*2~7Z=>Z^wU literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-12.png b/pacman-project/pacman-sprites/pacman-death-12.png new file mode 100644 index 0000000000000000000000000000000000000000..939fc6ff16e75cf9d366d98c1d8972e29e7219ae GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAmOTy{OZoPQOEmha2%P(2>$p*zVe)zw>Fkeb(?L<;>FVdQ&MBb@0B};F^#A|> literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-13.png b/pacman-project/pacman-sprites/pacman-death-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f91e01f455f2b203a723e995043badf804fc6ed7 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA=M-jX0TeQUkT~C z#r9yLbvcKLS%X>ZIyJEeeXkN$+|(=yUr^mD+n}|qLA&aY`jI$B-<*($vz!%-{T!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAb^x z-@L%`SVXn_`qw)?=lHe;8Y}6yg};(LxW*cxFgHIXGLmuN Z@4vV$&v|kBoYkOM^>p=fS?83{1OP<&&ZGbU literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-3.png b/pacman-project/pacman-sprites/pacman-death-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebe5c6d57da359701c30da3b6eeb616cdcce376 GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAq@lu!Y_-Dej@tL4pb)D>-NJsX)r6mD30u&rdXNhXv*!@4gfVtB}fwl3V Rs4yr#Jzf1=);T3K0RZ~##%KTl literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-4.png b/pacman-project/pacman-sprites/pacman-death-4.png new file mode 100644 index 0000000000000000000000000000000000000000..09157bdfbb4c51e196f0a2be4035c56ff2f8b5f0 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAd%pXCOYi#Y1(71eUSZgK?!?k+m8qXH7q(Yfn=!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAye9j@cJt^92~)e|}|B&(;!DuK2$@1Qdgwu6{1-oD!M< DzBI&C literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-6.png b/pacman-project/pacman-sprites/pacman-death-6.png new file mode 100644 index 0000000000000000000000000000000000000000..17a34d2eab41b102a771aba35151dd573bed9656 GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAJB6M}5*ITN9WsOkJ$)G~NAK@Eg_*j6de|!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAV*Gt6Mw iXi|EpA>#IimCOv+m-5JFzPdjN6kVRKelF{r5}E+gi?$H} literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pacman-death-8.png b/pacman-project/pacman-sprites/pacman-death-8.png new file mode 100644 index 0000000000000000000000000000000000000000..1dbac6eb740ac4d40def7cb19a3c120dd4e1b31b GIT binary patch literal 667 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA@%1Z^@+}>z89`ZP)&^5tyQMR)=M;?Qn?~AqrKNJohV4JX5GL6GR?802u$t)LJ vo;-+a$aE^>-INydNP_JEkJ7Yd7K)4vfj5Pux4e3F85DP(u6{1-oD!M!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA)Zxs4Wy!HC9-fO-DnJF_Fxw}P{3$+R-yLArvmW>-U^XTlTUJ7>3zsla#g|g t2g4nP9InJ91F4$|GbHYCpO~~{1LNUsLXuK7Ew?~1=jrO_vd$@?2>_!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAC!oZAi<#~_VINkW zWlirUCprBRo~gpQ>%?Rg&ZI4y->JA>SQ?->Nu<$iRfo#Q^SO`x Xd98?YVp5qXC{jIL{an^LB{Ts5un@@t literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pinky-down-1.png b/pacman-project/pacman-sprites/pinky-down-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9783321d9b0c31e802db10d0beefd9c53a9bb0b8 GIT binary patch literal 726 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAso%* zG?|^zxtH~7S5r#jnKzG`HPgbj@7VKf;--Cz^DC$7b!91puFx`_W%I$GCv0Zg0`Yqh z#plhKo#ro>bh^Gmj%Sa-}9iBX7N31U;8yi$9Hl`=d9nY_+O)T=;mMUy-#!>3f^5P42pJ7S3j3^ HP6!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAwnZ76O%N5FMTaw>Y`Uuc#Mv^HH+FDys$}4`a`qnvpZRv z8@u`Ts>gTe~DWM4f Du87#8 literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pinky-left-1.png b/pacman-project/pacman-sprites/pinky-left-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cce34ad6be9c9282267a53090be36813681f6517 GIT binary patch literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAzF6q zzcyd;M|xK&@8;uIlqa0X@_b{N%=+)gOb@xW;mdKI;Vst0Hem# Am;e9( literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pinky-left-2.png b/pacman-project/pacman-sprites/pinky-left-2.png new file mode 100644 index 0000000000000000000000000000000000000000..897d689fc28ed9a2c9f29b891b881860df30920a GIT binary patch literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAgH@|0S=`}MRk2!m-{UL%IlsH)F`z~ylSd>lu4or+x6mAjBMZaRJUqY z^=D7cVi0=l>z`-Z5y!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA&VVLeCmJx?4gEYEao?s)V3kIgOh=XUYMhb6j#QuV#^zv#(di8wera%(5&u!RwFCGyO?l^;;pU+vSD<{Bd5Xs?N@edU1p00i_>zopr E084z>HUIzs literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pinky-right-2.png b/pacman-project/pacman-sprites/pinky-right-2.png new file mode 100644 index 0000000000000000000000000000000000000000..677e4914eedd411224d2534cd78fe73a4a5cda7c GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA zRvFE$EMHTFgZA8ujS_HoQCxT4aNCr`)wOpY`DiT`4d&kJCCxkOg0OLTaaW_x9AiO! z*#oNEB^q>E{lA@c{$dv`r@f|_jnAZ1A=+u-^o5?=8~8ge{My2NGV*ba@-vPo4r%WF zvPviXKl}53d4KA0gv8@amdGP=kzKwzLaUA+X)-TleEGy6vf6iw5h&I@UHx3vIVCg! E0InF&7XSbN literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pinky-up-1.png b/pacman-project/pacman-sprites/pinky-up-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bbee0a997d6a67d5a84f046a6273fd9935481987 GIT binary patch literal 713 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAprU^=6Wej^4(quJrQG{Of;?_{_dqy85+KKGVHurO2M+8Lete3C=5??6}hN&6JJf zM5>tAH3yZyeZjj5x20(9c<|m&`GB~h;Unhh(HZJ}M@~3NFKZGE>i)@kgm2>f=H^3t s#gpZ>@l14x;$3uJM)%QEZQ(E1mdKI;Vst0MvWXc>n+a literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/pinky-up-2.png b/pacman-project/pacman-sprites/pinky-up-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7c16b0890b1862d051da1c685618b1f3e07bedcc GIT binary patch literal 714 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAO)CT@|!=zWSFV544s`WgM2yezWtc zgQx%J3kkEQx13#S`T9W8gZ?M8%MDGRiq5#hxkxTfMMhC6{;Cx7+^y3uU-`t5_Ikg< z<2b%Jvkm$09qfaj1opbKU$a)2_`z=NDF6*2U FngFjz+Hn8? literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/scared-ghost-blue-2.png b/pacman-project/pacman-sprites/scared-ghost-blue-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2742a99539a70e21cdb330b4f3e687563ffb9efe GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA{wu_fpAt+qx!MHbKBpJzp#lE}XQSRzL2Lf1*Bu#FcpIBgAgoY7>vv*FmB=sd%O zOP6n%-gs`B@cL0y;gOt#{*>9}JF`A%XB4V`sHzYwXX(FlNQ-&i*6`IUmk7FSQ*}RE zZCY{C;onZ?e=&t2{LJ&-A22h$o^e#J?B`5{ip_rF9x2YdWY0Q)qTJKf&t;ucLK6Tj C8`<6f literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/scared-ghost-white-2.png b/pacman-project/pacman-sprites/scared-ghost-white-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d132ce64f474b5fbea1a7da062fb843bc89b55 GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA7RK#j^&F-RL$p;obx|!Q2!FqdRR>4!e?p5_glrC_iSS@=;xCECbl_DZK8Nk z1hc$P>Sd;#cI!^KTR!P-5PMl1UNmL*Umt~@8?2dT#wU3vl?Z~O+|$+1Wt~$(69A~k B()R!W literal 0 HcmV?d00001 diff --git a/pacman-project/pacman-sprites/scared-ghost-white=1.png b/pacman-project/pacman-sprites/scared-ghost-white=1.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb6808bccbd3d23e0dcb28ae0d393d07d11c3f1 GIT binary patch literal 723 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPAoHL_iSS@*v=*W>6vl3+C=uC zRdzK7Q+>JZmVH<}!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S%C%22sTKeT1WgFpdpc&ArU1JzCKpT z`MG+DDfvmMdKI|^AO#FI6;?oIZfZ%QLPc&)Ua?h$trA#;6_5=Q)>l#hD=EpgRf_Np zP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q_413-^$jg8 zE%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA6HcJIW>^b{>x= z?Yy{E^unAVt%>s=|5}rCXz{_?{rLsC4Q?lAU(w%FB<;Lf(JySV;}s_BMN@C_TNm)A zaPIkkbmE+L?$@(EY7{6+;>M2MR)0FJFG>GnU~`?ZG2_pX QHK6GCboFyt=akR{03mPRO#lD@ literal 0 HcmV?d00001 diff --git a/pacman-project/pacman.rkt b/pacman-project/pacman.rkt new file mode 100644 index 0000000..a449321 --- /dev/null +++ b/pacman-project/pacman.rkt @@ -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))))) diff --git a/pacman-project/pause-menu.rkt b/pacman-project/pause-menu.rkt new file mode 100644 index 0000000..5579fb8 --- /dev/null +++ b/pacman-project/pause-menu.rkt @@ -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!))))) diff --git a/pacman-project/pp1.zip b/pacman-project/pp1.zip new file mode 100644 index 0000000000000000000000000000000000000000..528a4a1c3f4321d0249a67bd1961544a5dbcbdd4 GIT binary patch literal 8674 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 TApiaz@IQyhpKlB!{QLA@hN2wb literal 0 HcmV?d00001 diff --git a/pacman-project/score.rkt b/pacman-project/score.rkt new file mode 100644 index 0000000..944d17e --- /dev/null +++ b/pacman-project/score.rkt @@ -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!)))) diff --git a/pacman-project/screen.rkt b/pacman-project/screen.rkt new file mode 100644 index 0000000..029d765 --- /dev/null +++ b/pacman-project/screen.rkt @@ -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!))))) diff --git a/pacman-project/test.rkt b/pacman-project/test.rkt new file mode 100644 index 0000000..fa76c73 --- /dev/null +++ b/pacman-project/test.rkt @@ -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))))) \ No newline at end of file diff --git a/pacman-project/time-limit.rkt b/pacman-project/time-limit.rkt new file mode 100644 index 0000000..deb1216 --- /dev/null +++ b/pacman-project/time-limit.rkt @@ -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)))) diff --git a/pp1/PacMan.bmp b/pp1/PacMan.bmp new file mode 100644 index 0000000000000000000000000000000000000000..42874cc2083086d4ab54e795c2cea7595867ee55 GIT binary patch literal 115738 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 NlAJoEUdAHgzW~W?Q|kZ# literal 0 HcmV?d00001 diff --git a/pp1/PacMan_mask.png b/pp1/PacMan_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..443bed0f767bb0c3fc547090f820528a3e3434d7 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^t3a584M^ISU1?%qV9M}xaSW-L^Y-q=TxLZ9hl2u3 z|4-A`P2g;iHxE8|vM#FrP2=&;Hs|?kcHY0t&tTl*)fC_bOFMV=BwSNeUrC zD1v|H)-_x`Cb3*TaklyXiJ6Nq6u@-#tqaJHD}T4)^=GX$X})Ntz!bH39r`4?YHP;% zH|1qTSF>=NhT;Zi)6TrSWvPZEJj{Y8=S(WXoiZMdR`s&~BN% z@}GxlI^d?@ekWtM5yG(#Jh^cXx{{an^L HB{Ts5MuzhJ literal 0 HcmV?d00001 diff --git a/pp1/main.rkt b/pp1/main.rkt new file mode 100644 index 0000000..663425d --- /dev/null +++ b/pp1/main.rkt @@ -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) \ No newline at end of file diff --git a/pp1/main.rkt~ b/pp1/main.rkt~ new file mode 100644 index 0000000..362a9a3 --- /dev/null +++ b/pp1/main.rkt~ @@ -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)) \ No newline at end of file diff --git a/pp1/pp1/compiled/drracket/errortrace/graphics_rkt.dep b/pp1/pp1/compiled/drracket/errortrace/graphics_rkt.dep new file mode 100644 index 0000000..c1fe649 --- /dev/null +++ b/pp1/pp1/compiled/drracket/errortrace/graphics_rkt.dep @@ -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")) diff --git a/pp1/pp1/compiled/drracket/errortrace/graphics_rkt.zo b/pp1/pp1/compiled/drracket/errortrace/graphics_rkt.zo new file mode 100644 index 0000000000000000000000000000000000000000..32313331e989a274c6a8b7d3088021ea94d48a21 GIT binary patch literal 77873 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≤zK2> zl=7&b^9T$W_2g~@l`sutohqirL5f)zemI$YRF!S%1X5?qaAMp2J3_R~^sZ;Id>Rxw zyC8I;&g;oSCA4?x7ZV1w@eP8y1XaxReEC5sgD?178@}K|0Esd*r1$&k9bMJw6~k4l~Ac2&5X7naWG~n7BpW##(QUDt0*dQAW@Rj%4?ddcv>By#1u1 zSL8iGM10FvRNU71Uz0c(kW_)gxl)DV+XRh{v1=L5$xy;EAvY9;prwVmU7SFWWc8IJ zWME$@!kGJh5i!58amXB`tX9^@T3ILavR)Q~UkxK0jPVgLp`+XSD{t?%{;A28Yqj6e zf7@s0`qe(`bdv8Z!T#B_1Za(1bEVpCmrMqVJ6JAM<$}*YKJt#r1;CtD<)ST?C>ox$ zqObB$Ig*>nTz9bBM3TJjGZ!8+ld$tf(rx32M@0h-0-?G*K1g_#Ayq{UjaEBJbzQK7 z^e6NpSedohDW|Rts%9_2i1Q#0MBgxEv9}nq7|N*wL{M5s-qOgXzKu+7SP77wT9eg@ mYOmz#HQn?NPF*a?DrQ3vr2*m%6XBjTpft;964B|FZ;P;4i-k-)~LiQ}ZCBx`GBE0!f$ zyK)kmfT=Jb)RX}2KwBuZ!_W>xC$tojc2W`^!IXh1Glk(FI%7J})hEmfI+_RGH z7!z7~wAS9;z4xATzxzAiR^P&Gs`s08WqnlL+&TF0+4$MP-4FBGXJ&hZm-dV_-}g5G za-V@A_2xH@juTi@SNq8JwIOE#@K(`I*_bk-QZ^C`$3>uQNF9i>R*_Ikb!{{f8;+`a zA&)U^nXmk#LEnho0$wwb|idI9r%4a+z-J_?}6at#JB+FGFbb=yF{osDuVdn zX6Sh(FgeNXfTqcpxk>m2j=S;%h?Wzud62o0grQ`^akw>*Ifs#KI7j2R8<4r0cGFY0fmA0LD&Xz;kIp1Y~KdLF=B0afgB^F)mG*hDTd?lXdpA) zL{eoP}i<*C^_B@$1yN7cHR@n{OL*3ni+BSfx~2HTu=4EhGxR` z!2=^syuK4B)n^P=T+OiCpce4ZjqQ7PQEK}&!~Yn%ag2b6RJv|G1QrjGGw15ap6Rm} z=jM80RpFbxz#nATUKsz!g}J$|OowkJF~`}S6La|409)p!TqY+e{;Uatrs+yd2Zu;qg=0!GqVz{qucqo%4IwogiK(9Cuf4xo8tXeH!CugZT$3sI7(5e#n=VM?IN z>zjcRX%_rfOLjZCAX;&@SBNH8u@;T*_o@fCuW1QoKoz-sqv#lk zhflMyAM;)kKv8ajUOk>$ZEt>N zS~UekMk1cnm8e(K58%T_iy8AW775LtIg;u?DtW2<+#QR9<<2xU8unsX#?ulQ;fN-> z5<5^)a?!}m>imG-grX05F&!!nC33VL+G1oEMPfzF_vSxih;JDgJyQ{Vr1cQ&VcxAovL{G(q5$1)LCuYYa5^ zfq(K0eHNMqnfF#fN%^gbhF@}nmKIMO%$^yl-mdjM&-V#)&hT*WBSq#Dyv@|fR9 zOiSdJceTN{JQs3!GxqpK+~e1?lt{o5T7WQ2B^nGm=}JFXS%j9GLhBNETE7CFQ5c;k z=LiV6D?cm1jy+#Rm|x`q!+L$zZOh=olS+=TGNCx3qMQMcsKg*zF9E^$W#FJ?DGgxl zQWg-$Qe9Vn2>}vo^eCAOluKsGB3X0VCz8$XaYIgk*^=b~%$n*$_pU(!7XCj0no)pc z90gdAzQ_p^Nkev6DudZxqa2pz#duvYyqI?xALB@YQ`Z>^dd>pp@n)>G=mVUn&eGt? zBKY~DI^|VxL(XTUb3WrYHBfzoY=-9aho#?vPskBvE|`8^?%H(y&SbJP^Y;h@1DX96 z2lR-6$*n{IOEY`~^<9~%V5Y|s%ml>XWLp*3AB1%%)+4Ytc+#k;cfqdqxi>#}QGo5! zhwyv~?!u~Diqnzbf3(Z$S|@-HAa>pGG12jk5a~3ei7hgP16-W)cZM zSeFQ>_$vf-nc6#3fg0L|dmUh+Z1qCf%vV6Sy>ufdLYc_8EIE}|!1-V~`oax^`-b;L znj=j&H!F?FSVTV<9t*F>j-b?M68SRG=CWwjm7Th&p=NKTrrM*O$I7oj=s~Ra!doJQKIj^F7h3`7BOtjI$-(4X8 zgg~a7>C9}kVX|@k=ia5oZ@)|Bqr?x-e!9RL{ni3#|y79%=7xLuFPz}KNmndxf_IC z;579!uDw|NcLCXwY7Cx`2>%9ib!X=DTE^4^TnE_~+|*@GIkvOh8q#Rew>}Gyu-9l zq0zI^*7OEitj zYBCv57HVu&BpzcK7t9nP*2)Z{WVPdQ9gMj|O;4tlTCCPp>tWuawLn1?s3_1~t};Jd zpk8#Q`az`jKs1GVYrUckggW5O$4s%joAuGxYsXRhuYfxQZrMjk9ko5qm}kko z6oNdFM7!q%IqHKAE}XpX)j1XIBToH#u24&G6^#i_@IyhH*T=d40x~CXAY0dd3{UxS z;060BL#0eSt|DCi`PHAVSjOrz_{mianzxOY%;Wl{<$@W1{0ruh5ri+;@_K)D1@Bmq zcaDqBxIshfiX0eIqA4|m)>2q@L!1zY^OD`n#}*@Wc>#)%_~L+hpcw<2C{PlkG)8ns z?hUw_VhfkIaA+h6Evz5Jtj(LeXhc_&O0>#wa#XC( h48v@ZT|hZK-7ow7I(_ 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 graphics.rkt <<< *;;;; +;;;;* > Programmeerproject 2025-2026 < *;;;; +;;;;* *;;;; +;;;;* >> Versie 2 << *;;;; +;;;;* *;;;; +;;;;* Adapted by: *;;;; +;;;;* Bjarno Oeyen *;;;; +;;;;* Carlos Rojas Castillo *;;;; +;;;;* *;;;; +;;;;* Original implementation by: *;;;; +;;;;* Brecht De Rooms *;;;; +;;;;* Christophe Scholliers *;;;; +;;;;* *;;;; +;;;;* Software Languages Lab *;;;; +;;;;*----------------------------------*;;;; + +;; In R5RS projects, include this library using +;; (#%require "Graphics.rkt") + +;; In Racket projects, include this library using +;; (require "Graphics.rkt") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require (only-in compatibility/mlist mlist? list->mlist mlist->list)) +;; R5RS's cons-cells are different from Racket's cons-cells... In Racket +;; mutable cons-cells are known as mcons-cells. As this library has been +;; written using Racket, all incoming lists must be converted accordingly. + +(require racket/gui/base) +(require racket/string) + +(provide make-window + make-tile + make-bitmap-tile + make-tile-sequence + generate-mask) + +;;;; --------------------------------------------------------------------- ;;;; +;;;; Note: this is NOT a reference on how to code cleanly. ;;;; +;;;; this code needs to be cleaned up since we mainly did all the ;;;; +;;;; dirty graphics work to achieve a decent drawing efficiency and ;;;; +;;;; to make sure students don't waste time on this. ;;;; +;;;; --------------------------------------------------------------------- ;;;; + +;;;;############################### WINDOW ##################################### + +;;;;--------------------------------------------------------------------- +;;;; make-window creates a window that accepts tiles and tile-sequences. +;;;; changing the x-value of a tile will update the canvas. +;;;;--------------------------------------------------------------------- + +(define default-maximum-fps 60) +(define fps-refresh-time 1000) +(define ignore-held-key #t) +(define default-background-colour "black") + +(define (make-window w h title (maximum-fps default-maximum-fps)) + (let* ((show-fps #t) + (fps 0) + (fps-accum-dt 0) + (fps-accum-frames 0) + (delta-time 0) + (previous-time (current-milliseconds)) + (background-color #f) + + ;; Define our dummy keyboard-callback + (keyboard-callback (lambda (state key) (void))) + + ;; Define our dummy update-callback + (update-callback (lambda (ev) (void))) + + ;; Draw callback + (draw-callback (lambda () (void))) + + ;; Define our dummy mouse-move-callback + (mouse-move-callback (lambda (x y) (void))) + ;; Define our dummy mouse-click-callback + (mouse-click-callback (lambda (btn state x y) (void))) + + (game-loop (lambda (deltatime events) (void))) + (game-loop-timer #f) + (layers '()) + + (background-string "black") + + (closed #f)) + + ;; Define the paint-callback which is called each frame + (define (paint-callback canvas dc) + ;; before we do anything, the game-loop is executed. + (draw-callback) + + ;; Set the background colour (once!) + (when background-color + (send dc set-background background-color) + (set! background-color #f)) + + ;; Clear everything on the draw context + (send dc clear) + + ;; Draw all layers on each frame + (for-each (lambda (layer) ((layer 'draw) dc)) layers) + + ;; calculate frames per second. + (update-fps! delta-time) + + ;; Construct the fps string and set the fps in the frame label + (when show-fps + (send frame set-label (construct-fps-string title fps)))) + + ;; Calculate FPS from the time (ms) since last frame + (define (update-fps! dt) + (set! fps-accum-dt (+ fps-accum-dt dt)) + (set! fps-accum-frames (+ fps-accum-frames 1)) + (when (> fps-accum-dt fps-refresh-time) + (set! fps fps-accum-frames) + (set! fps-accum-frames 0) + (set! fps-accum-dt (- fps-accum-dt fps-refresh-time)))) + + ;; Construct FPS string + (define (construct-fps-string title fps) + (string-append title + " - fps: " + (number->string fps))) + + (define keyboard-state (make-hasheq)) + (define (handle-keyboard new-state key) + (define old-state (hash-ref keyboard-state key #f)) + (if (or (eq? key 'wheel-down) + (eq? key 'wheel-up)) + (keyboard-callback new-state key) + (when (or (not (eq? old-state new-state)) + (not ignore-held-key)) + (hash-set! keyboard-state key new-state) + (keyboard-callback new-state key)))) + + ;; Make a canvas class that uses our own keyboard callback. + (define my-canvas% + (class canvas% ; The base class is canvas% + ;; Define overriding method to handle keyboard events + ;; this makes sure our own key-callback is called. + (define/override (on-char event) + (define evt (send event get-key-code)) + (if (eq? evt 'release) + (handle-keyboard 'released (send event get-key-release-code)) + (handle-keyboard 'pressed evt))) + (define/override (on-event event) + ;; mouse events + (let* ([type (send event get-event-type)] + [x (send event get-x)] + [y (send event get-y)]) + (cond + [(eq? type 'motion) (mouse-move-callback x y)] + [(eq? type 'left-down) (mouse-click-callback 'left 'pressed x y)] + [(eq? type 'left-up) (mouse-click-callback 'left 'released x y)] + [(eq? type 'middle-down) (mouse-click-callback 'middle 'pressed x y)] + [(eq? type 'middle-up) (mouse-click-callback 'middle 'released x y)] + [(eq? type 'right-down) (mouse-click-callback 'right 'pressed x y)] + [(eq? type 'right-up) (mouse-click-callback 'right 'released x y)]))) + + ;; Call the superclass init, passing on all init args + (super-new))) + + ;; Make a frame class that can react to closing events + (define closing-frame% + (class frame% + (super-new) + (define (on-close) + (set! closed #t)) + (augment on-close))) + + ;; Create frame in which we can place a canvas. + (define frame + (new closing-frame% + [label title] + [width w] + [height h])) + + ;; Create the canvas with the custom paint-callback + ;; This paint-callback is called each time the canvas is refreshed. + ;; How fast the canvas is refreshed is handled later. + (define canvas (new my-canvas% + [parent frame] + [paint-callback paint-callback] )) + + ;; ############################################################# + ;; ###### public methods for the window ADT #################### + ;; ############################################################# + ;;Create and add layers to the window + (define (new-layer!) + (define layer (make-layer w h canvas)) + (set! layers (append layers (list layer))) + layer) + + ;; Set the backgroudn color of the window + (define (set-background! str) + (set! background-string str) + (set! background-color (make-object color% str))) + + ;; ############################################################# + ;; ###### Setting up a self-sustaining game-loop ############### + ;; ############################################################# + ;; Here we handle how fast the canvas is refreshed and thereby how + ;; fast paint-callback will be called. + (define (launch-game-loop) + (let* ((min-wait-per-frame 1) ; apparently this has to be at least 1 to avoid locking up. + (ms-per-frame (quotient 1000 maximum-fps))) ; calculate the MINIMUM delta-time in ms between two frames. + + ;; calculate the min delta-time given the min-wait-per-frame + (define (calculate-interval) + (truncate (max + (- ms-per-frame delta-time) + min-wait-per-frame))) + + ;; The heart of the self-sustaning loop. + (define (game-loop) + ;; get the new delta-time + (set! delta-time (- (current-milliseconds) previous-time)) + ;; We wait for min-delta-time, which is typically the min-wait-per-frame + (when (>= delta-time ms-per-frame) + ;; Perform an update... + (update-callback delta-time) + ;; calculate actual delta-time. + (set! previous-time (current-milliseconds)) + ;; call the canvas refresh which will trigger a paint-callback + (send canvas refresh-now)) + (when (not closed) + ;; When the game-loop is done we fire the game-loop again + ;; after waiting min-delta-time ms, unless the window is closed. + (send game-loop-timer start (calculate-interval) #t))) + + ;; a timer drives the game-loop which calls the game-loop after waiting + ;; 'interval'. A timer normally calls every 'interval' ms but with + ;; just-once? #t we prevent that since it will be the game-loop itself + ;; that will keep itself alive. + (set! game-loop-timer + (new timer% [notify-callback game-loop] + [interval (calculate-interval) ] + [just-once? #t])))) + + (define (adjust-size) ;; Some operating systems do not properly initialise the size of the window. This procedure computes a correction, and applies it + (define-values (size-w size-h) (send frame get-size)) + (define-values (client-size-w client-size-h) (send frame get-client-size)) + ;; (display "user-size: ") (display (list w h)) (newline) + ;; (display "window-size: ") (display (list size-w size-h)) (newline) + ;; (display "client-size: ") (display (list client-size-w client-size-h)) (newline) + (define correction-w (- w client-size-w)) + (define correction-h (- h client-size-h)) + ;; (display "correction: ") (display (list correction-w correction-h)) (newline) + (send frame resize (+ w correction-w) (+ h correction-h))) + + ;; dispatch + (define (dispatch-window msg) + (cond ((eq? msg 'new-layer!) new-layer!) + ((eq? msg 'set-background!) set-background!) + ((eq? msg 'set-key-callback!) (lambda (eh) (set! keyboard-callback eh))) + ((eq? msg 'set-update-callback!) (lambda (uc) (set! update-callback uc))) + ((eq? msg 'set-draw-callback!) (lambda (dc) (set! draw-callback dc))) + ((eq? msg 'set-mouse-click-callback!) (lambda (mc) (set! mouse-click-callback mc))) + ((eq? msg 'set-mouse-move-callback!) (lambda (mc) (set! mouse-move-callback mc))) + ((eq? msg 'set-title!) (lambda (t) (set! title t))) + ((eq? msg 'get-title) title) + ((eq? msg 'get-background) background-string) + (else (raise-arguments-error 'window + "wrong message sent" + "message" + msg)))) + + ;; set background + (set-background! default-background-colour) + + ;; launch the self-sustaining game-loop. + (launch-game-loop) + + ;; adjust the size of the window + (adjust-size) + + ;; Show the window + (send frame show #t) + (send canvas focus) + + ;; Change the mouse event mode + (send frame wheel-event-mode 'one) + + dispatch-window)) + + +;;;;################################ GET SPRITES FROM DISK ####################################### +;;;;--------------------------------------------------------------------- +;;;; make-bitmap creates a bitmap given a path to an image file +;;;; String -> get-bitmap +;;;;--------------------------------------------------------------------- +(define (get-bitmap file) + (let ((bitmap (make-object bitmap% 1 1))) + (unless (file-exists? file) + (error 'get-bitmap "Cannot load file path: ~a" file)) + (send bitmap load-file file) + bitmap)) + +;;;;--------------------------------------------------------------------- +;;;; make-bitmap creates a bitmap given a path to an image file +;;;; String -> get-bitmap-section +;;;;--------------------------------------------------------------------- +(define (get-bitmap-section tilebitmap x y width height) + (define target-bitmap (make-object bitmap% width height)) + (define target-dc (new bitmap-dc% [bitmap target-bitmap])) + (send target-dc draw-bitmap-section tilebitmap 0 0 x y width height) + target-bitmap) + +;;;;--------------------------------------------------------------------- +;;;; generate-mask generates a mask and saves it to disk. +;;;; String, String -> void +;;;;--------------------------------------------------------------------- +(define (generate-mask bitmappath background-color) + (when (string? background-color) (set! background-color (send the-color-database find-color background-color))) + (define bitmap (get-bitmap bitmappath)) + (define dc (new bitmap-dc% [bitmap bitmap])) + (define white-pixel (make-object color% "white")) + (define black-pixel (make-object color% "black")) + (printf "Generating mask for ~a...~n" bitmappath) + (for ([w (send bitmap get-width)]) + (for ([h (send bitmap get-height)]) + (define pixel (make-object color%)) + (send dc get-pixel w h pixel) + (if (and (= (send background-color red) (send pixel red)) + (= (send background-color blue) (send pixel blue)) + (= (send background-color green) (send pixel green))) + (send dc set-pixel w h white-pixel) + (send dc set-pixel w h black-pixel)))) + (define extension (path-get-extension bitmappath)) + (when (not extension) (raise 'unknown-extension)) + (define extension-str (bytes->string/utf-8 extension)) + (define old-suffix extension-str) + (define new-suffix "_mask.png") + (define maskpath (string-replace bitmappath old-suffix new-suffix)) + (printf "Saving mask to ~a...~n" bitmappath) + (define save-result (send (send dc get-bitmap) save-file maskpath 'png)) + (when (not save-result) (raise 'save-failed)) + (void)) + + +;;;;################################ TILES ####################################### +;;;;--------------------------------------------------------------------- +;;;; make-bitmap-tile creates a tile from a bitmap with optionally a mask. +;;;; [] mean it is optional. +;;;; String, [String] -> Tile +;;;;--------------------------------------------------------------------- +(define (make-bitmap-tile bitmappath [mask #f]) + (define bitmap (get-bitmap bitmappath)) + (make-tile (send bitmap get-width) (send bitmap get-height) bitmap mask)) + +;;;;--------------------------------------------------------------------- +;;;; make-tile creates a tile from a width and height with optionally +;;;; a bitmap and a mask. +;;;; [] mean it is optional. +;;;; Number, Number, [String, [String]] -> Tile +;;;;--------------------------------------------------------------------- +(define (make-tile w h [bitmap #f] [mask #f]) + (when (string? bitmap) (set! bitmap (get-bitmap bitmap))) + (when (string? mask) (set! mask (get-bitmap mask))) + (when (not bitmap) (set! bitmap (make-object bitmap% w h #f #t))) + (define bufferbitmap (make-object bitmap% w h #f #t)) + (let* ((x 0) + (y 0) + (x-scale 1) + (y-scale 1) + (mask-dc (new bitmap-dc% [bitmap mask])) + (update-callback (lambda () #t)) + (bitmap-dc (new bitmap-dc% [bitmap bufferbitmap])) + (rotation 0)) + + (define (trigger-update!) + (update-callback)) + + (send bitmap-dc draw-bitmap bitmap 0 0) + + ;; ##### Drawing methods to draw on the tile yourself. + ;; Clear removed your own drawings. + ;; void -> void + (define (clear) + (set! bufferbitmap (make-object bitmap% w h #f #t)) + (set! bitmap-dc (new bitmap-dc% [bitmap bufferbitmap])) + (send bitmap-dc draw-bitmap bitmap 0 0) + (trigger-update!)) + + ;; Drawing a rectangle + ;; Number, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-rectangle x y w h color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-brush color 'solid) + (send bitmap-dc set-pen color 1 'transparent) + (send bitmap-dc draw-rectangle x y w h) + (trigger-update!)) + + ;; Drawing an Ellipse + ;; Number, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-ellipse x y w h color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-brush color 'solid) + (send bitmap-dc set-pen color 1 'transparent) + (send bitmap-dc draw-ellipse x y w h) + (trigger-update!)) + + ;; Drawing a Line + ;; Number, Number, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-line x y w h width color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-pen color width 'solid) + (send bitmap-dc draw-line x y w h) + (trigger-update!)) + + ;; Drawing Text + ;; String, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-text text fontsize x y color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-font (make-object font% fontsize 'default)) + (send bitmap-dc set-text-foreground color) + (send bitmap-dc draw-text text x y) + (trigger-update!)) + + ;; Rotation of 90 degrees clockwise. + ;; void -> void + (define (rotate-clockwise!) + (rotate! (modulo (+ rotation 90) 360))) + + ;; Rotation of 90 degrees counterclockwise. + ;; void -> void + (define (rotate-counterclockwise!) + (rotate! (modulo (- rotation 90) 360))) + + ;; Internal Rotation Function with a hack to solve + ;; the rather bizar way of rotating in the graphical DrRacket library. + ;; void -> void + (define (rotate! r) + (set! rotation r) + (trigger-update!)) + + ;; Set the X position on the screen + ;; number -> void + (define (set-x! new-x) + (unless (= x new-x) + (set! x new-x) + (trigger-update!))) + + ;; Set the Y position on the screen + ;; number -> void + (define (set-y! new-y) + (unless (= y new-y) + (set! y new-y) + (trigger-update!))) + + (define transparent-color (make-object color% 0 0 0 0)) + + ;; Drawing procedure called by the layer + ;; on which the tile is drawn. This should not be called in a student project! + ;; dc% -> void + (define (draw dc) + (define offset-x (+ x (/ w 2))) + (define offset-y (+ y (/ h 2))) + (send dc translate offset-x offset-y) + (define rotation-r (/ (* rotation pi) 180)) + (send dc rotate rotation-r) + (send dc set-scale x-scale y-scale) + (if mask + (begin (send mask-dc draw-bitmap mask 0 0) + (send dc draw-bitmap bufferbitmap (- (/ w 2)) (- (/ h 2)) 'solid transparent-color mask)) + (send dc draw-bitmap bufferbitmap (- (/ w 2)) (- (/ h 2)))) + (send dc set-scale 1 1) + (send dc rotate (- rotation-r)) + (send dc translate (- offset-x) (- offset-y))) + + ;; A procedure to set a callback. This callback + ;; will notify the parent (layers) that the tile + ;; has changed and allows us to automatically + ;; redraw the tiles. + ;; (void -> void) -> void + (define (set-on-update! new_callback) + (set! update-callback new_callback)) + + ;; Get the scale. If x-scale and y-scale are different, returns the average of the two. + ;; void -> number + (define (get-scale) + (if (= x-scale y-scale) + x-scale + (/ (+ x-scale y-scale) 2))) + + ;; number -> void + (define (set-x-scale! s) + (set! x-scale s)) + + ;; number -> void + (define (set-y-scale! s) + (set! y-scale s)) + + ;; Sets both scales at once. + ;; number -> void + (define (set-scale! s) + (set-x-scale! s) + (set-y-scale! s)) + + ;; Dispatch + (define (dispatch-tile msg . args) + (cond + ;; Not to be called manually + ((eq? msg 'draw) draw) + ((eq? msg 'set-on-update!) set-on-update!) + + ;; Getters and setters + ((eq? msg 'set-x!) set-x!) + ((eq? msg 'set-y!) set-y!) + ((eq? msg 'get-x) x) + ((eq? msg 'get-y) y) + ((eq? msg 'get-w) w) + ((eq? msg 'get-h) h) + + ;; Rotation + ((eq? msg 'get-rotation) rotation) + ((eq? msg 'rotate-clockwise!) rotate-clockwise!) + ((eq? msg 'rotate-counterclockwise!) rotate-counterclockwise!) + ((eq? msg 'rotate!) rotate!) + + ;; Scale + ((eq? msg 'set-x-scale!) set-x-scale!) + ((eq? msg 'set-y-scale!) set-y-scale!) + ((eq? msg 'set-scale!) set-scale!) + ((eq? msg 'get-x-scale) x-scale) + ((eq? msg 'get-y-scale) y-scale) + ((eq? msg 'get-scale) (get-scale)) + + ;; Clear whatever is on the tile + ((eq? msg 'clear!) clear) + + ;; Drawing + ((eq? msg 'draw-rectangle!) draw-rectangle) + ((eq? msg 'draw-ellipse!) draw-ellipse) + ((eq? msg 'draw-line!) draw-line) + ((eq? msg 'draw-text!) draw-text) + + ;; Error if other message is sent + (else (raise-arguments-error 'tile + "wrong message sent" + "message" + msg)))) + dispatch-tile)) + +;;;;--------------------------------------------------------------------- +;;;; tile-sequence is a sequence of tiles, it is created by passing a list +;;;; of tiles to the tile-sequence. A tile-sequence is meant to animate tiles. +;;;; When it is created, the current tile (index) is set on the first tile that +;;;; was added. Calling next will cycle through the tile-sequence and select the +;;;; next tile. +;;;; List -> Tile-Sequence +;;;;--------------------------------------------------------------------- +(define (make-tile-sequence tiles-in) + ;; Initialize the current index and its callback. + (let ((tiles (if (mlist? tiles-in) (mlist->list tiles-in) tiles-in)) ;; converts mutable list (r5rs) to immutable list (Racket). + (index 0) + (update-callback (lambda () #t))) + + ;; Change its coordiantes on the window + ;; Integer -> void + (define (set-x! new-x) + (for-each (lambda (tile) ((tile 'set-x!) new-x)) tiles) + (update-callback)) + + ;; Integer -> void + (define (set-y! new-y) + (for-each (lambda (tile) ((tile 'set-y!) new-y)) tiles) + (update-callback)) + + ;; choose which tile in the sequence is currently active + ;; by providing an index. + ;; Integer -> void + (define (set-current! new_index) + (if (or (>= new_index (length tiles)) + (< new_index 0)) + (error 'error "illegal index given for tile-sequence: ~a" new_index) + (begin (set! index new_index) + (update-callback)))) + + ;; Set the previous tile as active tile. + ;; void -> void + (define (set-previous!) + (set! index (remainder (- index 1) (length tiles))) + (when (< index 0) (set! index (- (length tiles) 1))) + (update-callback)) + + ;; Set the next tile as active tile. + ;; void -> void + (define (set-next!) + (set! index (remainder (+ 1 index) (length tiles))) + (update-callback)) + + ;; Drawing functions, each of them will forward the + ;; drawing instruction to the underlying tiles. + ;; void -> void + (define (rotate-clockwise!) + (for-each (lambda (tile) (tile 'rotate-clockwise) ) tiles) + (update-callback)) + + ;; void -> void + (define (rotate-counterclockwise!) + (for-each (lambda (tile) (tile 'rotate-counterclockwise) ) tiles) + (update-callback)) + + ;; Number, Number, Number, Number, String -> void + (define (draw-rectangle x y w h color) + (for-each (lambda (tile) ((tile 'draw-rectangle) x y w h color )) tiles) + (update-callback)) + + ;; Number, Number, Number, Number, String -> void + (define (draw-ellipse x y w h color) + (for-each (lambda (tile) ((tile 'draw-ellipse) x y w h color )) tiles) + (update-callback)) + + ;; String, Number, Number, Number, String -> void + (define (draw-text text fontsize x y color) + (for-each (lambda (tile) ((tile 'draw-text) text fontsize x y color )) tiles) + (update-callback)) + + ;; Number, Number, Number, Number, Number, String -> void + (define (draw-line x y w h width color) + (for-each (lambda (tile) ((tile 'draw-line)x y w h width color )) tiles) + (update-callback)) + + ;; Clears everything that is drawn by the user, + ;; if there were bitmaps, the bitmaps are restored. + ;; void -> void + (define (clear) + (for-each (lambda (tile) (tile 'clear)) tiles) + (update-callback)) + + + ;; redraw itself on the provided drawing context + ;; void -> void + (define (draw dc) + (((current) 'draw) dc)) + + ;; set update callback which is called every-time a sequence changes + ;; (void -> void) -> void + (define (set-on-update! new_callback) + (set! update-callback new_callback)) + + ;; Interal function to retrieve current (private). + ;; void -> Tile + (define (current) + (list-ref tiles index)) + + (define (rotate! d) + (for-each (lambda (tile) ((tile 'rotate!) d)) tiles) + (update-callback)) + + (define (set-x-scale! s) + (for-each (lambda (tile) ((tile 'set-x-scale!) s)) tiles) + (update-callback)) + + (define (set-y-scale! s) + (for-each (lambda (tile) ((tile 'set-y-scale!) s)) tiles) + (update-callback)) + + (define (set-scale! s) + (for-each (lambda (tile) ((tile 'set-scale!) s)) tiles) + (update-callback)) + + ;; Dispatch + (define (dispatch-tile-sequence msg) + (cond + ;; Not to be called manually + ((eq? msg 'draw) draw) + ((eq? msg 'set-on-update!) set-on-update!) + + ;; Moving and dimension and position getters. + ((eq? msg 'set-x!) set-x!) + ((eq? msg 'set-y!) set-y!) + ((eq? msg 'get-x) (lambda () ((current) 'get-x))) + ((eq? msg 'get-y) (lambda () ((current) 'get-y))) + ((eq? msg 'get-w) (lambda () ((current) 'get-w))) + ((eq? msg 'get-h) (lambda () ((current) 'get-h))) + + ;; Animations to switch between tiles + ((eq? msg 'set-current!) set-current!) + ((eq? msg 'get-current) index) + ((eq? msg 'set-next!) set-next!) + ((eq? msg 'set-previous!) set-previous!) + + ;; Rotation manipulations + ((eq? msg 'rotate-clockwise!) rotate-clockwise!) + ((eq? msg 'rotate-counterclockwise!) rotate-counterclockwise!) + + ;; Clear all manual drawings + ((eq? msg 'clear!) clear) + + ;; Rotation + ((eq? msg 'get-rotation) (lambda () ((current) 'get-rotation))) + ((eq? msg 'rotate!) rotate!) + + ;; Scale + ((eq? msg 'set-x-scale!) set-x-scale!) + ((eq? msg 'set-y-scale!) set-y-scale!) + ((eq? msg 'set-scale!) set-scale!) + ((eq? msg 'get-x-scale) (lambda () ((current) 'get-x-scale))) + ((eq? msg 'get-y-scale) (lambda () ((current) 'get-y-scale))) + ((eq? msg 'get-scale) (lambda () ((current) 'get-scale))) + + ;; Create manual drawings + ((eq? msg 'draw-rectangle!) draw-rectangle) + ((eq? msg 'draw-ellipse!) draw-ellipse) + ((eq? msg 'draw-line!) draw-line) + ((eq? msg 'draw-text!) draw-text) + + ;; Error + (else (raise-arguments-error 'tile-sequence + "wrong message sent" + "message" + msg)))) + dispatch-tile-sequence)) + +;;;;################################ LAYER ####################################### +;;;;--------------------------------------------------------------------- +;;;; layers in a window, each layer has a temporary bitmap. +;;;; Integer Integer canvas% -> Layer +;;;;--------------------------------------------------------------------- +(define (make-layer w h canvas) + + (let* ((drawables '()) ;; all drawables on this layer. + (bitmap (make-object bitmap% w h #f #t )) ;; buffer-bitmap for fast drawing + (bitmap-dc (new bitmap-dc% [bitmap bitmap])) ;; dc of bitmap (drawing context) + (needs-update #t)) ;; even faster drawing thanks to dirty bit. + + ;; redraw on temporary bitmap layer. + ;; void -> void + (define (redraw) + (send bitmap-dc erase) + + ;; This will redraw all drawables on the layer + ;; Therefore it is not wise to put one moving object together with a bunch + ;; of non-moving objects on ONE layer. + (for-each (lambda (tile) ((tile 'draw) bitmap-dc)) drawables)) + + ;; draw itself on given drawing context. + ;; dc% -> void + (define (draw dc) + (when needs-update + (redraw) + (set! needs-update #f)) + (send dc draw-bitmap bitmap 0 0)) + + ;; Adds a drawable to the layer which is a tile a tile-sequence or + ;; a drawable created by the student which suports 'draw' and 'set-on-update!' + ;; (Tile ∪ Tile-Sequence) -> void + (define (add-drawable drawable) + ((drawable 'set-on-update!) (lambda () (set! needs-update #t))) + (set! drawables (cons drawable drawables)) + (set! needs-update #t)) + + ;; Remove a drawable to the layer which is a tile a tile-sequence or + ;; a drawable created by the student which suports 'draw' and 'set-on-update!' + ;; (Tile ∪ Tile-Sequence) -> void + (define (remove-drawable drawable) + ((drawable 'set-on-update!) (lambda () #t)) + (set! drawables (remq drawable drawables)) + (set! needs-update #t)) + + ;; Removes all drawables from a single layer. + ;; void -> void + (define (empty!) + (for-each remove-drawable drawables)) + + ;; # dispatch + (define (dispatch-layer msg) + (cond ((eq? msg 'add-drawable!) add-drawable) + ((eq? msg 'remove-drawable!) remove-drawable) + ((eq? msg 'empty!) empty!) + ((eq? msg 'draw) draw) + (else (raise-arguments-error 'layer + "wrong message sent" + "message" + msg)))) + dispatch-layer)) diff --git a/pp1/pp1/graphics.rkt~ b/pp1/pp1/graphics.rkt~ new file mode 100644 index 0000000..cde0677 --- /dev/null +++ b/pp1/pp1/graphics.rkt~ @@ -0,0 +1,783 @@ +#lang racket + +;;;;*----------------------------------*;;;; +;;;;* >>> graphics.rkt <<< *;;;; +;;;;* > Programmeerproject 2025-2026 < *;;;; +;;;;* *;;;; +;;;;* >> Versie 2 << *;;;; +;;;;* *;;;; +;;;;* Adapted by: *;;;; +;;;;* Bjarno Oeyen *;;;; +;;;;* Carlos Rojas Castillo *;;;; +;;;;* *;;;; +;;;;* Original implementation by: *;;;; +;;;;* Brecht De Rooms *;;;; +;;;;* Christophe Scholliers *;;;; +;;;;* *;;;; +;;;;* Software Languages Lab *;;;; +;;;;*----------------------------------*;;;; + +;; In R5RS projects, include this library using +;; (#%require "Graphics.rkt") + +;; In Racket projects, include this library using +;; (require "Graphics.rkt") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require (only-in compatibility/mlist mlist? list->mlist mlist->list)) +;; R5RS's cons-cells are different from Racket's cons-cells... In Racket +;; mutable cons-cells are known as mcons-cells. As this library has been +;; written using Racket, all incoming lists must be converted accordingly. + +(require racket/gui/base) +(require racket/string) + +(provide make-window + make-tile + make-bitmap-tile + make-tile-sequence + generate-mask) + +;;;; --------------------------------------------------------------------- ;;;; +;;;; Note: this is NOT a reference on how to code cleanly. ;;;; +;;;; this code needs to be cleaned up since we mainly did all the ;;;; +;;;; dirty graphics work to achieve a decent drawing efficiency and ;;;; +;;;; to make sure students don't waste time on this. ;;;; +;;;; --------------------------------------------------------------------- ;;;; + +;;;;############################### WINDOW ##################################### + +;;;;--------------------------------------------------------------------- +;;;; make-window creates a window that accepts tiles and tile-sequences. +;;;; changing the x-value of a tile will update the canvas. +;;;;--------------------------------------------------------------------- + +(define default-maximum-fps 60) +(define fps-refresh-time 1000) +(define ignore-held-key #t) +(define default-background-colour "black") + +(define (make-window w h title (maximum-fps default-maximum-fps)) + (let* ((show-fps #t) + (fps 0) + (fps-accum-dt 0) + (fps-accum-frames 0) + (delta-time 0) + (previous-time (current-milliseconds)) + (background-color #f) + + ;; Define our dummy keyboard-callback + (keyboard-callback (lambda (state key) (void))) + + ;; Define our dummy update-callback + (update-callback (lambda (ev) (void))) + + ;; Draw callback + (draw-callback (lambda () (void))) + + ;; Define our dummy mouse-move-callback + (mouse-move-callback (lambda (x y) (void))) + ;; Define our dummy mouse-click-callback + (mouse-click-callback (lambda (btn state x y) (void))) + + (game-loop (lambda (deltatime events) (void))) + (game-loop-timer #f) + (layers '()) + + (background-string "black") + + (closed #f)) + + ;; Define the paint-callback which is called each frame + (define (paint-callback canvas dc) + ;; before we do anything, the game-loop is executed. + (draw-callback) + + ;; Set the background colour (once!) + (when background-color + (send dc set-background background-color) + (set! background-color #f)) + + ;; Clear everything on the draw context + (send dc clear) + + ;; Draw all layers on each frame + (for-each (lambda (layer) ((layer 'draw) dc)) layers) + + ;; calculate frames per second. + (update-fps! delta-time) + + ;; Construct the fps string and set the fps in the frame label + (when show-fps + (send frame set-label (construct-fps-string title fps)))) + + ;; Calculate FPS from the time (ms) since last frame + (define (update-fps! dt) + (set! fps-accum-dt (+ fps-accum-dt dt)) + (set! fps-accum-frames (+ fps-accum-frames 1)) + (when (> fps-accum-dt fps-refresh-time) + (set! fps fps-accum-frames) + (set! fps-accum-frames 0) + (set! fps-accum-dt (- fps-accum-dt fps-refresh-time)))) + + ;; Construct FPS string + (define (construct-fps-string title fps) + (string-append title + " - fps: " + (number->string fps))) + + (define keyboard-state (make-hasheq)) + (define (handle-keyboard new-state key) + (define old-state (hash-ref keyboard-state key #f)) + (if (or (eq? key 'wheel-down) + (eq? key 'wheel-up)) + (keyboard-callback new-state key) + (when (or (not (eq? old-state new-state)) + (not ignore-held-key)) + (hash-set! keyboard-state key new-state) + (keyboard-callback new-state key)))) + + ;; Make a canvas class that uses our own keyboard callback. + (define my-canvas% + (class canvas% ; The base class is canvas% + ;; Define overriding method to handle keyboard events + ;; this makes sure our own key-callback is called. + (define/override (on-char event) + (define evt (send event get-key-code)) + (if (eq? evt 'release) + (handle-keyboard 'released (send event get-key-release-code)) + (handle-keyboard 'pressed evt))) + (define/override (on-event event) + ;; mouse events + (let* ([type (send event get-event-type)] + [x (send event get-x)] + [y (send event get-y)]) + (cond + [(eq? type 'motion) (mouse-move-callback x y)] + [(eq? type 'left-down) (mouse-click-callback 'left 'pressed x y)] + [(eq? type 'left-up) (mouse-click-callback 'left 'released x y)] + [(eq? type 'middle-down) (mouse-click-callback 'middle 'pressed x y)] + [(eq? type 'middle-up) (mouse-click-callback 'middle 'released x y)] + [(eq? type 'right-down) (mouse-click-callback 'right 'pressed x y)] + [(eq? type 'right-up) (mouse-click-callback 'right 'released x y)]))) + + ;; Call the superclass init, passing on all init args + (super-new))) + + ;; Make a frame class that can react to closing events + (define closing-frame% + (class frame% + (super-new) + (define (on-close) + (set! closed #t)) + (augment on-close))) + + ;; Create frame in which we can place a canvas. + (define frame + (new closing-frame% + [label title] + [width w] + [height h])) + + ;; Create the canvas with the custom paint-callback + ;; This paint-callback is called each time the canvas is refreshed. + ;; How fast the canvas is refreshed is handled later. + (define canvas (new my-canvas% + [parent frame] + [paint-callback paint-callback] )) + + ;; ############################################################# + ;; ###### public methods for the window ADT #################### + ;; ############################################################# + ;;Create and add layers to the window + (define (new-layer!) + (define layer (make-layer w h canvas)) + (set! layers (append layers (list layer))) + layer) + + ;; Set the backgroudn color of the window + (define (set-background! str) + (set! background-string str) + (set! background-color (make-object color% str))) + + ;; ############################################################# + ;; ###### Setting up a self-sustaining game-loop ############### + ;; ############################################################# + ;; Here we handle how fast the canvas is refreshed and thereby how + ;; fast paint-callback will be called. + (define (launch-game-loop) + (let* ((min-wait-per-frame 1) ; apparently this has to be at least 1 to avoid locking up. + (ms-per-frame (quotient 1000 maximum-fps))) ; calculate the MINIMUM delta-time in ms between two frames. + + ;; calculate the min delta-time given the min-wait-per-frame + (define (calculate-interval) + (truncate (max + (- ms-per-frame delta-time) + min-wait-per-frame))) + + ;; The heart of the self-sustaning loop. + (define (game-loop) + ;; get the new delta-time + (set! delta-time (- (current-milliseconds) previous-time)) + ;; We wait for min-delta-time, which is typically the min-wait-per-frame + (when (>= delta-time ms-per-frame) + ;; Perform an update... + (update-callback delta-time) + ;; calculate actual delta-time. + (set! previous-time (current-milliseconds)) + ;; call the canvas refresh which will trigger a paint-callback + (send canvas refresh-now)) + (when (not closed) + ;; When the game-loop is done we fire the game-loop again + ;; after waiting min-delta-time ms, unless the window is closed. + (send game-loop-timer start (calculate-interval) #t))) + + ;; a timer drives the game-loop which calls the game-loop after waiting + ;; 'interval'. A timer normally calls every 'interval' ms but with + ;; just-once? #t we prevent that since it will be the game-loop itself + ;; that will keep itself alive. + (set! game-loop-timer + (new timer% [notify-callback game-loop] + [interval (calculate-interval) ] + [just-once? #t])))) + + (define (adjust-size) ;; Some operating systems do not properly initialise the size of the window. This procedure computes a correction, and applies it + (define-values (size-w size-h) (send frame get-size)) + (define-values (client-size-w client-size-h) (send frame get-client-size)) + ;; (display "user-size: ") (display (list w h)) (newline) + ;; (display "window-size: ") (display (list size-w size-h)) (newline) + ;; (display "client-size: ") (display (list client-size-w client-size-h)) (newline) + (define correction-w (- w client-size-w)) + (define correction-h (- h client-size-h)) + ;; (display "correction: ") (display (list correction-w correction-h)) (newline) + (send frame resize (+ w correction-w) (+ h correction-h))) + + ;; dispatch + (define (dispatch-window msg) + (cond ((eq? msg 'new-layer!) new-layer!) + ((eq? msg 'set-background!) set-background!) + ((eq? msg 'set-key-callback!) (lambda (eh) (set! keyboard-callback eh))) + ((eq? msg 'set-update-callback!) (lambda (uc) (set! update-callback uc))) + ((eq? msg 'set-draw-callback!) (lambda (dc) (set! draw-callback dc))) + ((eq? msg 'set-mouse-click-callback!) (lambda (mc) (set! mouse-click-callback mc))) + ((eq? msg 'set-mouse-move-callback!) (lambda (mc) (set! mouse-move-callback mc))) + ((eq? msg 'set-title!) (lambda (t) (set! title t))) + ((eq? msg 'get-title) title) + ((eq? msg 'get-background) background-string) + (else (raise-arguments-error 'window + "wrong message sent" + "message" + msg)))) + + ;; set background + (set-background! default-background-colour) + + ;; launch the self-sustaining game-loop. + (launch-game-loop) + + ;; adjust the size of the window + (adjust-size) + + ;; Show the window + (send frame show #t) + (send canvas focus) + + ;; Change the mouse event mode + (send frame wheel-event-mode 'one) + + dispatch-window)) + + +;;;;################################ GET SPRITES FROM DISK ####################################### +;;;;--------------------------------------------------------------------- +;;;; make-bitmap creates a bitmap given a path to an image file +;;;; String -> get-bitmap +;;;;--------------------------------------------------------------------- +(define (get-bitmap file) + (let ((bitmap (make-object bitmap% 1 1))) + (unless (file-exists? file) + (error 'get-bitmap "Cannot load file path: ~a" file)) + (send bitmap load-file file) + bitmap)) + +;;;;--------------------------------------------------------------------- +;;;; make-bitmap creates a bitmap given a path to an image file +;;;; String -> get-bitmap-section +;;;;--------------------------------------------------------------------- +(define (get-bitmap-section tilebitmap x y width height) + (define target-bitmap (make-object bitmap% width height)) + (define target-dc (new bitmap-dc% [bitmap target-bitmap])) + (send target-dc draw-bitmap-section tilebitmap 0 0 x y width height) + target-bitmap) + +;;;;--------------------------------------------------------------------- +;;;; generate-mask generates a mask and saves it to disk. +;;;; String, String -> void +;;;;--------------------------------------------------------------------- +(define (generate-mask bitmappath background-color) + (when (string? background-color) (set! background-color (send the-color-database find-color background-color))) + (define bitmap (get-bitmap bitmappath)) + (define dc (new bitmap-dc% [bitmap bitmap])) + (define white-pixel (make-object color% "white")) + (define black-pixel (make-object color% "black")) + (printf "Generating mask for ~a...~n" bitmappath) + (for ([w (send bitmap get-width)]) + (for ([h (send bitmap get-height)]) + (define pixel (make-object color%)) + (send dc get-pixel w h pixel) + (if (and (= (send background-color red) (send pixel red)) + (= (send background-color blue) (send pixel blue)) + (= (send background-color green) (send pixel green))) + (send dc set-pixel w h white-pixel) + (send dc set-pixel w h black-pixel)))) + (define extension (path-get-extension bitmappath)) + (when (not extension) (raise 'unknown-extension)) + (define extension-str (bytes->string/utf-8 extension)) + (define old-suffix extension-str) + (define new-suffix "_mask.png") + (define maskpath (string-replace bitmappath old-suffix new-suffix)) + (printf "Saving mask to ~a...~n" bitmappath) + (define save-result (send (send dc get-bitmap) save-file maskpath 'png)) + (when (not save-result) (raise 'save-failed)) + (void)) + + +;;;;################################ TILES ####################################### +;;;;--------------------------------------------------------------------- +;;;; make-bitmap-tile creates a tile from a bitmap with optionally a mask. +;;;; [] mean it is optional. +;;;; String, [String] -> Tile +;;;;--------------------------------------------------------------------- +(define (make-bitmap-tile bitmappath [mask #f]) + (define bitmap (get-bitmap bitmappath)) + (make-tile (send bitmap get-width) (send bitmap get-height) bitmap mask)) + +;;;;--------------------------------------------------------------------- +;;;; make-tile creates a tile from a width and height with optionally +;;;; a bitmap and a mask. +;;;; [] mean it is optional. +;;;; Number, Number, [String, [String]] -> Tile +;;;;--------------------------------------------------------------------- +(define (make-tile w h [bitmap #f] [mask #f]) + (when (string? bitmap) (set! bitmap (get-bitmap bitmap))) + (when (string? mask) (set! mask (get-bitmap mask))) + (when (not bitmap) (set! bitmap (make-object bitmap% w h #f #t))) + (define bufferbitmap (make-object bitmap% w h #f #t)) + (let* ((x 0) + (y 0) + (x-scale 1) + (y-scale 1) + (mask-dc (new bitmap-dc% [bitmap mask])) + (update-callback (lambda () #t)) + (bitmap-dc (new bitmap-dc% [bitmap bufferbitmap])) + (rotation 0)) + + (define (trigger-update!) + (update-callback)) + + (send bitmap-dc draw-bitmap bitmap 0 0) + + ;; ##### Drawing methods to draw on the tile yourself. + ;; Clear removed your own drawings. + ;; void -> void + (define (clear) + (set! bufferbitmap (make-object bitmap% w h #f #t)) + (set! bitmap-dc (new bitmap-dc% [bitmap bufferbitmap])) + (send bitmap-dc draw-bitmap bitmap 0 0) + (trigger-update!)) + + ;; Drawing a rectangle + ;; Number, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-rectangle x y w h color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-brush color 'solid) + (send bitmap-dc set-pen color 1 'transparent) + (send bitmap-dc draw-rectangle x y w h) + (trigger-update!)) + + ;; Drawing an Ellipse + ;; Number, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-ellipse x y w h color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-brush color 'solid) + (send bitmap-dc set-pen color 1 'transparent) + (send bitmap-dc draw-ellipse x y w h) + (trigger-update!)) + + ;; Drawing a Line + ;; Number, Number, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-line x y w h width color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-pen color width 'solid) + (send bitmap-dc draw-line x y w h) + (trigger-update!)) + + ;; Drawing Text + ;; String, Number, Number, Number, (String ∪ Color%) -> void + (define (draw-text text fontsize x y color) + (when (string? color) (set! color (send the-color-database find-color color))) + (send bitmap-dc set-font (make-object font% fontsize 'default)) + (send bitmap-dc set-text-foreground color) + (send bitmap-dc draw-text text x y) + (trigger-update!)) + + ;; Rotation of 90 degrees clockwise. + ;; void -> void + (define (rotate-clockwise!) + (rotate! (modulo (+ rotation 90) 360))) + + ;; Rotation of 90 degrees counterclockwise. + ;; void -> void + (define (rotate-counterclockwise!) + (rotate! (modulo (- rotation 90) 360))) + + ;; Internal Rotation Function with a hack to solve + ;; the rather bizar way of rotating in the graphical DrRacket library. + ;; void -> void + (define (rotate! r) + (set! rotation r) + (trigger-update!)) + + ;; Set the X position on the screen + ;; number -> void + (define (set-x! new-x) + (unless (= x new-x) + (set! x new-x) + (trigger-update!))) + + ;; Set the Y position on the screen + ;; number -> void + (define (set-y! new-y) + (unless (= y new-y) + (set! y new-y) + (trigger-update!))) + + (define transparent-color (make-object color% 0 0 0 0)) + + ;; Drawing procedure called by the layer + ;; on which the tile is drawn. This should not be called in a student project! + ;; dc% -> void + (define (draw dc) + (define offset-x (+ x (/ w 2))) + (define offset-y (+ y (/ h 2))) + (send dc translate offset-x offset-y) + (define rotation-r (/ (* rotation pi) 180)) + (send dc rotate rotation-r) + (send dc set-scale x-scale y-scale) + (if mask + (begin (send mask-dc draw-bitmap mask 0 0) + (send dc draw-bitmap bufferbitmap (- (/ w 2)) (- (/ h 2)) 'solid transparent-color mask)) + (send dc draw-bitmap bufferbitmap (- (/ w 2)) (- (/ h 2)))) + (send dc set-scale 1 1) + (send dc rotate (- rotation-r)) + (send dc translate (- offset-x) (- offset-y))) + + ;; A procedure to set a callback. This callback + ;; will notify the parent (layers) that the tile + ;; has changed and allows us to automatically + ;; redraw the tiles. + ;; (void -> void) -> void + (define (set-on-update! new_callback) + (set! update-callback new_callback)) + + ;; Get the scale. If x-scale and y-scale are different, returns the average of the two. + ;; void -> number + (define (get-scale) + (if (= x-scale y-scale) + x-scale + (/ (+ x-scale y-scale) 2))) + + ;; number -> void + (define (set-x-scale! s) + (set! x-scale s)) + + ;; number -> void + (define (set-y-scale! s) + (set! y-scale s)) + + ;; Sets both scales at once. + ;; number -> void + (define (set-scale! s) + (set-x-scale! s) + (set-y-scale! s)) + + ;; Dispatch + (define (dispatch-tile msg . args) + (cond + ;; Not to be called manually + ((eq? msg 'draw) draw) + ((eq? msg 'set-on-update!) set-on-update!) + + ;; Getters and setters + ((eq? msg 'set-x!) set-x!) + ((eq? msg 'set-y!) set-y!) + ((eq? msg 'get-x) x) + ((eq? msg 'get-y) y) + ((eq? msg 'get-w) w) + ((eq? msg 'get-h) h) + + ;; Rotation + ((eq? msg 'get-rotation) rotation) + ((eq? msg 'rotate-clockwise!) rotate-clockwise!) + ((eq? msg 'rotate-counterclockwise!) rotate-counterclockwise!) + ((eq? msg 'rotate!) rotate!) + + ;; Scale + ((eq? msg 'set-x-scale!) set-x-scale!) + ((eq? msg 'set-y-scale!) set-y-scale!) + ((eq? msg 'set-scale!) set-scale!) + ((eq? msg 'get-x-scale) x-scale) + ((eq? msg 'get-y-scale) y-scale) + ((eq? msg 'get-scale) (get-scale)) + + ;; Clear whatever is on the tile + ((eq? msg 'clear!) clear) + + ;; Drawing + ((eq? msg 'draw-rectangle!) draw-rectangle) + ((eq? msg 'draw-ellipse!) draw-ellipse) + ((eq? msg 'draw-line!) draw-line) + ((eq? msg 'draw-text!) draw-text) + + ;; Error if other message is sent + (else (raise-arguments-error 'tile + "wrong message sent" + "message" + msg)))) + dispatch-tile)) + +;;;;--------------------------------------------------------------------- +;;;; tile-sequence is a sequence of tiles, it is created by passing a list +;;;; of tiles to the tile-sequence. A tile-sequence is meant to animate tiles. +;;;; When it is created, the current tile (index) is set on the first tile that +;;;; was added. Calling next will cycle through the tile-sequence and select the +;;;; next tile. +;;;; List -> Tile-Sequence +;;;;--------------------------------------------------------------------- +(define (make-tile-sequence tiles-in) + ;; Initialize the current index and its callback. + (let ((tiles (if (mlist? tiles-in) (mlist->list tiles-in) tiles-in)) ;; converts mutable list (r5rs) to immutable list (Racket). + (index 0) + (update-callback (lambda () #t))) + + ;; Change its coordiantes on the window + ;; Integer -> void + (define (set-x! new-x) + (for-each (lambda (tile) ((tile 'set-x!) new-x)) tiles) + (update-callback)) + + ;; Integer -> void + (define (set-y! new-y) + (for-each (lambda (tile) ((tile 'set-y!) new-y)) tiles) + (update-callback)) + + ;; choose which tile in the sequence is currently active + ;; by providing an index. + ;; Integer -> void + (define (set-current! new_index) + (if (or (>= new_index (length tiles)) + (< new_index 0)) + (error 'error "illegal index given for tile-sequence: ~a" new_index) + (begin (set! index new_index) + (update-callback)))) + + ;; Set the previous tile as active tile. + ;; void -> void + (define (set-previous!) + (set! index (remainder (- index 1) (length tiles))) + (when (< index 0) (set! index (- (length tiles) 1))) + (update-callback)) + + ;; Set the next tile as active tile. + ;; void -> void + (define (set-next!) + (set! index (remainder (+ 1 index) (length tiles))) + (update-callback)) + + ;; Drawing functions, each of them will forward the + ;; drawing instruction to the underlying tiles. + ;; void -> void + (define (rotate-clockwise!) + (for-each (lambda (tile) (tile 'rotate-clockwise) ) tiles) + (update-callback)) + + ;; void -> void + (define (rotate-counterclockwise!) + (for-each (lambda (tile) (tile 'rotate-counterclockwise) ) tiles) + (update-callback)) + + ;; Number, Number, Number, Number, String -> void + (define (draw-rectangle x y w h color) + (for-each (lambda (tile) ((tile 'draw-rectangle) x y w h color )) tiles) + (update-callback)) + + ;; Number, Number, Number, Number, String -> void + (define (draw-ellipse x y w h color) + (for-each (lambda (tile) ((tile 'draw-ellipse) x y w h color )) tiles) + (update-callback)) + + ;; String, Number, Number, Number, String -> void + (define (draw-text text fontsize x y color) + (for-each (lambda (tile) ((tile 'draw-text) text fontsize x y color )) tiles) + (update-callback)) + + ;; Number, Number, Number, Number, Number, String -> void + (define (draw-line x y w h width color) + (for-each (lambda (tile) ((tile 'draw-line)x y w h width color )) tiles) + (update-callback)) + + ;; Clears everything that is drawn by the user, + ;; if there were bitmaps, the bitmaps are restored. + ;; void -> void + (define (clear) + (for-each (lambda (tile) (tile 'clear)) tiles) + (update-callback)) + + + ;; redraw itself on the provided drawing context + ;; void -> void + (define (draw dc) + (((current) 'draw) dc)) + + ;; set update callback which is called every-time a sequence changes + ;; (void -> void) -> void + (define (set-on-update! new_callback) + (set! update-callback new_callback)) + + ;; Interal function to retrieve current (private). + ;; void -> Tile + (define (current) + (list-ref tiles index)) + + (define (rotate! d) + (for-each (lambda (tile) ((tile 'rotate!) d)) tiles) + (update-callback)) + + (define (set-x-scale! s) + (for-each (lambda (tile) ((tile 'set-x-scale!) s)) tiles) + (update-callback)) + + (define (set-y-scale! s) + (for-each (lambda (tile) ((tile 'set-y-scale!) s)) tiles) + (update-callback)) + + (define (set-scale! s) + (for-each (lambda (tile) ((tile 'set-scale!) s)) tiles) + (update-callback)) + + ;; Dispatch + (define (dispatch-tile-sequence msg) + (cond + ;; Not to be called manually + ((eq? msg 'draw) draw) + ((eq? msg 'set-on-update!) set-on-update!) + + ;; Moving and dimension and position getters. + ((eq? msg 'set-x!) set-x!) + ((eq? msg 'set-y!) set-y!) + ((eq? msg 'get-x) (lambda () ((current) 'get-x))) + ((eq? msg 'get-y) (lambda () ((current) 'get-y))) + ((eq? msg 'get-w) (lambda () ((current) 'get-w))) + ((eq? msg 'get-h) (lambda () ((current) 'get-h))) + + ;; Animations to switch between tiles + ((eq? msg 'set-current!) set-current!) + ((eq? msg 'get-current) index) + ((eq? msg 'set-next!) set-next!) + ((eq? msg 'set-previous!) set-previous!) + + ;; Rotation manipulations + ((eq? msg 'rotate-clockwise!) rotate-clockwise!) + ((eq? msg 'rotate-counterclockwise!) rotate-counterclockwise!) + + ;; Clear all manual drawings + ((eq? msg 'clear!) clear) + + ;; Rotation + ((eq? msg 'get-rotation) (lambda () ((current) 'get-rotation))) + ((eq? msg 'rotate!) rotate!) + + ;; Scale + ((eq? msg 'set-x-scale!) set-x-scale!) + ((eq? msg 'set-y-scale!) set-y-scale!) + ((eq? msg 'set-scale!) set-scale!) + ((eq? msg 'get-x-scale) (lambda () ((current) 'get-x-scale))) + ((eq? msg 'get-y-scale) (lambda () ((current) 'get-y-scale))) + ((eq? msg 'get-scale) (lambda () ((current) 'get-scale))) + + ;; Create manual drawings + ((eq? msg 'draw-rectangle!) draw-rectangle) + ((eq? msg 'draw-ellipse!) draw-ellipse) + ((eq? msg 'draw-line!) draw-line) + ((eq? msg 'draw-text!) draw-text) + + ;; Error + (else (raise-arguments-error 'tile-sequence + "wrong message sent" + "message" + msg)))) + dispatch-tile-sequence)) + +;;;;################################ LAYER ####################################### +;;;;--------------------------------------------------------------------- +;;;; layers in a window, each layer has a temporary bitmap. +;;;; Integer Integer canvas% -> Layer +;;;;--------------------------------------------------------------------- +(define (make-layer w h canvas) + + (let* ((drawables '()) ;; all drawables on this layer. + (bitmap (make-object bitmap% w h #f #t )) ;; buffer-bitmap for fast drawing + (bitmap-dc (new bitmap-dc% [bitmap bitmap])) ;; dc of bitmap (drawing context) + (needs-update #t)) ;; even faster drawing thanks to dirty bit. + + ;; redraw on temporary bitmap layer. + ;; void -> void + (define (redraw) + (send bitmap-dc erase) + + ;; This will redraw all drawables on the layer + ;; Therefore it is not wise to put one moving object together with a bunch + ;; of non-moving objects on ONE layer. + (for-each (lambda (tile) ((tile 'draw) bitmap-dc)) drawables)) + + ;; draw itself on given drawing context. + ;; dc% -> void + (define (draw dc) + (when needs-update + (redraw) + (set! needs-update #f)) + (send dc draw-bitmap bitmap 0 0)) + + ;; Adds a drawable to the layer which is a tile a tile-sequence or + ;; a drawable created by the student which suports 'draw' and 'set-on-update!' + ;; (Tile ∪ Tile-Sequence) -> void + (define (add-drawable drawable) + ((drawable 'set-on-update!) (lambda () (set! needs-update #t))) + (set! drawables (cons drawable drawables)) + (set! needs-update #t)) + + ;; Remove a drawable to the layer which is a tile a tile-sequence or + ;; a drawable created by the student which suports 'draw' and 'set-on-update!' + ;; (Tile ∪ Tile-Sequence) -> void + (define (remove-drawable drawable) + ((drawable 'set-on-update!) (lambda () #t)) + (set! drawables (remq drawable drawables)) + (set! needs-update #t)) + + ;; Removes all drawables from a single layer. + ;; void -> void + (define (empty!) + (for-each remove-drawable drawables)) + + ;; # dispatch + (define (dispatch-layer msg) + (cond ((eq? msg 'add-drawable!) add-drawable) + ((eq? msg 'remove-drawable!) remove-drawable) + ((eq? msg 'empty!) empty!) + ((eq? msg 'draw) draw) + (else (raise-arguments-error 'layer + "wrong message sent" + "message" + msg)))) + dispatch-layer)) diff --git a/pp1/pp1/info.rkt b/pp1/pp1/info.rkt new file mode 100644 index 0000000..cb459b7 --- /dev/null +++ b/pp1/pp1/info.rkt @@ -0,0 +1,2 @@ +#lang info +(define name "pp1") \ No newline at end of file diff --git a/pp1/pp1/tests.rkt b/pp1/pp1/tests.rkt new file mode 100644 index 0000000..3d2d6e6 --- /dev/null +++ b/pp1/pp1/tests.rkt @@ -0,0 +1,97 @@ +#lang r7rs + +;;;;*----------------------------------*;;;; +;;;;* >>> tests.rkt <<< *;;;; +;;;;* > Programmeerproject 2025-2026 < *;;;; +;;;;* *;;;; +;;;;* >> Versie 2 << *;;;; +;;;;* *;;;; +;;;;* Design and Implementation: *;;;; +;;;;* Bjarno Oeyen *;;;; +;;;;* *;;;; +;;;;* Software Languages Lab *;;;; +;;;;*----------------------------------*;;;; + +(define-library () + (import (scheme base) + (scheme write) + (only (racket) format)) + (export run-test check + make-check-predicate make-check-predicate-not + check-= check-eq? check-eqv? check-equal? + check-not-= check-not-eq? check-not-eqv? check-not-equal?) + + (begin + + (define (run-test . args) + (define test-name #f) + (define proc #f) + (cond + ((= (length args) 1) (set! proc (car args)) + (set! test-name "Anonymous test")) + ((= (length args) 2) + (if (string? (car args)) + (let () + (set! proc (cadr args)) + (set! test-name (car args))) + (let () + (set! proc (car args)) + (set! test-name (cadr args))))) + (else + (raise "Unexpected number of arguments for run-test"))) + (let () + (define test-result + (call-with-current-continuation + (lambda (k) + (with-exception-handler + (lambda (x) + (k `(exception ,x))) + (lambda () + (let ((value (proc))) + (if value + (k `(success ,value)) + (k `(failure ,value))))))))) + (define result (car test-result)) + (define value (cadr test-result)) + (define line "--------------------------------------------------------------------------------\n") + (cond + ((eq? result 'exception) + (display (format "~a[TEST] ~a FAILURE!~n~a~n~a~n" line test-name value line))) + ((eq? result 'success) + (display (format "[TEST] ~a SUCCESS!~n" test-name))) + ((eq? result 'failure) + (display (format "[TEST] ~a: FAILURE! (returned #f)~n" test-name)))))) + + (define (check condition . msg) + (if condition + #t + (if (null? msg) + (raise "Reason: Check failed!") + (raise (format "Reason: Check failed!~n~a" (car msg)))))) + + (define (make-check-predicate pred) + (lambda (actual expected . args) + (define internal-msg (if (null? args) #f (car args))) + (check (pred expected actual) + (if internal-msg + (format "Message: ~a~nExpected: ~a~nActual: ~a" internal-msg expected actual) + (format "Expected: ~a~nActual: ~a" expected actual))))) + + (define (make-check-predicate-not pred) + (lambda (actual expected . args) + (define internal-msg (if (null? args) #f (car args))) + (check (not (pred expected actual)) + (if internal-msg + (format "Message: ~a~nActual value should be different from ~a" internal-msg expected) + (format "Actual value should be different from ~a" expected))))) + + (define check-= (make-check-predicate =)) + (define check-eq? (make-check-predicate eq?)) + (define check-eqv? (make-check-predicate eqv?)) + (define check-equal? (make-check-predicate equal?)) + (define check-not-= (make-check-predicate-not =)) + (define check-not-eq? (make-check-predicate-not eq?)) + (define check-not-eqv? (make-check-predicate-not eqv?)) + (define check-not-equal? (make-check-predicate-not equal?)) + + ))