From 2b7800a35b97b8ab8566ab273fe695af2c726bec Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Tue, 24 Dec 2024 22:53:09 +0100 Subject: [PATCH 01/48] Changed code Restarted. -Changed map (not done yet) -Changed the colliding function -Changed pacman --- Games/Pac_Man_Game/index.html | 28 ++-- Games/Pac_Man_Game/index.js | 237 ++++++++++++++++++++++++++++++++++ Games/Pac_Man_Game/style.css | 104 +-------------- 3 files changed, 247 insertions(+), 122 deletions(-) create mode 100644 Games/Pac_Man_Game/index.js diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index c435db18b0..a6fe8224c2 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -1,28 +1,18 @@ - Pac-Man Game - - + - - -
- - -
Score: 0
- -
- Lives: - - -
- - + + - - + \ No newline at end of file diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js new file mode 100644 index 0000000000..ca6bec8c55 --- /dev/null +++ b/Games/Pac_Man_Game/index.js @@ -0,0 +1,237 @@ +const canvas = document.querySelector('canvas'); // Get the canvas element +const c = canvas.getContext('2d'); // Get the context of the canvas + +canvas.width = innerWidth; // Set the width of the canvas to the width of the window +canvas.height = innerHeight; // Set the height of the canvas to the height of the window + +// Create a class for the player +class Boundary { + static width = 40; + static height = 40; + constructor({position}) { // The constructor takes an object with a position property so we can destructure it + this.position = position; // Set the position of the player + this.width = 40; + this.height = 40; + } + draw() { + c.fillStyle = 'blue'; + c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player + } +} + +class Pacman { + constructor({position, velocity}) { + this.position = position; + this.velocity = velocity; + this.radius = 15; + } + draw() { + c.fillStyle = 'yellow'; + c.beginPath() + c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) + c.fill() + c.closePath() + } + update() { + this.draw() + this.position.x += this.velocity.x + this.position.y += this.velocity.y + } +} + +const boundaries = [] +const pacman = new Pacman({ + position: { + x: Boundary.width + Boundary.width / 2, + y: Boundary.height + Boundary.height / 2 + }, + velocity: { + x: 0, + y: 0 + } +}) + +const keys = { + ArrowUp: { + pressed: false + }, + ArrowDown: { + pressed: false + }, + ArrowLeft: { + pressed: false + }, + ArrowRight: { + pressed: false + } +} + +let lastKey = '' + +// Create an array to store the boundaries +const map = [ + ['-','-','-','-','-','-','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-',' ','-',' ','-',' ','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-',' ','-',' ','-',' ','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-','-','-','-','-','-','-'] +] + +map.forEach((row, i) => { + row.forEach((symbol, j) => { + switch (symbol) { + case '-': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + } + }) + ) + break + } + }) +}) + +function circleCollidesWithRectangle({circle, rectangle}) { + const padding = Boundary.width / 2 - circle.radius - 1 + return ( + circle.position.y - circle.radius + circle.velocity.y <= rectangle.position.y + rectangle.height + padding && + circle.position.x + circle.radius + circle.velocity.x >= rectangle.position.x - padding && + circle.position.y + circle.radius + circle.velocity.y >= rectangle.position.y - padding && + circle.position.x - circle.radius + circle.velocity.x <= rectangle.position.x + rectangle.width + padding + ) +} + +function animate() { + requestAnimationFrame(animate) + c.clearRect(0, 0, canvas.width, canvas.height) + + if (keys.ArrowUp.pressed && lastKey === 'ArrowUp') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: 0, + y: -1 // Adjusted speed + }}, + rectangle: boundary + }) + ) { + pacman.velocity.y = 0 + break + } else { + pacman.velocity.y = -2 // Adjusted speed + } + } + } else if (keys.ArrowLeft.pressed && lastKey === 'ArrowLeft') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: -1, // Adjusted speed + y: 0 + }}, + rectangle: boundary + }) + ) { + pacman.velocity.x = 0 + break + } else { + pacman.velocity.x = -2 // Adjusted speed + } + } + } else if (keys.ArrowDown.pressed && lastKey === 'ArrowDown') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: 0, + y: 1 // Adjusted speed + }}, + rectangle: boundary + }) + ) { + pacman.velocity.y = 0 + break + } else { + pacman.velocity.y = 2 // Adjusted speed + } + } + } else if (keys.ArrowRight.pressed && lastKey === 'ArrowRight') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: 1, // Adjusted speed + y: 0 + }}, + rectangle: boundary + }) + ) { + pacman.velocity.x = 0 + break + } else { + pacman.velocity.x = 2 // Adjusted speed + } + } + } + + boundaries.forEach((boundary) => { + boundary.draw() + + if ( + circleCollidesWithRectangle({ + circle: pacman, + rectangle: boundary + }) + ) { + pacman.velocity.x = 0 + pacman.velocity.y = 0 + } +}) +pacman.update() +} + +animate() + +window.addEventListener('keydown', ({key}) => { + switch (key) { + case 'ArrowUp': + keys.ArrowUp.pressed = true + lastKey = 'ArrowUp' + break + case 'ArrowDown': + keys.ArrowDown.pressed = true + lastKey = 'ArrowDown' + break + case 'ArrowLeft': + keys.ArrowLeft.pressed = true + lastKey = 'ArrowLeft' + break + case 'ArrowRight': + keys.ArrowRight.pressed = true + lastKey = 'ArrowRight' + break + } +}) + +window.addEventListener('keyup', ({key}) => { + switch (key) { + case 'ArrowUp': + keys.ArrowUp.pressed = false + break + case 'ArrowDown': + keys.ArrowDown.pressed = false + break + case 'ArrowLeft': + keys.ArrowLeft.pressed = false + break + case 'ArrowRight': + keys.ArrowRight.pressed = false + break + } +}) \ No newline at end of file diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 6e562ce6c1..3e3afe0cea 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -9,106 +9,4 @@ body { margin: 0; /* Set background color to black */ background-color: #000; -} - -#gameBoard { - /* Create a grid layout for the game board */ - display: grid; - /* Define 20 columns each with a width of 30px */ - grid-template-columns: repeat(20, 30px); - /* Define 20 rows each with a height of 30px */ - grid-template-rows: repeat(20, 30px); - /* Set the gap between grid items */ - gap: 2px; -} - -.cell { - width: 30px; - height: 30px; -} - -.wall { - background-color: blue; -} - -/*Space for the pac dots*/ -.pac-dot { - background-color: black; - /* Center align content vertically and horizontally */ - display: flex; - justify-content: center; - align-items: center; -} - -/*Pac dots themselves*/ -.pac-dot::after { - /*Create circle*/ - content: ''; - width: 10px; - height: 10px; - - background-color: white; - /*Create a rounded shape*/ - border-radius: 50%; -} - -/*Pac-Man*/ -.pacman { - background-color: yellow; - /*Create a round shape*/ - border-radius: 50%; -} - -/*Score display*/ -#score { - font-size: 24px; - font-weight: bold; - color: white; - background-color: black; - padding: 10px; -} - -/*Score value*/ -#scoreValue { - color: yellow; -} - - -/*Ghosts*/ -.ghost { - /*Set background color dynamically*/ - background-color: var(--ghost-color); -} - -/*Red ghost*/ -.red { - --ghost-color: red; -} - -/*Blue ghost*/ -.blue { - --ghost-color: green; -} - -/*Lives*/ -#livesContainer { - margin-top: 20px; - font-size: 20px; - font-weight: bold; - color: white; -} - -.life { - display: inline-block; - width: 30px; - height: 30px; - background-color: yellow; - border: 2px solid white; - border-radius: 50%; - margin-right: 10px; -} - -/*Hide life*/ -.life.hidden { - display: none; -} +} \ No newline at end of file From c0fa7b3a0c6763f01c1369f77b87a29ce485f7b7 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:13:46 +0100 Subject: [PATCH 02/48] Map change Using images for the map to get the pacman look --- Games/Pac_Man_Game/images/block.png | Bin 0 -> 269 bytes Games/Pac_Man_Game/images/capBottom.png | Bin 0 -> 244 bytes Games/Pac_Man_Game/images/capLeft.png | Bin 0 -> 241 bytes Games/Pac_Man_Game/images/capRight.png | Bin 0 -> 217 bytes Games/Pac_Man_Game/images/capTop.png | Bin 0 -> 236 bytes .../images/pipeConnectorBottom.png | Bin 0 -> 198 bytes .../images/pipeConnectorDownwards.png | Bin 0 -> 253 bytes .../Pac_Man_Game/images/pipeConnectorLeft.png | Bin 0 -> 207 bytes .../images/pipeConnectorRight.png | Bin 0 -> 253 bytes .../Pac_Man_Game/images/pipeConnectorTop.png | Bin 0 -> 210 bytes Games/Pac_Man_Game/images/pipeCorner1.png | Bin 0 -> 228 bytes Games/Pac_Man_Game/images/pipeCorner2.png | Bin 0 -> 241 bytes Games/Pac_Man_Game/images/pipeCorner3.png | Bin 0 -> 232 bytes Games/Pac_Man_Game/images/pipeCorner4.png | Bin 0 -> 253 bytes Games/Pac_Man_Game/images/pipeCross.png | Bin 0 -> 203 bytes Games/Pac_Man_Game/images/pipeHorizontal.png | Bin 0 -> 179 bytes Games/Pac_Man_Game/images/pipeVertical.png | Bin 0 -> 191 bytes Games/Pac_Man_Game/index.js | 108 ++++++++++++++++-- 18 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 Games/Pac_Man_Game/images/block.png create mode 100644 Games/Pac_Man_Game/images/capBottom.png create mode 100644 Games/Pac_Man_Game/images/capLeft.png create mode 100644 Games/Pac_Man_Game/images/capRight.png create mode 100644 Games/Pac_Man_Game/images/capTop.png create mode 100644 Games/Pac_Man_Game/images/pipeConnectorBottom.png create mode 100644 Games/Pac_Man_Game/images/pipeConnectorDownwards.png create mode 100644 Games/Pac_Man_Game/images/pipeConnectorLeft.png create mode 100644 Games/Pac_Man_Game/images/pipeConnectorRight.png create mode 100644 Games/Pac_Man_Game/images/pipeConnectorTop.png create mode 100644 Games/Pac_Man_Game/images/pipeCorner1.png create mode 100644 Games/Pac_Man_Game/images/pipeCorner2.png create mode 100644 Games/Pac_Man_Game/images/pipeCorner3.png create mode 100644 Games/Pac_Man_Game/images/pipeCorner4.png create mode 100644 Games/Pac_Man_Game/images/pipeCross.png create mode 100644 Games/Pac_Man_Game/images/pipeHorizontal.png create mode 100644 Games/Pac_Man_Game/images/pipeVertical.png diff --git a/Games/Pac_Man_Game/images/block.png b/Games/Pac_Man_Game/images/block.png new file mode 100644 index 0000000000000000000000000000000000000000..59dc1a8081055906ce9135b21dcdba3f8c306e09 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VffiSdM9Q{awtbVru2)JmHFfbGW@!(_%%7C_W(%=EXBp zOeXiFO}gmgl&L4dd+?%wOzx-PX>4wE9z2V?t(N1GMT3V~ zT|obaf9XH|7k=Ph)Vxgb#(yInhPJ)T1zYCNe`2v*C8qO@WmVO~8VlC+|>yaeW)27hL*tW37gvH&tV2g~(1U5J0lNoA~ zXH^!@Y`GL;Al0;3(c;#V!edX%lGB=7-qeScHGzbU-DmlipX}`{f!eFFV3$?&RF^Rzmpqd`)8&%^^#%?YYQ2y nrp%vqZDQKD|E=~jB)J%Va-B+6Q!thTI-9}M)z4*}Q$iB}%;Z_7 literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/capLeft.png b/Games/Pac_Man_Game/images/capLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..13f666e6fb841a3e2972e62c6bd6713b185cd18c GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfxH|*<~sx1*o-Fgz3}1oy3owDh{rdjqubl>nf02F#ox|W{q|p|=Mt_y zmv3UA>l_K|TfcU!c#)8^u3F~ppJ^Z8%zMwfWBp#ub50YO?e6fi$~TGj2Ty2P!7wYG zU9*F0L1h_k&WHM@7vlTpZm&O_^-t*UFWx}anV++q_Px!&7bo~@pYW{1Q#9vpUUw4c OW(H4JKbLh*2~7YaW?vlu literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/capRight.png b/Games/Pac_Man_Game/images/capRight.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fb85a093fb3f3215d61c79fd0df2a90c9763b5 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#Vf=cu zl^*=JWqRqsjeBfl=BnLL|Gvuk;LYof1z~S~+c$BnV#=DwtF(e^MWtEC0<8tlZYngb zYM7PYj4biP-toO~fqjCNc#p{TQpeBARae3;ePj4`BKhwvPRC6^w=sCS`njxgN@xNA D1cp;B literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/capTop.png b/Games/Pac_Man_Game/images/capTop.png new file mode 100644 index 0000000000000000000000000000000000000000..40664e5af2bb1de30b7e615974a484afa6c8e187 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VffiSdM9Q{awtbVru2)JmHFfbGW@!(_%%7C_W(%=EXBp zOeXiFO}gmgl&L4dd+?%wOzx-PX>4wE9z2WN&A9-`k2apN el<~_h35KP;r;-cSx^D$Km%-E3&t;ucLK6T20#2X+ literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/pipeConnectorBottom.png b/Games/Pac_Man_Game/images/pipeConnectorBottom.png new file mode 100644 index 0000000000000000000000000000000000000000..278cc2893c69ed09fc192baf1e1584b2e17ecb2f GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfX5Rt`x*cW*Ecwx^T>ESCo8zHnR*V2IrwMj#8xO?zHhs6a!BUqUGp#V?|bId6?w(OP%(IS z{R{c_yR9O(qx04#IoZ6q+LGa-tjQF&UvtxzaOEj6TFWPjMBZ90=%qLHvPYNB+p8R^ z(@$lpxK8_))iTNZsmUZI?`l)0lS_-FJSQ&QE4A=RkY(?Z6PMz81BzD8aSKYx%>VxM z@J8J&`5y1;>_5+V?9{fPUUJby{g>a-|u*sTJ(h{4m<&t;ucLK6TlELh9{ literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/pipeConnectorRight.png b/Games/Pac_Man_Game/images/pipeConnectorRight.png new file mode 100644 index 0000000000000000000000000000000000000000..a5250366edcd4f0fd6a32812dc91b2e46c457fd4 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-mSQK*5Dp-y;YjHK^0#=pIEG|6 zzn!&Fut7n9WhwXR4UDU|GoIeSZR*z4EtYc4=XqM+eNm-TyXJonvc10X>io8<`s;rp z{R=1b^_g4}tlL~ArM&iK-Oih`DO+q83HCOy*lcyU5jfRN$tS@>S>eqJFJ(bBgC&9j zWg$x^atKRY;^44eb;+ZJlP8m?3dw=>3_or>n z&U)A|_y2?HrqpI%c5CxLzg|CVxDesUF+(I|0@sB-viQkA`yc$}nDMTn!a022WQ%mvv4FO#p`ZQp5lN literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/pipeCorner1.png b/Games/Pac_Man_Game/images/pipeCorner1.png new file mode 100644 index 0000000000000000000000000000000000000000..89214867cf1d5f518b01297354c426c03b9a6a14 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfZ?Q z88&lou{RZSr=L9gJ7MoTt9wtr9_p_C7hW*?cEB8YM=r5_{7tP1^Ivl)t>9WwY1Xko zYr(Ud3QemTW~DcCtYXTV$BQQ6kooV|$6A*|xf7a}`v2PZU(AN_u*-bSofnO*fX-y_ MboFyt=akR{0MbocP5=M^ literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/pipeCorner2.png b/Games/Pac_Man_Game/images/pipeCorner2.png new file mode 100644 index 0000000000000000000000000000000000000000..4b180ede7c8692d2302ee93b877f4d26f31951b9 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#Vf=mG%fUgSHC@A8!F=PU5(V=|GJXlqWpZ?uN;pq+xfuQ9>Dj!jxV`)SXN&FUdwfb` zruyrc$yot(p#?$WZ@y{vrK+Hylat9k32R@~6ytKBS;c5wH67S4OBrCd+ytb$)Z_H7<8P3^;njlT!*{2fH}SkMal62IO~+lpG1TGgWk;4!MpJ)w!4TFf zHnJ`Oq5+>vP$d4VSJ*R!u~t2wZT#w-C%Z?l1b>)+rBLbE!0CNerCHLp3raZ{1`fJCH{R}9m-Gwm&p0vn&ymsi=Go>ZE9 z+<%76`sca7et!OLaemEm34_n_4hF&zoBo8v^u2vh^yqM|5L=0Civr94TCv9pe2)^A zG0!Aw&yC_45zmhpe>5z&St Wo|?%M-aZ7nhQZU-&t;ucLK6VSv`Rk! literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/pipeHorizontal.png b/Games/Pac_Man_Game/images/pipeHorizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..59f73188b9b41a80da48e74e208d60998a7fab26 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfYw%j{huo_B~>EXExOQ@YKBmXe)!KtDnm{r-UW| D)Hg;% literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/images/pipeVertical.png b/Games/Pac_Man_Game/images/pipeVertical.png new file mode 100644 index 0000000000000000000000000000000000000000..b364f1ea96f0187e1aca202b88086202a2d70de7 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfFHA(;FC9Z)ZHcf%|L6!-Nwm^W@Y$JZ}7%o48!}c46rDbG2{#_rITC z6_;i3P|pl8D2QWn84{B;=(o-dVDNPHb6Mw<&;$VZG(-dd literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index ca6bec8c55..2dccdde98b 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -8,14 +8,16 @@ canvas.height = innerHeight; // Set the height of the canvas to the height of th class Boundary { static width = 40; static height = 40; - constructor({position}) { // The constructor takes an object with a position property so we can destructure it + constructor({position, image}) { // The constructor takes an object with a position property so we can destructure it this.position = position; // Set the position of the player this.width = 40; this.height = 40; + this.image = image; } draw() { - c.fillStyle = 'blue'; - c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player + // c.fillStyle = 'blue'; + // c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player + c.drawImage(this.image, this.position.x, this.position.y) } } @@ -70,15 +72,21 @@ let lastKey = '' // Create an array to store the boundaries const map = [ - ['-','-','-','-','-','-','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-',' ','-',' ','-',' ','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-',' ','-',' ','-',' ','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-','-','-','-','-','-','-'] + ['1','-','-','-','-','-','2'], + ['|',' ',' ',' ',' ',' ','|'], + ['|',' ','b',' ','b',' ','|'], + ['|',' ',' ',' ',' ',' ','|'], + ['|',' ','b',' ','b',' ','|'], + ['|',' ',' ',' ',' ',' ','|'], + ['4','-','-','-','-','-','3'] ] +function createImage(src) { + const image = new Image() + image.src = src + return image +} + map.forEach((row, i) => { row.forEach((symbol, j) => { switch (symbol) { @@ -88,7 +96,85 @@ map.forEach((row, i) => { position: { x: Boundary.width * j, y: Boundary.height * i - } + }, + image: createImage('./images/pipeHorizontal.png') + }) + ) + break + case '|': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeVertical.png') + }) + ) + break + case '1': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner1.png') + }) + ) + break + case '2': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner2.png') + }) + ) + break + case '3': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner3.png') + }) + ) + break + case '4': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner4.png') + }) + ) + break + case '4': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner4.png') + }) + ) + break + case 'b': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/block.png') }) ) break From 8f454e6b72d44ee22ecfbccaed5de2a31e878c30 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:25:43 +0100 Subject: [PATCH 03/48] Map Finished map --- Games/Pac_Man_Game/index.js | 99 ++++++++++++++++++++++++++++++++++--- 1 file changed, 92 insertions(+), 7 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 2dccdde98b..380beffa11 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -72,13 +72,21 @@ let lastKey = '' // Create an array to store the boundaries const map = [ - ['1','-','-','-','-','-','2'], - ['|',' ',' ',' ',' ',' ','|'], - ['|',' ','b',' ','b',' ','|'], - ['|',' ',' ',' ',' ',' ','|'], - ['|',' ','b',' ','b',' ','|'], - ['|',' ',' ',' ',' ',' ','|'], - ['4','-','-','-','-','-','3'] + ['1','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','2'], + ['|',' ',' ',' ',' ',' ',' ',' ',' ','^',' ',' ',' ',' ',' ',' ',' ',' ','|'], + ['|',' ','b',' ','<','>',' ','b',' ',' ',' ','b',' ','<','>',' ','b',' ','|'], + ['|',' ',' ',' ',' ',' ',' ',' ',' ','v',' ',' ',' ',' ',' ',' ',' ',' ','|'], + ['|',' ','b',' ','<','-','>',' ','<','+','>',' ','<','-','>',' ','b',' ','|'], + ['|',' ',' ',' ',' ',' ',' ',' ',' ','^',' ',' ',' ',' ',' ',' ',' ',' ','|'], + ['4','-','-','>',' ','<','-','>',' ',' ',' ','<','-','>',' ','<','-','-','3'], + [' ',' ',' ',' ',' ',' ',' ',' ',' ','b',' ',' ',' ',' ',' ',' ',' ',' ',' '], + ['1','-','-','>',' ','<','-','>',' ',' ',' ','<','-','>',' ','<','-','-','2'], + ['|',' ',' ',' ',' ',' ',' ',' ',' ','v',' ',' ',' ',' ',' ',' ',' ',' ','|'], + ['|',' ','b',' ','<','-','>',' ','<','+','>',' ','<','-','>',' ','b',' ','|'], + ['|',' ',' ',' ',' ',' ',' ',' ',' ','^',' ',' ',' ',' ',' ',' ',' ',' ','|'], + ['|',' ','b',' ','<','>',' ','b',' ',' ',' ','b',' ','<','>',' ','b',' ','|'], + ['|',' ',' ',' ',' ',' ',' ',' ',' ','v',' ',' ',' ',' ',' ',' ',' ',' ','|'], + ['4','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','3'], ] function createImage(src) { @@ -178,6 +186,83 @@ map.forEach((row, i) => { }) ) break + case '<': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capLeft.png') + }) + ) + break + case '>': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capRight.png') + }) + ) + break + case '^': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capBottom.png') + }) + ) + break + case 'v': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capTop.png') + }) + ) + break + case '0': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeConnectorBottom.png') + }) + ) + break + case 'x': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeConnectorTop.png') + }) + ) + break + case '+': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCross.png') + }) + ) + break } }) }) From 7052d71e707a526d2885785df62f355eae98a8f2 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:30:41 +0100 Subject: [PATCH 04/48] Portals + adjusted speed Added portals in de openings and adjusted speed --- Games/Pac_Man_Game/index.js | 38 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 380beffa11..481c143fe5 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -15,9 +15,7 @@ class Boundary { this.image = image; } draw() { - // c.fillStyle = 'blue'; - // c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player - c.drawImage(this.image, this.position.x, this.position.y) + c.drawImage(this.image, this.position.x, this.position.y, this.width, this.height); // Draw the boundary } } @@ -164,17 +162,6 @@ map.forEach((row, i) => { }) ) break - case '4': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner4.png') - }) - ) - break case 'b': boundaries.push( new Boundary({ @@ -287,7 +274,7 @@ function animate() { if (circleCollidesWithRectangle({ circle: {...pacman, velocity: { x: 0, - y: -1 // Adjusted speed + y: -1.5 // Adjusted speed }}, rectangle: boundary }) @@ -295,7 +282,7 @@ function animate() { pacman.velocity.y = 0 break } else { - pacman.velocity.y = -2 // Adjusted speed + pacman.velocity.y = -1.5 // Adjusted speed } } } else if (keys.ArrowLeft.pressed && lastKey === 'ArrowLeft') { @@ -303,7 +290,7 @@ function animate() { const boundary = boundaries[i] if (circleCollidesWithRectangle({ circle: {...pacman, velocity: { - x: -1, // Adjusted speed + x: -1.5, // Adjusted speed y: 0 }}, rectangle: boundary @@ -312,7 +299,7 @@ function animate() { pacman.velocity.x = 0 break } else { - pacman.velocity.x = -2 // Adjusted speed + pacman.velocity.x = -1.5 // Adjusted speed } } } else if (keys.ArrowDown.pressed && lastKey === 'ArrowDown') { @@ -321,7 +308,7 @@ function animate() { if (circleCollidesWithRectangle({ circle: {...pacman, velocity: { x: 0, - y: 1 // Adjusted speed + y: 1.5 // Adjusted speed }}, rectangle: boundary }) @@ -329,7 +316,7 @@ function animate() { pacman.velocity.y = 0 break } else { - pacman.velocity.y = 2 // Adjusted speed + pacman.velocity.y = 1.5 // Adjusted speed } } } else if (keys.ArrowRight.pressed && lastKey === 'ArrowRight') { @@ -337,7 +324,7 @@ function animate() { const boundary = boundaries[i] if (circleCollidesWithRectangle({ circle: {...pacman, velocity: { - x: 1, // Adjusted speed + x: 1.5, // Adjusted speed y: 0 }}, rectangle: boundary @@ -346,11 +333,18 @@ function animate() { pacman.velocity.x = 0 break } else { - pacman.velocity.x = 2 // Adjusted speed + pacman.velocity.x = 1.5 // Adjusted speed } } } + // Check for portal collisions + if (pacman.position.x < 0) { + pacman.position.x = canvas.width - pacman.radius; + } else if (pacman.position.x > canvas.width) { + pacman.position.x = pacman.radius; + } + boundaries.forEach((boundary) => { boundary.draw() From e5044e2f126a6bb31d3c56fbf5a6250ed23e9b9c Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:47:54 +0100 Subject: [PATCH 05/48] Pellets Added pellets to map but they can't be collected yet --- Games/Pac_Man_Game/index.js | 78 +++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 20 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 481c143fe5..6c0964252e 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -1,17 +1,27 @@ const canvas = document.querySelector('canvas'); // Get the canvas element const c = canvas.getContext('2d'); // Get the context of the canvas -canvas.width = innerWidth; // Set the width of the canvas to the width of the window -canvas.height = innerHeight; // Set the height of the canvas to the height of the window +// Define the size of each cell in the map +const cellSize = 40; + +// Calculate the canvas size based on the map dimensions +const mapWidth = 19; // Number of columns in the map +const mapHeight = 15; // Number of rows in the map + +canvas.width = mapWidth * cellSize; // Set the width of the canvas based on the map width +canvas.height = mapHeight * cellSize; // Set the height of the canvas based on the map height + +// Prevent scrollbars +document.body.style.overflow = 'hidden'; // Create a class for the player class Boundary { - static width = 40; - static height = 40; + static width = cellSize; + static height = cellSize; constructor({position, image}) { // The constructor takes an object with a position property so we can destructure it this.position = position; // Set the position of the player - this.width = 40; - this.height = 40; + this.width = cellSize; + this.height = cellSize; this.image = image; } draw() { @@ -23,7 +33,7 @@ class Pacman { constructor({position, velocity}) { this.position = position; this.velocity = velocity; - this.radius = 15; + this.radius = cellSize / 2 - 5; } draw() { c.fillStyle = 'yellow'; @@ -39,6 +49,21 @@ class Pacman { } } +class Pellet { + constructor({position}) { + this.position = position; + this.radius = 3; + } + draw() { + c.fillStyle = 'white'; + c.beginPath() + c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) + c.fill() + c.closePath() + } +} + +const pellets = [] const boundaries = [] const pacman = new Pacman({ position: { @@ -71,19 +96,19 @@ let lastKey = '' // Create an array to store the boundaries const map = [ ['1','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','2'], - ['|',' ',' ',' ',' ',' ',' ',' ',' ','^',' ',' ',' ',' ',' ',' ',' ',' ','|'], - ['|',' ','b',' ','<','>',' ','b',' ',' ',' ','b',' ','<','>',' ','b',' ','|'], - ['|',' ',' ',' ',' ',' ',' ',' ',' ','v',' ',' ',' ',' ',' ',' ',' ',' ','|'], - ['|',' ','b',' ','<','-','>',' ','<','+','>',' ','<','-','>',' ','b',' ','|'], - ['|',' ',' ',' ',' ',' ',' ',' ',' ','^',' ',' ',' ',' ',' ',' ',' ',' ','|'], - ['4','-','-','>',' ','<','-','>',' ',' ',' ','<','-','>',' ','<','-','-','3'], - [' ',' ',' ',' ',' ',' ',' ',' ',' ','b',' ',' ',' ',' ',' ',' ',' ',' ',' '], - ['1','-','-','>',' ','<','-','>',' ',' ',' ','<','-','>',' ','<','-','-','2'], - ['|',' ',' ',' ',' ',' ',' ',' ',' ','v',' ',' ',' ',' ',' ',' ',' ',' ','|'], - ['|',' ','b',' ','<','-','>',' ','<','+','>',' ','<','-','>',' ','b',' ','|'], - ['|',' ',' ',' ',' ',' ',' ',' ',' ','^',' ',' ',' ',' ',' ',' ',' ',' ','|'], - ['|',' ','b',' ','<','>',' ','b',' ',' ',' ','b',' ','<','>',' ','b',' ','|'], - ['|',' ',' ',' ',' ',' ',' ',' ',' ','v',' ',' ',' ',' ',' ',' ',' ',' ','|'], + ['|','.','.','.','.','.','.','.','.','^','.','.','.','.','.','.','.','.','|'], + ['|','.','b','.','<','>','.','b','.','.','.','b','.','<','>','.','b','.','|'], + ['|','.','.','.','.','.','.','.','.','v','.','.','.','.','.','.','.','.','|'], + ['|','.','b','.','<','-','>','.','<','+','>','.','<','-','>','.','b','.','|'], + ['|','.','.','.','.','.','.','.','.','^','.','.','.','.','.','.','.','.','|'], + ['4','-','-','>','.','<','-','>','.','.','.','<','-','>','.','<','-','-','3'], + [' ',' ',' ',' ','.',' ',' ',' ',' ','b','.','.','.','.','.',' ',' ',' ',' '], + ['1','-','-','>','.','<','-','>','.','.','.','<','-','>','.','<','-','-','2'], + ['|','.','.','.','.','.','.','.','.','v','.','.','.','.','.','.','.','.','|'], + ['|','.','b','.','<','-','>','.','<','+','>','.','<','-','>','.','b','.','|'], + ['|','.','.','.','.','.','.','.','.','^','.','.','.','.','.','.','.','.','|'], + ['|','.','b','.','<','>','.','b','.','.','.','b','.','<','>','.','b','.','|'], + ['|','.','.','.','.','.','.','.','.','v','.','.','.','.','.','.','.','.','|'], ['4','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','3'], ] @@ -250,6 +275,16 @@ map.forEach((row, i) => { }) ) break + case '.': + pellets.push( + new Pellet({ + position: { + x: Boundary.width * j + Boundary.width / 2, + y: Boundary.height * i + Boundary.height / 2 + } + }) + ) + break } }) }) @@ -345,6 +380,9 @@ function animate() { pacman.position.x = pacman.radius; } + pellets.forEach(pellet => { + pellet.draw() + }) boundaries.forEach((boundary) => { boundary.draw() From 8853cb87fa88e040a2cb0c3556a970858fb79dec Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:48:56 +0100 Subject: [PATCH 06/48] missed pellets Missed some pellets --- Games/Pac_Man_Game/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 6c0964252e..b20afd83f1 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -102,7 +102,7 @@ const map = [ ['|','.','b','.','<','-','>','.','<','+','>','.','<','-','>','.','b','.','|'], ['|','.','.','.','.','.','.','.','.','^','.','.','.','.','.','.','.','.','|'], ['4','-','-','>','.','<','-','>','.','.','.','<','-','>','.','<','-','-','3'], - [' ',' ',' ',' ','.',' ',' ',' ',' ','b','.','.','.','.','.',' ',' ',' ',' '], + [' ',' ',' ',' ','.','.','.','.','.','b','.','.','.','.','.',' ',' ',' ',' '], ['1','-','-','>','.','<','-','>','.','.','.','<','-','>','.','<','-','-','2'], ['|','.','.','.','.','.','.','.','.','v','.','.','.','.','.','.','.','.','|'], ['|','.','b','.','<','-','>','.','<','+','>','.','<','-','>','.','b','.','|'], From 0cbc21a9a292e469fea4d2f579f7066130aece6d Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:58:50 +0100 Subject: [PATCH 07/48] Collecting pellets Collects pellets now --- Games/Pac_Man_Game/index.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index b20afd83f1..6ba9e1f517 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -380,8 +380,16 @@ function animate() { pacman.position.x = pacman.radius; } - pellets.forEach(pellet => { - pellet.draw() + pellets.forEach((pellet, i) => { // Loop through the pellets + pellet.draw() // Draw the pellet + + // Check if the pellet collides with the player + if (Math.hypot(pellet.position.x - pacman.position.x, // Calculate the x and y distance between the pellet and the pacman + pellet.position.y - pacman.position.y + ) < pellet.radius + pacman.radius // Check if the distance is less than what it would be if the two circles were colliding + ) { + pellets.splice(i, 1) // Remove the pellet from the array when it collides with the pacman + } }) boundaries.forEach((boundary) => { boundary.draw() From 9b4882e3f07ee986f3d1e9049234d9c60d56c932 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 17:24:01 +0100 Subject: [PATCH 08/48] Score count Score gets added when pellets are collected --- Games/Pac_Man_Game/index.html | 3 +++ Games/Pac_Man_Game/index.js | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index a6fe8224c2..fecab7990a 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -12,6 +12,9 @@ +

+ Score: 0 +

diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 6ba9e1f517..795a26cb40 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -1,6 +1,8 @@ const canvas = document.querySelector('canvas'); // Get the canvas element const c = canvas.getContext('2d'); // Get the context of the canvas +const score = document.querySelector('#score'); // Get the score element + // Define the size of each cell in the map const cellSize = 40; @@ -92,6 +94,7 @@ const keys = { } let lastKey = '' +let scoreValue = 0 // Create an array to store the boundaries const map = [ @@ -380,6 +383,7 @@ function animate() { pacman.position.x = pacman.radius; } + // Check for pellet collisions pellets.forEach((pellet, i) => { // Loop through the pellets pellet.draw() // Draw the pellet @@ -389,6 +393,8 @@ function animate() { ) < pellet.radius + pacman.radius // Check if the distance is less than what it would be if the two circles were colliding ) { pellets.splice(i, 1) // Remove the pellet from the array when it collides with the pacman + scoreValue += 10 // Increase the score by 10 + score.innerHTML = scoreValue // Update the score element } }) boundaries.forEach((boundary) => { From 06466eb47104f302d7ced8c2dad05666cae261c1 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 17:32:07 +0100 Subject: [PATCH 09/48] Win Winning game message when you collect all pellets + restart game afterwards --- Games/Pac_Man_Game/index.js | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 795a26cb40..e31f95d2c1 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -65,9 +65,9 @@ class Pellet { } } -const pellets = [] -const boundaries = [] -const pacman = new Pacman({ +let pellets = [] +let boundaries = [] +let pacman = new Pacman({ position: { x: Boundary.width + Boundary.width / 2, y: Boundary.height + Boundary.height / 2 @@ -121,6 +121,22 @@ function createImage(src) { return image } +function initializeGame() { + pellets = [] + boundaries = [] + pacman = new Pacman({ + position: { + x: Boundary.width + Boundary.width / 2, + y: Boundary.height + Boundary.height / 2 + }, + velocity: { + x: 0, + y: 0 + } + }) + scoreValue = 0 + score.innerHTML = scoreValue + map.forEach((row, i) => { row.forEach((symbol, j) => { switch (symbol) { @@ -291,6 +307,7 @@ map.forEach((row, i) => { } }) }) +} function circleCollidesWithRectangle({circle, rectangle}) { const padding = Boundary.width / 2 - circle.radius - 1 @@ -395,6 +412,14 @@ function animate() { pellets.splice(i, 1) // Remove the pellet from the array when it collides with the pacman scoreValue += 10 // Increase the score by 10 score.innerHTML = scoreValue // Update the score element + + // Check if all pellets are collected + if (pellets.length === 0) { + setTimeout(() => { + alert('Congratulations! You have won!'); + initializeGame(); // Restart the game + }, 100); + } } }) boundaries.forEach((boundary) => { @@ -413,6 +438,7 @@ function animate() { pacman.update() } +initializeGame(); animate() window.addEventListener('keydown', ({key}) => { From 152c513a0460e1fbfc4a96300bf685559af1514f Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 18:16:10 +0100 Subject: [PATCH 10/48] First Ghost start Ghost moves after a delay + ghost collides with the right side --- Games/Pac_Man_Game/index.js | 447 +++++++++++++++++++++--------------- 1 file changed, 262 insertions(+), 185 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index e31f95d2c1..ed842bea8e 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -35,7 +35,7 @@ class Pacman { constructor({position, velocity}) { this.position = position; this.velocity = velocity; - this.radius = cellSize / 2 - 5; + this.radius = 15; } draw() { c.fillStyle = 'yellow'; @@ -51,6 +51,30 @@ class Pacman { } } +class Ghost { + constructor({position, velocity, color = 'pink'}) { + this.position = position; + this.velocity = velocity; + this.radius = 15; + this.color = color; + this.startMoving = false; + } + draw() { + c.fillStyle = this.color; + c.beginPath() + c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) + c.fill() + c.closePath() + } + update() { + this.draw() + if (this.startMoving) { + this.position.x += this.velocity.x + this.position.y += this.velocity.y + } + } +} + class Pellet { constructor({position}) { this.position = position; @@ -65,9 +89,11 @@ class Pellet { } } -let pellets = [] -let boundaries = [] -let pacman = new Pacman({ +const pellets = [] +const boundaries = [] +const ghosts = [] + +const pacman = new Pacman({ position: { x: Boundary.width + Boundary.width / 2, y: Boundary.height + Boundary.height / 2 @@ -122,191 +148,212 @@ function createImage(src) { } function initializeGame() { - pellets = [] - boundaries = [] - pacman = new Pacman({ - position: { - x: Boundary.width + Boundary.width / 2, - y: Boundary.height + Boundary.height / 2 - }, - velocity: { - x: 0, - y: 0 - } - }) + pellets.length = 0 + boundaries.length = 0 + ghosts.length = 0 + pacman.position = { + x: Boundary.width + Boundary.width / 2, + y: Boundary.height + Boundary.height / 2 + } + pacman.velocity = { + x: 0, + y: 0 + } scoreValue = 0 score.innerHTML = scoreValue -map.forEach((row, i) => { - row.forEach((symbol, j) => { - switch (symbol) { - case '-': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeHorizontal.png') - }) - ) - break - case '|': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeVertical.png') - }) - ) - break - case '1': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner1.png') - }) - ) - break - case '2': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner2.png') - }) - ) - break - case '3': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner3.png') - }) - ) - break - case '4': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner4.png') - }) - ) - break - case 'b': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/block.png') - }) - ) - break - case '<': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capLeft.png') - }) - ) - break - case '>': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capRight.png') - }) - ) - break - case '^': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capBottom.png') - }) - ) - break - case 'v': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capTop.png') - }) - ) - break - case '0': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeConnectorBottom.png') - }) - ) - break - case 'x': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeConnectorTop.png') - }) - ) - break - case '+': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCross.png') - }) - ) - break - case '.': - pellets.push( - new Pellet({ - position: { - x: Boundary.width * j + Boundary.width / 2, - y: Boundary.height * i + Boundary.height / 2 - } - }) - ) - break - } + map.forEach((row, i) => { + row.forEach((symbol, j) => { + switch (symbol) { + case '-': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeHorizontal.png') + }) + ) + break + case '|': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeVertical.png') + }) + ) + break + case '1': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner1.png') + }) + ) + break + case '2': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner2.png') + }) + ) + break + case '3': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner3.png') + }) + ) + break + case '4': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCorner4.png') + }) + ) + break + case 'b': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/block.png') + }) + ) + break + case '<': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capLeft.png') + }) + ) + break + case '>': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capRight.png') + }) + ) + break + case '^': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capBottom.png') + }) + ) + break + case 'v': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/capTop.png') + }) + ) + break + case '0': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeConnectorBottom.png') + }) + ) + break + case 'x': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeConnectorTop.png') + }) + ) + break + case '+': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + }, + image: createImage('./images/pipeCross.png') + }) + ) + break + case '.': + pellets.push( + new Pellet({ + position: { + x: Boundary.width * j + Boundary.width / 2, + y: Boundary.height * i + Boundary.height / 2 + } + }) + ) + break + } + }) }) -}) + + // Add ghost after initializing the map + ghosts.push( + new Ghost({ + position: { + x: Boundary.width * 9 + Boundary.width / 2, + y: Boundary.height * 6 + Boundary.height / 2 + }, + velocity: { + x: 0, + y: 0 + } + }) + ) + + // Start moving the ghost after a delay + setTimeout(() => { // Set a timeout to delay the ghost movement + ghosts.forEach(ghost => { // Loop through the ghosts + ghost.velocity = { x: 1, y: 0 } // Set the velocity of the ghost + ghost.startMoving = true // Set the startMoving property to true + }) + }, 5000) // 5 seconds delay } function circleCollidesWithRectangle({circle, rectangle}) { @@ -436,6 +483,36 @@ function animate() { } }) pacman.update() + +ghosts.forEach((ghost) => { + ghost.update() + + // Check for portal collisions for ghosts + if (ghost.position.x < 0) { + ghost.position.x = canvas.width - ghost.radius; + } else if (ghost.position.x > canvas.width) { + ghost.position.x = ghost.radius; + } + + let collision = false + boundaries.forEach(boundary => { + if (circleCollidesWithRectangle({ + circle: {...ghost, velocity: { + x: ghost.velocity.x, + y: ghost.velocity.y + }}, + rectangle: boundary + }) + ) { + collision = true + } + }) + + if (collision) { + ghost.velocity.x = 0 + ghost.velocity.y = 0 + } +}) } initializeGame(); From cad908127b875d9aef8203a3bb9394e20c313bec Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 20:42:51 +0100 Subject: [PATCH 11/48] Ghost ai Ghost takes different direction after collision --- Games/Pac_Man_Game/index.js | 39 +++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index ed842bea8e..eaa8427d2b 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -502,15 +502,46 @@ ghosts.forEach((ghost) => { y: ghost.velocity.y }}, rectangle: boundary - }) - ) { + })) { collision = true } }) if (collision) { - ghost.velocity.x = 0 - ghost.velocity.y = 0 + // Stop the ghost and set a random new direction, but avoid dead ends and corners + ghost.velocity.x = 0; + ghost.velocity.y = 0; + + // Possible directions to move + const directions = [ + { direction: 'right', x: 1.5, y: 0 }, + { direction: 'left', x: -1.5, y: 0 }, + { direction: 'up', x: 0, y: -1.5 }, + { direction: 'down', x: 0, y: 1.5 } + ]; + + // Function to check if a move is valid (not blocked by a boundary) + const isMoveValid = (newX, newY) => { + let valid = true; + boundaries.forEach(boundary => { + if (circleCollidesWithRectangle({ + circle: { ...ghost, velocity: { x: newX, y: newY } }, + rectangle: boundary + })) { + valid = false; + } + }); + return valid; + }; + + // Filter out invalid moves + const validDirections = directions.filter(({x, y}) => isMoveValid(x, y)); + + // If there are valid directions, pick one + if (validDirections.length > 0) { + const randomDirection = validDirections[Math.floor(Math.random() * validDirections.length)]; + ghost.velocity = { x: randomDirection.x, y: randomDirection.y }; + } } }) } From 228fe67d53a87a76a600ae69e3c41ea2fa38c169 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 21:37:25 +0100 Subject: [PATCH 12/48] 3 Ghosts 3 Ghosts and they move at different times and (slighty) different speeds --- Games/Pac_Man_Game/index.js | 86 ++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 25 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index eaa8427d2b..e0f6b3ce14 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -58,19 +58,20 @@ class Ghost { this.radius = 15; this.color = color; this.startMoving = false; + this.originalSpeed = Math.hypot(velocity.x, velocity.y); // Bewaar de oorspronkelijke snelheid } draw() { c.fillStyle = this.color; - c.beginPath() - c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) - c.fill() - c.closePath() + c.beginPath(); + c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2); + c.fill(); + c.closePath(); } update() { - this.draw() + this.draw(); if (this.startMoving) { - this.position.x += this.velocity.x - this.position.y += this.velocity.y + this.position.x += this.velocity.x; + this.position.y += this.velocity.y; } } } @@ -341,19 +342,54 @@ function initializeGame() { y: Boundary.height * 6 + Boundary.height / 2 }, velocity: { - x: 0, + x: 1.2, // ghost is sligthly slower than pacman y: 0 - } + }, + color: 'red' + }, + {startMoving: true }) ) - - // Start moving the ghost after a delay - setTimeout(() => { // Set a timeout to delay the ghost movement - ghosts.forEach(ghost => { // Loop through the ghosts - ghost.velocity = { x: 1, y: 0 } // Set the velocity of the ghost - ghost.startMoving = true // Set the startMoving property to true + ghosts.push( + new Ghost({ + position: { + x: Boundary.width * 8 + Boundary.width / 2, + y: Boundary.height * 7 + Boundary.height / 2 + }, + velocity: { + x: 1.5, // ghost has the same speed as pacman + y: 0 + }, + color: 'green' }) - }, 5000) // 5 seconds delay + ) + ghosts.push( + new Ghost({ + position: { + x: Boundary.width * 10 + Boundary.width / 2, + y: Boundary.height * 7 + Boundary.height / 2 + }, + velocity: { + x: 1.7, // ghost is slightly faster than pacman + y: 0 + }, + color: 'pink' + }) + ) + + + // each ghost starts moving after a delay + setTimeout(() => { + ghosts[0].startMoving = true; // First ghost starts after 5 seconds + }, 5000); + + setTimeout(() => { + ghosts[1].startMoving = true; // Second ghost starts after 15 seconds + }, 15000); + + setTimeout(() => { + ghosts[2].startMoving = true; // Third ghost starts after 40 seconds + }, 40000); } function circleCollidesWithRectangle({circle, rectangle}) { @@ -485,7 +521,7 @@ function animate() { pacman.update() ghosts.forEach((ghost) => { - ghost.update() + ghost.update(); // Check for portal collisions for ghosts if (ghost.position.x < 0) { @@ -494,7 +530,7 @@ ghosts.forEach((ghost) => { ghost.position.x = ghost.radius; } - let collision = false + let collision = false; boundaries.forEach(boundary => { if (circleCollidesWithRectangle({ circle: {...ghost, velocity: { @@ -503,21 +539,21 @@ ghosts.forEach((ghost) => { }}, rectangle: boundary })) { - collision = true + collision = true; } - }) + }); if (collision) { - // Stop the ghost and set a random new direction, but avoid dead ends and corners + // Stop the ghost and set a random new direction, but use original speed ghost.velocity.x = 0; ghost.velocity.y = 0; // Possible directions to move const directions = [ - { direction: 'right', x: 1.5, y: 0 }, - { direction: 'left', x: -1.5, y: 0 }, - { direction: 'up', x: 0, y: -1.5 }, - { direction: 'down', x: 0, y: 1.5 } + { direction: 'right', x: ghost.originalSpeed, y: 0 }, + { direction: 'left', x: -ghost.originalSpeed, y: 0 }, + { direction: 'up', x: 0, y: -ghost.originalSpeed }, + { direction: 'down', x: 0, y: ghost.originalSpeed } ]; // Function to check if a move is valid (not blocked by a boundary) From af12a96fb9ed9519de2d9fead2806f84eaeababb Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 21:49:44 +0100 Subject: [PATCH 13/48] Lives on screen Added lives on screen + seperated css and html --- Games/Pac_Man_Game/index.html | 22 ++++++++++++---------- Games/Pac_Man_Game/style.css | 22 +++++++++++++++++++++- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index fecab7990a..a8061e4aa6 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -4,18 +4,20 @@ Pac-Man Game - + -

- Score: 0 -

+
+

+ Score: 0 +

+
+ + + +
+
- \ No newline at end of file + diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 3e3afe0cea..83a6e030f6 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -8,5 +8,25 @@ body { /* Remove margin to prevent unwanted spacing */ margin: 0; /* Set background color to black */ - background-color: #000; + background-color: black; +} + +p { + color: white; + text-align: center; + font-size: 20px; +} + +#livesContainer { + display: flex; /* Zet de levens naast elkaar */ + gap: 10px; /* Ruimte tussen de cirkels */ + margin-top: 10px; /* Ruimte boven de cirkels */ + justify-content: center; +} + +.life { + width: 20px; /* Breedte van de cirkel */ + height: 20px; /* Hoogte van de cirkel */ + background-color: yellow; /* Kleur van de cirkel */ + border-radius: 50%; /* Maakt het een perfecte cirkel */ } \ No newline at end of file From 28195bf43e8187e8e5e91d0b76222d0b9df2400b Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 22:14:14 +0100 Subject: [PATCH 14/48] Lose lives You lose lives when you collide with a ghost + lose the game if you lost all lives --- Games/Pac_Man_Game/index.js | 33 +++++++++++++++++++++++++++++++++ Games/Pac_Man_Game/style.css | 22 ++++++++++++---------- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index e0f6b3ce14..ec54d7261f 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -122,6 +122,17 @@ const keys = { let lastKey = '' let scoreValue = 0 +let lives = 3; + +function updateLives() { + const livesContainer = document.getElementById('livesContainer'); + livesContainer.innerHTML = ''; + for (let i = 0; i < lives; i++) { + const life = document.createElement('span'); + life.classList.add('life'); + livesContainer.appendChild(life); + } +} // Create an array to store the boundaries const map = [ @@ -162,6 +173,8 @@ function initializeGame() { } scoreValue = 0 score.innerHTML = scoreValue + lives = 3; + updateLives(); map.forEach((row, i) => { row.forEach((symbol, j) => { @@ -579,6 +592,26 @@ ghosts.forEach((ghost) => { ghost.velocity = { x: randomDirection.x, y: randomDirection.y }; } } + + // Check for collision with Pac-Man + if (Math.hypot(ghost.position.x - pacman.position.x, ghost.position.y - pacman.position.y) < ghost.radius + pacman.radius) { + lives -= 1; + updateLives(); + if (lives === 0) { + alert('Game Over!'); + initializeGame(); + } else { + // Reset Pac-Man position + pacman.position = { + x: Boundary.width + Boundary.width / 2, + y: Boundary.height + Boundary.height / 2 + }; + pacman.velocity = { + x: 0, + y: 0 + }; + } + } }) } diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 83a6e030f6..1037d8387d 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -11,22 +11,24 @@ body { background-color: black; } -p { - color: white; +.score-container { text-align: center; + color: white; +} + +p { font-size: 20px; } #livesContainer { - display: flex; /* Zet de levens naast elkaar */ - gap: 10px; /* Ruimte tussen de cirkels */ - margin-top: 10px; /* Ruimte boven de cirkels */ - justify-content: center; + margin-top: 10px; } .life { - width: 20px; /* Breedte van de cirkel */ - height: 20px; /* Hoogte van de cirkel */ - background-color: yellow; /* Kleur van de cirkel */ - border-radius: 50%; /* Maakt het een perfecte cirkel */ + width: 20px; + height: 20px; + margin: 0 5px; + border-radius: 50%; /* Create a circle */ + background-color: yellow; /* Yellow color for Pac-Man lives */ + display: inline-block; } \ No newline at end of file From b3736357bdc55bd6527d2fe08cd2aa8a7d8544ac Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Wed, 25 Dec 2024 22:47:09 +0100 Subject: [PATCH 15/48] Pac Man animation Pac man mouth moves + mouth points towards the direction it moves --- Games/Pac_Man_Game/index.js | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index ec54d7261f..0a838de640 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -36,18 +36,36 @@ class Pacman { this.position = position; this.velocity = velocity; this.radius = 15; + this.radians = 0.75; // Start with the mouth closed + this.openRate = 0.05; // How fast the mouth opens and closes + this.rotation = 0; // Rotation of Pacman starts at 0 } draw() { - c.fillStyle = 'yellow'; - c.beginPath() - c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) - c.fill() - c.closePath() + c.save(); // Save the current state of the canvas + c.translate(this.position.x, this.position.y); // Translate the canvas to the position of Pacman so we can rotate around him + c.rotate(this.rotation); // Rotation of Pacman so the mouth opens in the right direction + c.translate(-this.position.x, -this.position.y); // Translate the canvas back to the original position + c.fillStyle = 'yellow'; // Set the fill color to yellow + c.beginPath(); // Start a new path + c.arc(this.position.x, this.position.y, this.radius, this.radians, Math.PI * 2 - this.radians); // Draw the mouth of Pacman with the current radians. Math.PI * 2 is a full circle + c.lineTo(this.position.x, this.position.y); // Draw a line to the center of Pacman to close the mouth + c.fill(); // Fill the path with the current fill color + c.closePath(); // Close the path so we can start a new one + c.restore(); // Restore the canvas to the previous state } update() { - this.draw() - this.position.x += this.velocity.x - this.position.y += this.velocity.y + this.draw(); // Draw Pacman + this.position.x += this.velocity.x; // Move Pacman on the x-axis + this.position.y += this.velocity.y; // Move Pacman on the y-axis + + // Calculate the rotation of Pacman based on his velocity + if (this.velocity.x !== 0 || this.velocity.y !== 0) { // Check if Pacman is moving + this.rotation = Math.atan2(this.velocity.y, this.velocity.x); // Rotate Pacman based on his velocity + } + + // Open and close the mouth of Pacman + if (this.radians < 0 || this.radians > 0.75) this.openRate = -this.openRate; // Change the open rate if the mouth is fully open or closed + this.radians += this.openRate; // Change the radians of Pacman } } From edd903dc20fc78e891c734a423da77ee810ba3e1 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 00:41:05 +0100 Subject: [PATCH 16/48] Changes Game no longer restarts. It just refreshes the page. + Some clean up --- Games/Pac_Man_Game/index.js | 308 ++++-------------------------------- 1 file changed, 34 insertions(+), 274 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 0a838de640..ddb535cbea 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -178,249 +178,44 @@ function createImage(src) { } function initializeGame() { - pellets.length = 0 - boundaries.length = 0 - ghosts.length = 0 - pacman.position = { - x: Boundary.width + Boundary.width / 2, - y: Boundary.height + Boundary.height / 2 - } - pacman.velocity = { - x: 0, - y: 0 - } - scoreValue = 0 - score.innerHTML = scoreValue + pellets.length = 0; + boundaries.length = 0; + ghosts.length = 0; + pacman.position = { x: Boundary.width + Boundary.width / 2, y: Boundary.height + Boundary.height / 2 }; + pacman.velocity = { x: 0, y: 0 }; + scoreValue = 0; + score.innerHTML = scoreValue; lives = 3; updateLives(); + const symbolToBoundary = { + '-': './images/pipeHorizontal.png', '|': './images/pipeVertical.png', '1': './images/pipeCorner1.png', + '2': './images/pipeCorner2.png', '3': './images/pipeCorner3.png', '4': './images/pipeCorner4.png', + 'b': './images/block.png', '<': './images/capLeft.png', '>': './images/capRight.png', + '^': './images/capBottom.png', 'v': './images/capTop.png', '0': './images/pipeConnectorBottom.png', + 'x': './images/pipeConnectorTop.png', '+': './images/pipeCross.png' + }; + map.forEach((row, i) => { row.forEach((symbol, j) => { - switch (symbol) { - case '-': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeHorizontal.png') - }) - ) - break - case '|': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeVertical.png') - }) - ) - break - case '1': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner1.png') - }) - ) - break - case '2': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner2.png') - }) - ) - break - case '3': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner3.png') - }) - ) - break - case '4': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCorner4.png') - }) - ) - break - case 'b': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/block.png') - }) - ) - break - case '<': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capLeft.png') - }) - ) - break - case '>': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capRight.png') - }) - ) - break - case '^': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capBottom.png') - }) - ) - break - case 'v': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/capTop.png') - }) - ) - break - case '0': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeConnectorBottom.png') - }) - ) - break - case 'x': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeConnectorTop.png') - }) - ) - break - case '+': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - }, - image: createImage('./images/pipeCross.png') - }) - ) - break - case '.': - pellets.push( - new Pellet({ - position: { - x: Boundary.width * j + Boundary.width / 2, - y: Boundary.height * i + Boundary.height / 2 - } - }) - ) - break + if (symbol === '.') { + pellets.push(new Pellet({ position: { x: Boundary.width * j + Boundary.width / 2, y: Boundary.height * i + Boundary.height / 2 } })); + } else if (symbolToBoundary[symbol]) { + boundaries.push(new Boundary({ position: { x: Boundary.width * j, y: Boundary.height * i }, image: createImage(symbolToBoundary[symbol]) })); } - }) - }) - - // Add ghost after initializing the map - ghosts.push( - new Ghost({ - position: { - x: Boundary.width * 9 + Boundary.width / 2, - y: Boundary.height * 6 + Boundary.height / 2 - }, - velocity: { - x: 1.2, // ghost is sligthly slower than pacman - y: 0 - }, - color: 'red' - }, - {startMoving: true - }) - ) - ghosts.push( - new Ghost({ - position: { - x: Boundary.width * 8 + Boundary.width / 2, - y: Boundary.height * 7 + Boundary.height / 2 - }, - velocity: { - x: 1.5, // ghost has the same speed as pacman - y: 0 - }, - color: 'green' - }) - ) - ghosts.push( - new Ghost({ - position: { - x: Boundary.width * 10 + Boundary.width / 2, - y: Boundary.height * 7 + Boundary.height / 2 - }, - velocity: { - x: 1.7, // ghost is slightly faster than pacman - y: 0 - }, - color: 'pink' - }) - ) - - - // each ghost starts moving after a delay - setTimeout(() => { - ghosts[0].startMoving = true; // First ghost starts after 5 seconds - }, 5000); + }); + }); - setTimeout(() => { - ghosts[1].startMoving = true; // Second ghost starts after 15 seconds - }, 15000); + const ghostConfigs = [ + { x: 9, y: 6, velocity: 1.2, color: 'red' }, + { x: 8, y: 7, velocity: 1.5, color: 'green' }, + { x: 10, y: 7, velocity: 1.7, color: 'pink' } + ]; - setTimeout(() => { - ghosts[2].startMoving = true; // Third ghost starts after 40 seconds - }, 40000); + ghostConfigs.forEach(({ x, y, velocity, color }, index) => { + ghosts.push(new Ghost({ position: { x: Boundary.width * x + Boundary.width / 2, y: Boundary.height * y + Boundary.height / 2 }, velocity: { x: velocity, y: 0 }, color })); + setTimeout(() => { ghosts[index].startMoving = true; }, [5000, 15000, 40000][index]); + }); } function circleCollidesWithRectangle({circle, rectangle}) { @@ -531,7 +326,7 @@ function animate() { if (pellets.length === 0) { setTimeout(() => { alert('Congratulations! You have won!'); - initializeGame(); // Restart the game + window.location.reload(); // Refresh the page instead of initializing the game }, 100); } } @@ -617,7 +412,7 @@ ghosts.forEach((ghost) => { updateLives(); if (lives === 0) { alert('Game Over!'); - initializeGame(); + window.location.reload(); // Refresh the page instead of initializing the game } else { // Reset Pac-Man position pacman.position = { @@ -636,40 +431,5 @@ ghosts.forEach((ghost) => { initializeGame(); animate() -window.addEventListener('keydown', ({key}) => { - switch (key) { - case 'ArrowUp': - keys.ArrowUp.pressed = true - lastKey = 'ArrowUp' - break - case 'ArrowDown': - keys.ArrowDown.pressed = true - lastKey = 'ArrowDown' - break - case 'ArrowLeft': - keys.ArrowLeft.pressed = true - lastKey = 'ArrowLeft' - break - case 'ArrowRight': - keys.ArrowRight.pressed = true - lastKey = 'ArrowRight' - break - } -}) - -window.addEventListener('keyup', ({key}) => { - switch (key) { - case 'ArrowUp': - keys.ArrowUp.pressed = false - break - case 'ArrowDown': - keys.ArrowDown.pressed = false - break - case 'ArrowLeft': - keys.ArrowLeft.pressed = false - break - case 'ArrowRight': - keys.ArrowRight.pressed = false - break - } -}) \ No newline at end of file +window.addEventListener('keydown', ({key}) => keys[key] && (keys[key].pressed = true, lastKey = key)); +window.addEventListener('keyup', ({key}) => keys[key] && (keys[key].pressed = false)); From 377d6354bbd270aac71009d42cfcb77519dbe79b Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 00:49:08 +0100 Subject: [PATCH 17/48] Clean up Just clean up --- Games/Pac_Man_Game/index.js | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index ddb535cbea..3b363d62b2 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -123,20 +123,10 @@ const pacman = new Pacman({ } }) -const keys = { - ArrowUp: { - pressed: false - }, - ArrowDown: { - pressed: false - }, - ArrowLeft: { - pressed: false - }, - ArrowRight: { - pressed: false - } -} +const keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].reduce((acc, key) => { + acc[key] = { pressed: false }; + return acc; +}, {}); let lastKey = '' let scoreValue = 0 From 4df3fce51d884e9477bb5c389094f422c4ebd086 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 01:55:26 +0100 Subject: [PATCH 18/48] Revert "Map change" This reverts commit c0fa7b3a0c6763f01c1369f77b87a29ce485f7b7. --- Games/Pac_Man_Game/images/block.png | Bin 269 -> 0 bytes Games/Pac_Man_Game/images/capBottom.png | Bin 244 -> 0 bytes Games/Pac_Man_Game/images/capLeft.png | Bin 241 -> 0 bytes Games/Pac_Man_Game/images/capRight.png | Bin 217 -> 0 bytes Games/Pac_Man_Game/images/capTop.png | Bin 236 -> 0 bytes .../images/pipeConnectorBottom.png | Bin 198 -> 0 bytes .../images/pipeConnectorDownwards.png | Bin 253 -> 0 bytes .../Pac_Man_Game/images/pipeConnectorLeft.png | Bin 207 -> 0 bytes .../images/pipeConnectorRight.png | Bin 253 -> 0 bytes .../Pac_Man_Game/images/pipeConnectorTop.png | Bin 210 -> 0 bytes Games/Pac_Man_Game/images/pipeCorner1.png | Bin 228 -> 0 bytes Games/Pac_Man_Game/images/pipeCorner2.png | Bin 241 -> 0 bytes Games/Pac_Man_Game/images/pipeCorner3.png | Bin 232 -> 0 bytes Games/Pac_Man_Game/images/pipeCorner4.png | Bin 253 -> 0 bytes Games/Pac_Man_Game/images/pipeCross.png | Bin 203 -> 0 bytes Games/Pac_Man_Game/images/pipeHorizontal.png | Bin 179 -> 0 bytes Games/Pac_Man_Game/images/pipeVertical.png | Bin 191 -> 0 bytes Games/Pac_Man_Game/index.js | 98 ++++++------------ 18 files changed, 30 insertions(+), 68 deletions(-) delete mode 100644 Games/Pac_Man_Game/images/block.png delete mode 100644 Games/Pac_Man_Game/images/capBottom.png delete mode 100644 Games/Pac_Man_Game/images/capLeft.png delete mode 100644 Games/Pac_Man_Game/images/capRight.png delete mode 100644 Games/Pac_Man_Game/images/capTop.png delete mode 100644 Games/Pac_Man_Game/images/pipeConnectorBottom.png delete mode 100644 Games/Pac_Man_Game/images/pipeConnectorDownwards.png delete mode 100644 Games/Pac_Man_Game/images/pipeConnectorLeft.png delete mode 100644 Games/Pac_Man_Game/images/pipeConnectorRight.png delete mode 100644 Games/Pac_Man_Game/images/pipeConnectorTop.png delete mode 100644 Games/Pac_Man_Game/images/pipeCorner1.png delete mode 100644 Games/Pac_Man_Game/images/pipeCorner2.png delete mode 100644 Games/Pac_Man_Game/images/pipeCorner3.png delete mode 100644 Games/Pac_Man_Game/images/pipeCorner4.png delete mode 100644 Games/Pac_Man_Game/images/pipeCross.png delete mode 100644 Games/Pac_Man_Game/images/pipeHorizontal.png delete mode 100644 Games/Pac_Man_Game/images/pipeVertical.png diff --git a/Games/Pac_Man_Game/images/block.png b/Games/Pac_Man_Game/images/block.png deleted file mode 100644 index 59dc1a8081055906ce9135b21dcdba3f8c306e09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VffiSdM9Q{awtbVru2)JmHFfbGW@!(_%%7C_W(%=EXBp zOeXiFO}gmgl&L4dd+?%wOzx-PX>4wE9z2V?t(N1GMT3V~ zT|obaf9XH|7k=Ph)Vxgb#(yInhPJ)T1zYCNe`2v*C8qO@WmVO~8VlC+|>yaeW)27hL*tW37gvH&tV2g~(1U5J0lNoA~ zXH^!@Y`GL;Al0;3(c;#V!edX%lGB=7-qeScHGzbU-DmlipX}`{f!eFFV3$?&RF^Rzmpqd`)8&%^^#%?YYQ2y nrp%vqZDQKD|E=~jB)J%Va-B+6Q!thTI-9}M)z4*}Q$iB}%;Z_7 diff --git a/Games/Pac_Man_Game/images/capLeft.png b/Games/Pac_Man_Game/images/capLeft.png deleted file mode 100644 index 13f666e6fb841a3e2972e62c6bd6713b185cd18c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfxH|*<~sx1*o-Fgz3}1oy3owDh{rdjqubl>nf02F#ox|W{q|p|=Mt_y zmv3UA>l_K|TfcU!c#)8^u3F~ppJ^Z8%zMwfWBp#ub50YO?e6fi$~TGj2Ty2P!7wYG zU9*F0L1h_k&WHM@7vlTpZm&O_^-t*UFWx}anV++q_Px!&7bo~@pYW{1Q#9vpUUw4c OW(H4JKbLh*2~7YaW?vlu diff --git a/Games/Pac_Man_Game/images/capRight.png b/Games/Pac_Man_Game/images/capRight.png deleted file mode 100644 index c2fb85a093fb3f3215d61c79fd0df2a90c9763b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#Vf=cu zl^*=JWqRqsjeBfl=BnLL|Gvuk;LYof1z~S~+c$BnV#=DwtF(e^MWtEC0<8tlZYngb zYM7PYj4biP-toO~fqjCNc#p{TQpeBARae3;ePj4`BKhwvPRC6^w=sCS`njxgN@xNA D1cp;B diff --git a/Games/Pac_Man_Game/images/capTop.png b/Games/Pac_Man_Game/images/capTop.png deleted file mode 100644 index 40664e5af2bb1de30b7e615974a484afa6c8e187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VffiSdM9Q{awtbVru2)JmHFfbGW@!(_%%7C_W(%=EXBp zOeXiFO}gmgl&L4dd+?%wOzx-PX>4wE9z2WN&A9-`k2apN el<~_h35KP;r;-cSx^D$Km%-E3&t;ucLK6T20#2X+ diff --git a/Games/Pac_Man_Game/images/pipeConnectorBottom.png b/Games/Pac_Man_Game/images/pipeConnectorBottom.png deleted file mode 100644 index 278cc2893c69ed09fc192baf1e1584b2e17ecb2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfX5Rt`x*cW*Ecwx^T>ESCo8zHnR*V2IrwMj#8xO?zHhs6a!BUqUGp#V?|bId6?w(OP%(IS z{R{c_yR9O(qx04#IoZ6q+LGa-tjQF&UvtxzaOEj6TFWPjMBZ90=%qLHvPYNB+p8R^ z(@$lpxK8_))iTNZsmUZI?`l)0lS_-FJSQ&QE4A=RkY(?Z6PMz81BzD8aSKYx%>VxM z@J8J&`5y1;>_5+V?9{fPUUJby{g>a-|u*sTJ(h{4m<&t;ucLK6TlELh9{ diff --git a/Games/Pac_Man_Game/images/pipeConnectorRight.png b/Games/Pac_Man_Game/images/pipeConnectorRight.png deleted file mode 100644 index a5250366edcd4f0fd6a32812dc91b2e46c457fd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-mSQK*5Dp-y;YjHK^0#=pIEG|6 zzn!&Fut7n9WhwXR4UDU|GoIeSZR*z4EtYc4=XqM+eNm-TyXJonvc10X>io8<`s;rp z{R=1b^_g4}tlL~ArM&iK-Oih`DO+q83HCOy*lcyU5jfRN$tS@>S>eqJFJ(bBgC&9j zWg$x^atKRY;^44eb;+ZJlP8m?3dw=>3_or>n z&U)A|_y2?HrqpI%c5CxLzg|CVxDesUF+(I|0@sB-viQkA`yc$}nDMTn!a022WQ%mvv4FO#p`ZQp5lN diff --git a/Games/Pac_Man_Game/images/pipeCorner1.png b/Games/Pac_Man_Game/images/pipeCorner1.png deleted file mode 100644 index 89214867cf1d5f518b01297354c426c03b9a6a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfZ?Q z88&lou{RZSr=L9gJ7MoTt9wtr9_p_C7hW*?cEB8YM=r5_{7tP1^Ivl)t>9WwY1Xko zYr(Ud3QemTW~DcCtYXTV$BQQ6kooV|$6A*|xf7a}`v2PZU(AN_u*-bSofnO*fX-y_ MboFyt=akR{0MbocP5=M^ diff --git a/Games/Pac_Man_Game/images/pipeCorner2.png b/Games/Pac_Man_Game/images/pipeCorner2.png deleted file mode 100644 index 4b180ede7c8692d2302ee93b877f4d26f31951b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#Vf=mG%fUgSHC@A8!F=PU5(V=|GJXlqWpZ?uN;pq+xfuQ9>Dj!jxV`)SXN&FUdwfb` zruyrc$yot(p#?$WZ@y{vrK+Hylat9k32R@~6ytKBS;c5wH67S4OBrCd+ytb$)Z_H7<8P3^;njlT!*{2fH}SkMal62IO~+lpG1TGgWk;4!MpJ)w!4TFf zHnJ`Oq5+>vP$d4VSJ*R!u~t2wZT#w-C%Z?l1b>)+rBLbE!0CNerCHLp3raZ{1`fJCH{R}9m-Gwm&p0vn&ymsi=Go>ZE9 z+<%76`sca7et!OLaemEm34_n_4hF&zoBo8v^u2vh^yqM|5L=0Civr94TCv9pe2)^A zG0!Aw&yC_45zmhpe>5z&St Wo|?%M-aZ7nhQZU-&t;ucLK6VSv`Rk! diff --git a/Games/Pac_Man_Game/images/pipeHorizontal.png b/Games/Pac_Man_Game/images/pipeHorizontal.png deleted file mode 100644 index 59f73188b9b41a80da48e74e208d60998a7fab26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfYw%j{huo_B~>EXExOQ@YKBmXe)!KtDnm{r-UW| D)Hg;% diff --git a/Games/Pac_Man_Game/images/pipeVertical.png b/Games/Pac_Man_Game/images/pipeVertical.png deleted file mode 100644 index b364f1ea96f0187e1aca202b88086202a2d70de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEX7WqAsj$Z!;#VfFHA(;FC9Z)ZHcf%|L6!-Nwm^W@Y$JZ}7%o48!}c46rDbG2{#_rITC z6_;i3P|pl8D2QWn84{B;=(o-dVDNPHb6Mw<&;$VZG(-dd diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js index 3b363d62b2..878b528efa 100644 --- a/Games/Pac_Man_Game/index.js +++ b/Games/Pac_Man_Game/index.js @@ -18,16 +18,16 @@ document.body.style.overflow = 'hidden'; // Create a class for the player class Boundary { - static width = cellSize; - static height = cellSize; - constructor({position, image}) { // The constructor takes an object with a position property so we can destructure it + static width = 40; + static height = 40; + constructor({position}) { // The constructor takes an object with a position property so we can destructure it this.position = position; // Set the position of the player - this.width = cellSize; - this.height = cellSize; - this.image = image; + this.width = 40; + this.height = 40; } draw() { - c.drawImage(this.image, this.position.x, this.position.y, this.width, this.height); // Draw the boundary + c.fillStyle = 'blue'; + c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player } } @@ -144,69 +144,31 @@ function updateLives() { // Create an array to store the boundaries const map = [ - ['1','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','2'], - ['|','.','.','.','.','.','.','.','.','^','.','.','.','.','.','.','.','.','|'], - ['|','.','b','.','<','>','.','b','.','.','.','b','.','<','>','.','b','.','|'], - ['|','.','.','.','.','.','.','.','.','v','.','.','.','.','.','.','.','.','|'], - ['|','.','b','.','<','-','>','.','<','+','>','.','<','-','>','.','b','.','|'], - ['|','.','.','.','.','.','.','.','.','^','.','.','.','.','.','.','.','.','|'], - ['4','-','-','>','.','<','-','>','.','.','.','<','-','>','.','<','-','-','3'], - [' ',' ',' ',' ','.','.','.','.','.','b','.','.','.','.','.',' ',' ',' ',' '], - ['1','-','-','>','.','<','-','>','.','.','.','<','-','>','.','<','-','-','2'], - ['|','.','.','.','.','.','.','.','.','v','.','.','.','.','.','.','.','.','|'], - ['|','.','b','.','<','-','>','.','<','+','>','.','<','-','>','.','b','.','|'], - ['|','.','.','.','.','.','.','.','.','^','.','.','.','.','.','.','.','.','|'], - ['|','.','b','.','<','>','.','b','.','.','.','b','.','<','>','.','b','.','|'], - ['|','.','.','.','.','.','.','.','.','v','.','.','.','.','.','.','.','.','|'], - ['4','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','3'], + ['-','-','-','-','-','-','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-',' ','-',' ','-',' ','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-',' ','-',' ','-',' ','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-','-','-','-','-','-','-'] ] -function createImage(src) { - const image = new Image() - image.src = src - return image -} - -function initializeGame() { - pellets.length = 0; - boundaries.length = 0; - ghosts.length = 0; - pacman.position = { x: Boundary.width + Boundary.width / 2, y: Boundary.height + Boundary.height / 2 }; - pacman.velocity = { x: 0, y: 0 }; - scoreValue = 0; - score.innerHTML = scoreValue; - lives = 3; - updateLives(); - - const symbolToBoundary = { - '-': './images/pipeHorizontal.png', '|': './images/pipeVertical.png', '1': './images/pipeCorner1.png', - '2': './images/pipeCorner2.png', '3': './images/pipeCorner3.png', '4': './images/pipeCorner4.png', - 'b': './images/block.png', '<': './images/capLeft.png', '>': './images/capRight.png', - '^': './images/capBottom.png', 'v': './images/capTop.png', '0': './images/pipeConnectorBottom.png', - 'x': './images/pipeConnectorTop.png', '+': './images/pipeCross.png' - }; - - map.forEach((row, i) => { - row.forEach((symbol, j) => { - if (symbol === '.') { - pellets.push(new Pellet({ position: { x: Boundary.width * j + Boundary.width / 2, y: Boundary.height * i + Boundary.height / 2 } })); - } else if (symbolToBoundary[symbol]) { - boundaries.push(new Boundary({ position: { x: Boundary.width * j, y: Boundary.height * i }, image: createImage(symbolToBoundary[symbol]) })); - } - }); - }); - - const ghostConfigs = [ - { x: 9, y: 6, velocity: 1.2, color: 'red' }, - { x: 8, y: 7, velocity: 1.5, color: 'green' }, - { x: 10, y: 7, velocity: 1.7, color: 'pink' } - ]; - - ghostConfigs.forEach(({ x, y, velocity, color }, index) => { - ghosts.push(new Ghost({ position: { x: Boundary.width * x + Boundary.width / 2, y: Boundary.height * y + Boundary.height / 2 }, velocity: { x: velocity, y: 0 }, color })); - setTimeout(() => { ghosts[index].startMoving = true; }, [5000, 15000, 40000][index]); - }); -} +map.forEach((row, i) => { + row.forEach((symbol, j) => { + switch (symbol) { + case '-': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + } + }) + ) + break + } + }) +}) function circleCollidesWithRectangle({circle, rectangle}) { const padding = Boundary.width / 2 - circle.radius - 1 From ac721c71ca51fb1c91d50f1376f3b12d7a98388e Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 02:22:38 +0100 Subject: [PATCH 19/48] old code Back to old code --- Games/Pac_Man_Game/index.html | 28 ++- Games/Pac_Man_Game/index.js | 387 ---------------------------------- Games/Pac_Man_Game/script.js | 381 +++++++++++++++------------------ Games/Pac_Man_Game/style.css | 68 +++++- 4 files changed, 240 insertions(+), 624 deletions(-) delete mode 100644 Games/Pac_Man_Game/index.js diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index a8061e4aa6..95e0ae2455 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -1,23 +1,29 @@ + Pac-Man Game + + -
-

- Score: 0 -

-
- - - -
+ +
+ + +
Score: 0
+ +
+ Lives: + + +
- - + + + diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js deleted file mode 100644 index 878b528efa..0000000000 --- a/Games/Pac_Man_Game/index.js +++ /dev/null @@ -1,387 +0,0 @@ -const canvas = document.querySelector('canvas'); // Get the canvas element -const c = canvas.getContext('2d'); // Get the context of the canvas - -const score = document.querySelector('#score'); // Get the score element - -// Define the size of each cell in the map -const cellSize = 40; - -// Calculate the canvas size based on the map dimensions -const mapWidth = 19; // Number of columns in the map -const mapHeight = 15; // Number of rows in the map - -canvas.width = mapWidth * cellSize; // Set the width of the canvas based on the map width -canvas.height = mapHeight * cellSize; // Set the height of the canvas based on the map height - -// Prevent scrollbars -document.body.style.overflow = 'hidden'; - -// Create a class for the player -class Boundary { - static width = 40; - static height = 40; - constructor({position}) { // The constructor takes an object with a position property so we can destructure it - this.position = position; // Set the position of the player - this.width = 40; - this.height = 40; - } - draw() { - c.fillStyle = 'blue'; - c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player - } -} - -class Pacman { - constructor({position, velocity}) { - this.position = position; - this.velocity = velocity; - this.radius = 15; - this.radians = 0.75; // Start with the mouth closed - this.openRate = 0.05; // How fast the mouth opens and closes - this.rotation = 0; // Rotation of Pacman starts at 0 - } - draw() { - c.save(); // Save the current state of the canvas - c.translate(this.position.x, this.position.y); // Translate the canvas to the position of Pacman so we can rotate around him - c.rotate(this.rotation); // Rotation of Pacman so the mouth opens in the right direction - c.translate(-this.position.x, -this.position.y); // Translate the canvas back to the original position - c.fillStyle = 'yellow'; // Set the fill color to yellow - c.beginPath(); // Start a new path - c.arc(this.position.x, this.position.y, this.radius, this.radians, Math.PI * 2 - this.radians); // Draw the mouth of Pacman with the current radians. Math.PI * 2 is a full circle - c.lineTo(this.position.x, this.position.y); // Draw a line to the center of Pacman to close the mouth - c.fill(); // Fill the path with the current fill color - c.closePath(); // Close the path so we can start a new one - c.restore(); // Restore the canvas to the previous state - } - update() { - this.draw(); // Draw Pacman - this.position.x += this.velocity.x; // Move Pacman on the x-axis - this.position.y += this.velocity.y; // Move Pacman on the y-axis - - // Calculate the rotation of Pacman based on his velocity - if (this.velocity.x !== 0 || this.velocity.y !== 0) { // Check if Pacman is moving - this.rotation = Math.atan2(this.velocity.y, this.velocity.x); // Rotate Pacman based on his velocity - } - - // Open and close the mouth of Pacman - if (this.radians < 0 || this.radians > 0.75) this.openRate = -this.openRate; // Change the open rate if the mouth is fully open or closed - this.radians += this.openRate; // Change the radians of Pacman - } -} - -class Ghost { - constructor({position, velocity, color = 'pink'}) { - this.position = position; - this.velocity = velocity; - this.radius = 15; - this.color = color; - this.startMoving = false; - this.originalSpeed = Math.hypot(velocity.x, velocity.y); // Bewaar de oorspronkelijke snelheid - } - draw() { - c.fillStyle = this.color; - c.beginPath(); - c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2); - c.fill(); - c.closePath(); - } - update() { - this.draw(); - if (this.startMoving) { - this.position.x += this.velocity.x; - this.position.y += this.velocity.y; - } - } -} - -class Pellet { - constructor({position}) { - this.position = position; - this.radius = 3; - } - draw() { - c.fillStyle = 'white'; - c.beginPath() - c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) - c.fill() - c.closePath() - } -} - -const pellets = [] -const boundaries = [] -const ghosts = [] - -const pacman = new Pacman({ - position: { - x: Boundary.width + Boundary.width / 2, - y: Boundary.height + Boundary.height / 2 - }, - velocity: { - x: 0, - y: 0 - } -}) - -const keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].reduce((acc, key) => { - acc[key] = { pressed: false }; - return acc; -}, {}); - -let lastKey = '' -let scoreValue = 0 -let lives = 3; - -function updateLives() { - const livesContainer = document.getElementById('livesContainer'); - livesContainer.innerHTML = ''; - for (let i = 0; i < lives; i++) { - const life = document.createElement('span'); - life.classList.add('life'); - livesContainer.appendChild(life); - } -} - -// Create an array to store the boundaries -const map = [ - ['-','-','-','-','-','-','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-',' ','-',' ','-',' ','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-',' ','-',' ','-',' ','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-','-','-','-','-','-','-'] -] - -map.forEach((row, i) => { - row.forEach((symbol, j) => { - switch (symbol) { - case '-': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - } - }) - ) - break - } - }) -}) - -function circleCollidesWithRectangle({circle, rectangle}) { - const padding = Boundary.width / 2 - circle.radius - 1 - return ( - circle.position.y - circle.radius + circle.velocity.y <= rectangle.position.y + rectangle.height + padding && - circle.position.x + circle.radius + circle.velocity.x >= rectangle.position.x - padding && - circle.position.y + circle.radius + circle.velocity.y >= rectangle.position.y - padding && - circle.position.x - circle.radius + circle.velocity.x <= rectangle.position.x + rectangle.width + padding - ) -} - -function animate() { - requestAnimationFrame(animate) - c.clearRect(0, 0, canvas.width, canvas.height) - - if (keys.ArrowUp.pressed && lastKey === 'ArrowUp') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: 0, - y: -1.5 // Adjusted speed - }}, - rectangle: boundary - }) - ) { - pacman.velocity.y = 0 - break - } else { - pacman.velocity.y = -1.5 // Adjusted speed - } - } - } else if (keys.ArrowLeft.pressed && lastKey === 'ArrowLeft') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: -1.5, // Adjusted speed - y: 0 - }}, - rectangle: boundary - }) - ) { - pacman.velocity.x = 0 - break - } else { - pacman.velocity.x = -1.5 // Adjusted speed - } - } - } else if (keys.ArrowDown.pressed && lastKey === 'ArrowDown') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: 0, - y: 1.5 // Adjusted speed - }}, - rectangle: boundary - }) - ) { - pacman.velocity.y = 0 - break - } else { - pacman.velocity.y = 1.5 // Adjusted speed - } - } - } else if (keys.ArrowRight.pressed && lastKey === 'ArrowRight') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: 1.5, // Adjusted speed - y: 0 - }}, - rectangle: boundary - }) - ) { - pacman.velocity.x = 0 - break - } else { - pacman.velocity.x = 1.5 // Adjusted speed - } - } - } - - // Check for portal collisions - if (pacman.position.x < 0) { - pacman.position.x = canvas.width - pacman.radius; - } else if (pacman.position.x > canvas.width) { - pacman.position.x = pacman.radius; - } - - // Check for pellet collisions - pellets.forEach((pellet, i) => { // Loop through the pellets - pellet.draw() // Draw the pellet - - // Check if the pellet collides with the player - if (Math.hypot(pellet.position.x - pacman.position.x, // Calculate the x and y distance between the pellet and the pacman - pellet.position.y - pacman.position.y - ) < pellet.radius + pacman.radius // Check if the distance is less than what it would be if the two circles were colliding - ) { - pellets.splice(i, 1) // Remove the pellet from the array when it collides with the pacman - scoreValue += 10 // Increase the score by 10 - score.innerHTML = scoreValue // Update the score element - - // Check if all pellets are collected - if (pellets.length === 0) { - setTimeout(() => { - alert('Congratulations! You have won!'); - window.location.reload(); // Refresh the page instead of initializing the game - }, 100); - } - } - }) - boundaries.forEach((boundary) => { - boundary.draw() - - if ( - circleCollidesWithRectangle({ - circle: pacman, - rectangle: boundary - }) - ) { - pacman.velocity.x = 0 - pacman.velocity.y = 0 - } -}) -pacman.update() - -ghosts.forEach((ghost) => { - ghost.update(); - - // Check for portal collisions for ghosts - if (ghost.position.x < 0) { - ghost.position.x = canvas.width - ghost.radius; - } else if (ghost.position.x > canvas.width) { - ghost.position.x = ghost.radius; - } - - let collision = false; - boundaries.forEach(boundary => { - if (circleCollidesWithRectangle({ - circle: {...ghost, velocity: { - x: ghost.velocity.x, - y: ghost.velocity.y - }}, - rectangle: boundary - })) { - collision = true; - } - }); - - if (collision) { - // Stop the ghost and set a random new direction, but use original speed - ghost.velocity.x = 0; - ghost.velocity.y = 0; - - // Possible directions to move - const directions = [ - { direction: 'right', x: ghost.originalSpeed, y: 0 }, - { direction: 'left', x: -ghost.originalSpeed, y: 0 }, - { direction: 'up', x: 0, y: -ghost.originalSpeed }, - { direction: 'down', x: 0, y: ghost.originalSpeed } - ]; - - // Function to check if a move is valid (not blocked by a boundary) - const isMoveValid = (newX, newY) => { - let valid = true; - boundaries.forEach(boundary => { - if (circleCollidesWithRectangle({ - circle: { ...ghost, velocity: { x: newX, y: newY } }, - rectangle: boundary - })) { - valid = false; - } - }); - return valid; - }; - - // Filter out invalid moves - const validDirections = directions.filter(({x, y}) => isMoveValid(x, y)); - - // If there are valid directions, pick one - if (validDirections.length > 0) { - const randomDirection = validDirections[Math.floor(Math.random() * validDirections.length)]; - ghost.velocity = { x: randomDirection.x, y: randomDirection.y }; - } - } - - // Check for collision with Pac-Man - if (Math.hypot(ghost.position.x - pacman.position.x, ghost.position.y - pacman.position.y) < ghost.radius + pacman.radius) { - lives -= 1; - updateLives(); - if (lives === 0) { - alert('Game Over!'); - window.location.reload(); // Refresh the page instead of initializing the game - } else { - // Reset Pac-Man position - pacman.position = { - x: Boundary.width + Boundary.width / 2, - y: Boundary.height + Boundary.height / 2 - }; - pacman.velocity = { - x: 0, - y: 0 - }; - } - } -}) -} - -initializeGame(); -animate() - -window.addEventListener('keydown', ({key}) => keys[key] && (keys[key].pressed = true, lastKey = key)); -window.addEventListener('keyup', ({key}) => keys[key] && (keys[key].pressed = false)); diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 25d4184bde..ab9c5ff28e 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -36,281 +36,230 @@ document.addEventListener('DOMContentLoaded', () => { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ]; - // Create the gameboard + // Create the grid layout.forEach((cell, index) => { - const div = document.createElement('div'); // Create a new div element for each cell - div.classList.add('cell'); // Add the 'cell' class to the div + const div = document.createElement('div'); + div.classList.add('cell'); - // Add wall class if the cell is a wall, pac-dot class if the cell contains a pac-dot if (cell === 1) { - div.classList.add('wall'); // Add the 'wall' class to the div if the cell represents a wall + div.classList.add('wall'); } else if (cell === 2) { - div.classList.add('pac-dot'); // Add the 'pac-dot' class to the div if the cell contains a pac-dot - totalPacDots++; // Increment totalPacDots for each pac-dot found + div.classList.add('pac-dot'); + totalPacDots++; } - gameBoard.appendChild(div); // Add the div to the game board element in the HTML - grid.push(div); // Add the div element to the grid array for tracking + gameBoard.appendChild(div); + grid.push(div); }); - // Place Pac-Man - let pacmanCurrentIndex = 21; // Set Pac-Man's initial position to index 21 - grid[pacmanCurrentIndex].classList.add('pacman'); // Add 'pacman' class to the cell at Pac-Man's initial position + let pacmanCurrentIndex = 21; + grid[pacmanCurrentIndex].classList.add('pacman'); - // Remove pac-dot at initial position if present if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { - grid[pacmanCurrentIndex].classList.remove('pac-dot'); // Remove 'pac-dot' class if present at Pac-Man's initial position - score += 10; // Increase the score by 10 points - document.getElementById('scoreValue').textContent = score; // Update the score display + grid[pacmanCurrentIndex].classList.remove('pac-dot'); + score += 10; + document.getElementById('scoreValue').textContent = score; } - // Function to move Pac-Man const movePacman = () => { if (!gameOver && direction !== null) { - let newIndex = pacmanCurrentIndex; // Initialize newIndex with the current Pac-Man index + let newIndex = pacmanCurrentIndex; - // Move Pac-Man based on the current direction switch (direction) { - case 'ArrowUp': // Move Pac-Man up if the direction is 'ArrowUp' - // Check if moving up is possible and there is no wall in the way + case 'ArrowUp': if (pacmanCurrentIndex - cols >= 0 && !grid[pacmanCurrentIndex - cols].classList.contains('wall')) { - newIndex -= cols; // Move Pac-Man up by one row + newIndex -= cols; } break; - case 'ArrowDown': // Move Pac-Man down if the direction is 'ArrowDown' - // Check if moving down is possible and there is no wall in the way + case 'ArrowDown': if (pacmanCurrentIndex + cols < cols * rows && !grid[pacmanCurrentIndex + cols].classList.contains('wall')) { - newIndex += cols; // Move Pac-Man down by one row + newIndex += cols; } break; - case 'ArrowLeft': // Move Pac-Man left if the direction is 'ArrowLeft' - // Check if moving left is possible and there is no wall in the way + case 'ArrowLeft': if (pacmanCurrentIndex % cols !== 0 && !grid[pacmanCurrentIndex - 1].classList.contains('wall')) { - newIndex -= 1; // Move Pac-Man left by one column + newIndex -= 1; } break; - case 'ArrowRight': // Move Pac-Man right if the direction is 'ArrowRight' - // Check if moving right is possible and there is no wall in the way + case 'ArrowRight': if (pacmanCurrentIndex % cols < cols - 1 && !grid[pacmanCurrentIndex + 1].classList.contains('wall')) { - newIndex += 1; // Move Pac-Man right by one column + newIndex += 1; } break; } - // Check if Pac-Man's position has changed if (newIndex !== pacmanCurrentIndex) { - // Remove Pac-Man from the current position grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = newIndex; // Update Pac-Man's current index - grid[pacmanCurrentIndex].classList.add('pacman'); // Add Pac-Man to the new position + pacmanCurrentIndex = newIndex; + grid[pacmanCurrentIndex].classList.add('pacman'); - // Check if Pac-Man has eaten a pac-dot if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { - grid[pacmanCurrentIndex].classList.remove('pac-dot'); // Remove the pac-dot - score += 10; // Increase the score - document.getElementById('scoreValue').textContent = score; // Update the score display + grid[pacmanCurrentIndex].classList.remove('pac-dot'); + score += 10; + document.getElementById('scoreValue').textContent = score; console.log('Score:', score); - // Call checkForWin function after updating score checkForWin(); } - - // Check for collision with ghosts after Pac-Man moves - checkCollision(); // Check collision after each move + + checkCollision(); } - - // Check if Pac-Man's position after movement ends the game + if (lives === 0) { gameOver = true; - endGame(); // Game over + endGame(); } } }; - // Function to check for win condition const checkForWin = () => { - if (score === 2030) { // Total score won - gameOver = true; // Set game over flag - clearInterval(gameLoop); // Stop the game loop - - // Stop ghost movements + if (score === 2030) { + gameOver = true; + clearInterval(gameLoop); + ghost1.stop(); ghost2.stop(); - - // Display win message after a short delay + setTimeout(() => { alert("Congratulations! You won!"); }, 500); + } + }; + let direction = null; + document.addEventListener('keydown', (event) => { + const key = event.key; + if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) { + direction = key; } + }); + + const endGame = () => { + clearInterval(gameLoop); + + ghost1.stop(); + ghost2.stop(); + + setTimeout(() => { + alert("Game over! You lost!"); + }, 500); }; - - // Check for keydown events to set Pac-Man's direction - let direction = null; // Initialize direction as null - document.addEventListener('keydown', (event) => { - const key = event.key; - if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) { - direction = key; // Set Pac-Man's direction based on the pressed key - } - }); - // Initialize lives using a for loop - for (let lives = 3; lives > 0; lives--) { - } - - // Function to end the game - const endGame = () => { - clearInterval(gameLoop); // Stop the game loop - - // Stop ghost movements - ghost1.stop(); - ghost2.stop(); - - // Display game over message after a short delay - setTimeout(() => { - alert("Game over! You lost!"); - }, 500); - }; - - // Game loop - gameLoop = setInterval(movePacman, 200); // Move Pac-Man every 200ms - - // Ghost - class Ghost { - constructor(startIndex, color) { - // Initialize Ghost - this.currentIndex = startIndex; // Set the current index of the ghost - this.color = color; // Set the color of the ghost - this.timerId = null; // Timer ID for ghost movement interval - } - - moveGhost() { - const directions = [-1, +1, -cols, +cols]; // Possible directions for the ghost - - // Function to calculate distance between two indices on the grid - const distanceToPacman = (ghostIndex, pacmanIndex) => { - const ghostRow = Math.floor(ghostIndex / cols); - const ghostCol = ghostIndex % cols; - const pacmanRow = Math.floor(pacmanIndex / cols); - const pacmanCol = pacmanIndex % cols; - return Math.abs(ghostRow - pacmanRow) + Math.abs(ghostCol - pacmanCol); - }; - - // Function to choose the best direction towards Pac-Man - const chooseDirection = () => { - // Get Pac-Man's current index - const pacmanIndex = grid.findIndex(cell => cell.classList.contains('pacman')); - - // Calculate distances for each direction and filter out invalid moves - const validDirections = directions.filter(direction => { - const nextMove = this.currentIndex + direction; - return !grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost'); - }); - - // Sort directions by distance to Pac-Man - validDirections.sort((dir1, dir2) => { - const nextMove1 = this.currentIndex + dir1; - const nextMove2 = this.currentIndex + dir2; - return distanceToPacman(nextMove1, pacmanIndex) - distanceToPacman(nextMove2, pacmanIndex); - }); - - // Return the closest direction if available - return validDirections.length > 0 ? validDirections[0] : null; - }; - - let direction = chooseDirection(); // Initial direction - - // Move the ghost at regular intervals - this.timerId = setInterval(() => { - // Logic for ghost movement - if (!gameOver && direction !== null) { - const nextMove = this.currentIndex + direction; // Calculate the next potential position for the ghost - - // Check if next move isn't a wall or another ghost - if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { - // Remove ghost from the current position - grid[this.currentIndex].classList.remove('ghost', this.color); - // Move the ghost to the next position - this.currentIndex = nextMove; - // Place the ghost on the new position - grid[this.currentIndex].classList.add('ghost', this.color); + gameLoop = setInterval(movePacman, 200); + + class Ghost { + constructor(startIndex, color) { + this.currentIndex = startIndex; + this.color = color; + this.timerId = null; + } + + moveGhost() { + const directions = [-1, +1, -cols, +cols]; + + const distanceToPacman = (ghostIndex, pacmanIndex) => { + const ghostRow = Math.floor(ghostIndex / cols); + const ghostCol = ghostIndex % cols; + const pacmanRow = Math.floor(pacmanIndex / cols); + const pacmanCol = pacmanIndex % cols; + return Math.abs(ghostRow - pacmanRow) + Math.abs(ghostCol - pacmanCol); + }; + + const chooseDirection = () => { + const pacmanIndex = grid.findIndex(cell => cell.classList.contains('pacman')); + + const validDirections = directions.filter(direction => { + const nextMove = this.currentIndex + direction; + return !grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost'); + }); + + validDirections.sort((dir1, dir2) => { + const nextMove1 = this.currentIndex + dir1; + const nextMove2 = this.currentIndex + dir2; + return distanceToPacman(nextMove1, pacmanIndex) - distanceToPacman(nextMove2, pacmanIndex); + }); + + return validDirections.length > 0 ? validDirections[0] : null; + }; + + let direction = chooseDirection(); + + this.timerId = setInterval(() => { + if (!gameOver && direction !== null) { + const nextMove = this.currentIndex + direction; + + if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { + grid[this.currentIndex].classList.remove('ghost', this.color); + this.currentIndex = nextMove; + grid[this.currentIndex].classList.add('ghost', this.color); + } else { + direction = chooseDirection(); + } + + if (this.currentIndex === pacmanCurrentIndex) { + lives--; + updateLivesDisplay(); + + if (lives === 0) { + gameOver = true; + endGame(); } else { - // Choose a new direction if the ghost can't move - direction = chooseDirection(); - } - - // Check if the ghost touched Pac-Man - if (this.currentIndex === pacmanCurrentIndex) { - lives--; // Decrease lives - document.getElementById('livesValue').textContent = lives; // Update lives display - - if (lives === 0) { - gameOver = true; - endGame(); // Game over - } else { - // Reset Pac-Man's position - grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = 21; - grid[pacmanCurrentIndex].classList.add('pacman'); - } + grid[pacmanCurrentIndex].classList.remove('pacman'); + pacmanCurrentIndex = 21; + grid[pacmanCurrentIndex].classList.add('pacman'); } } - }, 200); // Move Ghost every 200ms - } - - stop() { - clearInterval(this.timerId); // Stop the ghost movement - } - } - - // Create ghosts - const ghost1 = new Ghost(209, 'red'); // Place the first ghost - const ghost2 = new Ghost(229, 'blue'); // Place the second ghost - - // Start ghost movement - ghost1.moveGhost(); - ghost2.moveGhost(); - - // Define the lifeIcons array globally - const lifeIcons = [ - document.getElementById('life1'), - document.getElementById('life2'), - ]; - - const updateLivesDisplay = () => { - console.log('Updating lives display. Current lives:', lives); - for (let i = 0; i < lifeIcons.length; i++) { - if (i < lives) { - lifeIcons[i].style.display = 'inline-block'; // Display the life icon - } else { - lifeIcons[i].style.display = 'none'; // Hide the life icon } - console.log(`Life icon ${i + 1}: display is ${lifeIcons[i].style.display}`); + }, 200); + } + + stop() { + clearInterval(this.timerId); + } + } + + const ghost1 = new Ghost(209, 'red'); + const ghost2 = new Ghost(229, 'blue'); + + ghost1.moveGhost(); + ghost2.moveGhost(); + + const lifeIcons = [ + document.getElementById('life1'), + document.getElementById('life2'), + document.getElementById('life3') + ]; + + const updateLivesDisplay = () => { + console.log('Updating lives display. Current lives:', lives); + for (let i = 0; i < lifeIcons.length; i++) { + if (i < lives) { + lifeIcons[i].style.display = 'inline-block'; // Display the life icon + } else { + lifeIcons[i].style.display = 'none'; // Hide the life icon } - }; - - const checkCollision = () => { - if (grid[pacmanCurrentIndex].classList.contains('ghost')) { - lives--; // Decrease lives - updateLivesDisplay(); // Update visual display of lives - - // Reset Pac-Man's position - grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = 21; - grid[pacmanCurrentIndex].classList.add('pacman'); - - // Update lives count in the HTML element - document.getElementById('livesValue').textContent = lives; - - // Check if there are no lives left - if (lives === 0) { - gameOver = true; - endGame(); // Game over - } + console.log(`Life icon ${i + 1}: display is ${lifeIcons[i].style.display}`); + } + }; + + const checkCollision = () => { + if (grid[pacmanCurrentIndex].classList.contains('ghost')) { + lives--; // Decrease lives + updateLivesDisplay(); // Update visual display of lives + + // Reset Pac-Man's position + grid[pacmanCurrentIndex].classList.remove('pacman'); + pacmanCurrentIndex = 21; + grid[pacmanCurrentIndex].classList.add('pacman'); + + // Check if there are no lives left + if (lives === 0) { + gameOver = true; + endGame(); // Game over } - }; - - // Check for collision on Pac-Man movement - setInterval(checkCollision, 100); // Check collision every 100ms - }); + } + }; + // Check for collision on Pac-Man movement + setInterval(checkCollision, 100); // Check collision every 100ms +}); \ No newline at end of file diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 1037d8387d..4e038cf136 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -1,23 +1,71 @@ body { /* Center align the content vertically and horizontally */ display: flex; + flex-direction: column; + align-items: center; justify-content: center; align-items: center; /* Set the height of the body to 100% of the viewport height */ height: 100vh; /* Remove margin to prevent unwanted spacing */ margin: 0; - /* Set background color to black */ background-color: black; + color: white; + font-family: Arial, sans-serif; } -.score-container { - text-align: center; - color: white; +#gameBoard { + display: grid; + grid-template-columns: repeat(20, 20px); + grid-template-rows: repeat(20, 20px); + gap: 1px; + background-color: black; } -p { - font-size: 20px; +.cell { + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; +} + +.wall { + background-color: blue; +} + +.pac-dot { + width: 5px; /* Adjusted size */ + height: 5px; /* Adjusted size */ + background-color: white; + border-radius: 50%; + margin: auto; /* Center the dot within the cell */ +} + +.pacman { + background-color: yellow; + border-radius: 50%; + width: 20px; + height: 20px; +} + +.ghost { + width: 20px; + height: 20px; + border-radius: 50%; + position: relative; +} + +.ghost.red { + background-color: red; +} + +.ghost.blue { + background-color: green; +} + +#score { + margin-top: 20px; } #livesContainer { @@ -25,10 +73,10 @@ p { } .life { + display: inline-block; width: 20px; height: 20px; - margin: 0 5px; - border-radius: 50%; /* Create a circle */ - background-color: yellow; /* Yellow color for Pac-Man lives */ - display: inline-block; + background-color: yellow; + border-radius: 50%; + margin-left: 5px; } \ No newline at end of file From 5ec719f411ef5e45aaa1102b69c974f97bdb456a Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 11:21:55 +0100 Subject: [PATCH 20/48] Ghost delay Ghosts have a delay before they start moving + old commit of readme because I went to an older commit) --- Games/Pac_Man_Game/script.js | 14 ++++++++++++-- README.md | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index ab9c5ff28e..afa4afaec6 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -152,6 +152,11 @@ document.addEventListener('DOMContentLoaded', () => { this.currentIndex = startIndex; this.color = color; this.timerId = null; + this.draw(); // Draw the ghost when it is created + } + + draw() { + grid[this.currentIndex].classList.add('ghost', this.color); } moveGhost() { @@ -221,8 +226,13 @@ document.addEventListener('DOMContentLoaded', () => { const ghost1 = new Ghost(209, 'red'); const ghost2 = new Ghost(229, 'blue'); - ghost1.moveGhost(); - ghost2.moveGhost(); + setTimeout(() => { + ghost1.moveGhost(); + }, 5000); // Start moving ghost1 after 5 seconds + + setTimeout(() => { + ghost2.moveGhost(); + }, 15000); // Start moving ghost2 after 15 seconds const lifeIcons = [ document.getElementById('life1'), diff --git a/README.md b/README.md index 7c75d9bc0b..fcf173f6ac 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ This repository also provides one such platforms where contributers come over an | Game | Game | Game | Game | Game | +<<<<<<< HEAD | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- | --- | @@ -115,6 +116,10 @@ This repository also provides one such platforms where contributers come over an | [Bulls_And_Cows_New](https://github.com/kunjgit/GameZone/tree/main/Games/Bulls_And_Cows_New) | [Find The Number](https://github.com/kunjgit/GameZone/tree/main/Games/Find_the_Number) | [Guess_That_Pokemon](https://github.com/kunjgit/GameZone/tree/main/Games/Guess_That_Pokemon) +======= +| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- | [Pac_Man]() +| [Master Typing](https://github.com/kunjgit/GameZone/tree/main/Games/Master_Typing) | [Treasure Hunt](https://github.com/Antiquely3059/GameZone/tree/main/Games/Treasure%20Hunt) | [Virtual Pet](https://github.com/Antiquely3059/GameZone/tree/main/Games/Virtual_Pet) | [MazeRunner](https://github.com/kunjgit/GameZone/tree/main/Games/MazeRunner) | [Ping_Pong_Singleplayer](https://github.com/kunjgit/GameZone/tree/main/Games/Ping_Pong_Singleplayer) | | +>>>>>>> parent of 772df1c4 (Added link) | [Tilting Maze](https://github.com/kunjgit/GameZone/tree/main/Games/Tilting_Maze) | [Simon Game Challenge](https://github.com/kunjgit/GameZone/tree/main/Games/Simon_Game_Challenge) | [Snake Game](https://github.com/kunjgit/GameZone/tree/main/Games/Snake_Game) | [Dino Runner Game](https://github.com/kunjgit/GameZone/tree/main/Games/Dino_Runner_Game) | | [Whack a Mole](https://github.com/kunjgit/GameZone/tree/main/Games/Whack_a_Mole) | [Doraemon Jump](https://github.com/kunjgit/GameZone/tree/main/Games/Doraemon_Jump) | [Black Jack](https://github.com/kunjgit/GameZone/tree/main/Games/Black_Jack) | [Memory Game](https://github.com/kunjgit/GameZone/tree/main/Games/Memory_Game) | [Word Guessing Game](https://github.com/kunjgit/GameZone/tree/main/Games/Word_Guessing_Game) | [Ludo Game](https://github.com/kunjgit/GameZone/tree/main/Games/Ludo_Game) | [Piano Game](https://github.com/kunjgit/GameZone/tree/main/Games/Piano) | [Atari Breakout](https://github.com/kunjgit/GameZone/tree/main/Games/Atari_Breakout) | [Dinosaur Game](https://github.com/kunjgit/GameZone/tree/main/Games/Chrome_Dinosaur_Game) | [Guess The Colour by RGB Game](https://github.com/kunjgit/GameZone/tree/main/Games/Colour_Guessing_Game) | From 9a98d062a5464f38b60956075387ca7b3b1f0273 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 15:59:11 +0100 Subject: [PATCH 21/48] Power pellets Added power pellets --- Games/Pac_Man_Game/script.js | 178 +++++++++++++++++++++++++++-------- Games/Pac_Man_Game/style.css | 9 ++ 2 files changed, 147 insertions(+), 40 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index afa4afaec6..ec5fe3b19f 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -1,4 +1,4 @@ -document.addEventListener('DOMContentLoaded', () => { +document.addEventListener('DOMContentLoaded', () => { // Get the game board element const gameBoard = document.getElementById('gameBoard'); @@ -11,8 +11,10 @@ document.addEventListener('DOMContentLoaded', () => { let totalPacDots = 0; // Total number of pac-dots in the game let gameOver = false; // Flag to track game over state let gameLoop; // Variable to hold game loop interval + let powerPelletActive = false; // Flag to track power pellet state + let powerPelletTimer; // Timer for power pellet effect - // Level layout (0 = empty, 1 = wall, 2 = pac-dot) + // Level layout (0 = empty, 1 = wall, 2 = pac-dot, 3 = power-pellet) const layout = [ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, @@ -46,6 +48,8 @@ document.addEventListener('DOMContentLoaded', () => { } else if (cell === 2) { div.classList.add('pac-dot'); totalPacDots++; + } else if (cell === 3) { + div.classList.add('power-pellet'); } gameBoard.appendChild(div); @@ -92,6 +96,7 @@ document.addEventListener('DOMContentLoaded', () => { grid[pacmanCurrentIndex].classList.remove('pacman'); pacmanCurrentIndex = newIndex; grid[pacmanCurrentIndex].classList.add('pacman'); + if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { grid[pacmanCurrentIndex].classList.remove('pac-dot'); @@ -100,6 +105,13 @@ document.addEventListener('DOMContentLoaded', () => { console.log('Score:', score); checkForWin(); + } else if (grid[pacmanCurrentIndex].classList.contains('power-pellet')) { + grid[pacmanCurrentIndex].classList.remove('power-pellet'); + score += 50; + document.getElementById('scoreValue').textContent = score; + console.log('Score:', score); + + activatePowerPellet(); } checkCollision(); @@ -112,8 +124,19 @@ document.addEventListener('DOMContentLoaded', () => { } }; + const activatePowerPellet = () => { + powerPelletActive = true; + clearTimeout(powerPelletTimer); + powerPelletTimer = setTimeout(() => { + powerPelletActive = false; + ghosts.forEach(ghost => ghost.unscare()); + }, 10000); // Power pellet effect lasts for 10 seconds + + ghosts.forEach(ghost => ghost.scare()); + }; + const checkForWin = () => { - if (score === 2030) { + if (score === totalPacDots * 10 + 50) { // Adjusted for power-pellet score gameOver = true; clearInterval(gameLoop); @@ -152,16 +175,47 @@ document.addEventListener('DOMContentLoaded', () => { this.currentIndex = startIndex; this.color = color; this.timerId = null; - this.draw(); // Draw the ghost when it is created + this.originalSpeed = 200; // Original speed + this.currentSpeed = this.originalSpeed; // Current speed + this.scared = false; + this.draw(); // Draw the ghost on the grid } - + draw() { grid[this.currentIndex].classList.add('ghost', this.color); } - + + scare() { + this.scared = true; + grid[this.currentIndex].classList.add('scared'); + this.currentSpeed = 400; // Slow down the ghost + this.updateAppearance(); + this.restartMovement(); + } + + unscare() { + this.scared = false; + grid[this.currentIndex].classList.remove('scared'); + this.currentSpeed = this.originalSpeed; + this.updateAppearance(); + this.restartMovement(); + } + + updateAppearance() { + if (this.scared) { + grid[this.currentIndex].classList.add('scared-ghost'); // Add the class for the blue ghost + } else { + grid[this.currentIndex].classList.remove('scared-ghost'); // De + } + } + + restartMovement() { + clearInterval(this.timerId); // Stop de huidige beweging + this.moveGhost(); // Start de beweging opnieuw met de nieuwe snelheid + } + moveGhost() { const directions = [-1, +1, -cols, +cols]; - const distanceToPacman = (ghostIndex, pacmanIndex) => { const ghostRow = Math.floor(ghostIndex / cols); const ghostCol = ghostIndex % cols; @@ -169,71 +223,81 @@ document.addEventListener('DOMContentLoaded', () => { const pacmanCol = pacmanIndex % cols; return Math.abs(ghostRow - pacmanRow) + Math.abs(ghostCol - pacmanCol); }; - + const chooseDirection = () => { const pacmanIndex = grid.findIndex(cell => cell.classList.contains('pacman')); - const validDirections = directions.filter(direction => { const nextMove = this.currentIndex + direction; return !grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost'); }); - + validDirections.sort((dir1, dir2) => { const nextMove1 = this.currentIndex + dir1; const nextMove2 = this.currentIndex + dir2; return distanceToPacman(nextMove1, pacmanIndex) - distanceToPacman(nextMove2, pacmanIndex); }); - + return validDirections.length > 0 ? validDirections[0] : null; }; - + let direction = chooseDirection(); - + this.timerId = setInterval(() => { if (!gameOver && direction !== null) { const nextMove = this.currentIndex + direction; - + if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { grid[this.currentIndex].classList.remove('ghost', this.color); this.currentIndex = nextMove; grid[this.currentIndex].classList.add('ghost', this.color); + this.updateAppearance(); } else { direction = chooseDirection(); } - + if (this.currentIndex === pacmanCurrentIndex) { - lives--; - updateLivesDisplay(); - - if (lives === 0) { - gameOver = true; - endGame(); + if (powerPelletActive) { + // Ghost gets scared + grid[this.currentIndex].classList.remove('ghost', this.color); + this.currentIndex = nextMove; + grid[this.currentIndex].classList.add('ghost', this.color); + this.updateAppearance(); } else { - grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = 21; - grid[pacmanCurrentIndex].classList.add('pacman'); + lives--; + updateLivesDisplay(); + + if (lives === 0) { + gameOver = true; + endGame(); + } else { + grid[pacmanCurrentIndex].classList.remove('pacman'); + pacmanCurrentIndex = 21; + grid[pacmanCurrentIndex].classList.add('pacman'); + } } } } - }, 200); + }, this.currentSpeed); // Gebruik de huidige snelheid } - + stop() { clearInterval(this.timerId); } } + const ghost1 = new Ghost(209, 'red'); const ghost2 = new Ghost(229, 'blue'); - + const ghosts = [ghost1, ghost2]; // Voeg alle geesten toe aan een array + setTimeout(() => { ghost1.moveGhost(); - }, 5000); // Start moving ghost1 after 5 seconds - + }, 5000); // Start met bewegen na 5 seconden + setTimeout(() => { ghost2.moveGhost(); - }, 15000); // Start moving ghost2 after 15 seconds - + }, 15000); // Start met bewegen na 15 seconden + const lifeIcons = [ document.getElementById('life1'), document.getElementById('life2'), @@ -248,28 +312,62 @@ document.addEventListener('DOMContentLoaded', () => { } else { lifeIcons[i].style.display = 'none'; // Hide the life icon } - console.log(`Life icon ${i + 1}: display is ${lifeIcons[i].style.display}`); } }; const checkCollision = () => { - if (grid[pacmanCurrentIndex].classList.contains('ghost')) { + if (grid[pacmanCurrentIndex].classList.contains('ghost') && !powerPelletActive) { lives--; // Decrease lives updateLivesDisplay(); // Update visual display of lives // Reset Pac-Man's position - grid[pacmanCurrentIndex].classList.remove('pacman'); + grid[pacmanCurrentIndex].classList.remove('pacman', 'ghost', 'scared'); pacmanCurrentIndex = 21; grid[pacmanCurrentIndex].classList.add('pacman'); - - // Check if there are no lives left - if (lives === 0) { - gameOver = true; - endGame(); // Game over - } + } + // Check if there are no lives left + if (lives === 0) { + gameOver = true; + endGame(); // Game over } }; // Check for collision on Pac-Man movement setInterval(checkCollision, 100); // Check collision every 100ms + + // Function to randomly turn a pac-dot into a power-pellet + const turnPacDotIntoPowerPellet = () => { + const pacDotIndices = grid + .map((cell, index) => cell.classList.contains('pac-dot') ? index : -1) + .filter(index => index !== -1); + + if (pacDotIndices.length > 0) { + const randomIndex = pacDotIndices[Math.floor(Math.random() * pacDotIndices.length)]; + grid[randomIndex].classList.remove('pac-dot'); // Delete pac-dot class + grid[randomIndex].classList.add('power-pellet'); // Add new power-pellet class + } + }; + + // Turn a random pac-dot into a power-pellet every 30 seconds + setInterval(turnPacDotIntoPowerPellet, 30000); + + // Function to make ghosts dark blue and slow + const activatePowerPelletEffect = () => { + powerPelletActive = true; + clearTimeout(powerPelletTimer); + + ghosts.forEach(ghost => ghost.scare()); + + powerPelletTimer = setTimeout(() => { + powerPelletActive = false; + ghosts.forEach(ghost => ghost.unscare()); + }, 10000); // Power-pellet effect duurt 10 seconden + }; + + // Event listener for Pac-Man eating a power-pellet + grid.forEach(cell => { + cell.addEventListener('pacmanEatPowerPellet', () => { + activatePowerPelletEffect(); + }); + }); }); \ No newline at end of file diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 4e038cf136..df8874bec5 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -28,6 +28,7 @@ body { display: flex; align-items: center; justify-content: center; + background-color: black; /* Set the background color of the cell */ } .wall { @@ -42,6 +43,14 @@ body { margin: auto; /* Center the dot within the cell */ } +.power-pellet { + width: 10px; + height: 10px; + background-color: yellow; + border-radius: 50%; + margin: auto; +} + .pacman { background-color: yellow; border-radius: 50%; From 3976e7227aad04f6e1c74cb5acc7de5cc46f4ca5 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:10:16 +0100 Subject: [PATCH 22/48] blue ghosts Fixed blue ghosts. Ghosts turn blue now with the power up --- Games/Pac_Man_Game/script.js | 31 +++++++++++++++++-------------- Games/Pac_Man_Game/style.css | 2 +- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index ec5fe3b19f..98a7585a6a 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -175,27 +175,31 @@ document.addEventListener('DOMContentLoaded', () => { this.currentIndex = startIndex; this.color = color; this.timerId = null; - this.originalSpeed = 200; // Original speed - this.currentSpeed = this.originalSpeed; // Current speed + this.originalSpeed = 200; // Originele snelheid van de geest + this.currentSpeed = this.originalSpeed; // Huidige snelheid this.scared = false; - this.draw(); // Draw the ghost on the grid + this.ghostElement = document.createElement('div'); + this.ghostElement.classList.add('ghost', this.color); + this.ghostElement.style.width = '20px'; // Stel de breedte in + this.ghostElement.style.height = '20px'; // Stel de hoogte in + this.ghostElement.style.borderRadius = '50%'; // Maak de ghost rond + grid[this.currentIndex].appendChild(this.ghostElement); + this.draw(); // Teken de geest wanneer deze wordt gemaakt } draw() { - grid[this.currentIndex].classList.add('ghost', this.color); + grid[this.currentIndex].appendChild(this.ghostElement); } scare() { this.scared = true; - grid[this.currentIndex].classList.add('scared'); - this.currentSpeed = 400; // Slow down the ghost + this.currentSpeed = 400; // Langzamere snelheid this.updateAppearance(); this.restartMovement(); } unscare() { this.scared = false; - grid[this.currentIndex].classList.remove('scared'); this.currentSpeed = this.originalSpeed; this.updateAppearance(); this.restartMovement(); @@ -203,9 +207,9 @@ document.addEventListener('DOMContentLoaded', () => { updateAppearance() { if (this.scared) { - grid[this.currentIndex].classList.add('scared-ghost'); // Add the class for the blue ghost + this.ghostElement.style.backgroundColor = 'darkblue'; // Maak de ghost donkerblauw } else { - grid[this.currentIndex].classList.remove('scared-ghost'); // De + this.ghostElement.style.backgroundColor = ''; // Herstel de originele kleur } } @@ -247,9 +251,9 @@ document.addEventListener('DOMContentLoaded', () => { const nextMove = this.currentIndex + direction; if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { - grid[this.currentIndex].classList.remove('ghost', this.color); + grid[this.currentIndex].removeChild(this.ghostElement); this.currentIndex = nextMove; - grid[this.currentIndex].classList.add('ghost', this.color); + grid[this.currentIndex].appendChild(this.ghostElement); this.updateAppearance(); } else { direction = chooseDirection(); @@ -258,9 +262,9 @@ document.addEventListener('DOMContentLoaded', () => { if (this.currentIndex === pacmanCurrentIndex) { if (powerPelletActive) { // Ghost gets scared - grid[this.currentIndex].classList.remove('ghost', this.color); + grid[this.currentIndex].removeChild(this.ghostElement); this.currentIndex = nextMove; - grid[this.currentIndex].classList.add('ghost', this.color); + grid[this.currentIndex].appendChild(this.ghostElement); this.updateAppearance(); } else { lives--; @@ -284,7 +288,6 @@ document.addEventListener('DOMContentLoaded', () => { clearInterval(this.timerId); } } - const ghost1 = new Ghost(209, 'red'); const ghost2 = new Ghost(229, 'blue'); diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index df8874bec5..ae04ebfd10 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -62,7 +62,7 @@ body { width: 20px; height: 20px; border-radius: 50%; - position: relative; + position: absolute; } .ghost.red { From 5d4e1ecbe5a085ead3b4eb208dddeda1b40e6d70 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:20:44 +0100 Subject: [PATCH 23/48] Fixed winning Noticed you 'won' too early because of the power pellets so i fixed it --- Games/Pac_Man_Game/script.js | 81 +++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 38 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 98a7585a6a..05ec6816e0 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -1,4 +1,4 @@ -document.addEventListener('DOMContentLoaded', () => { +document.addEventListener('DOMContentLoaded', () => { // Get the game board element const gameBoard = document.getElementById('gameBoard'); @@ -29,7 +29,7 @@ document.addEventListener('DOMContentLoaded', () => { 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1, 1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1, - 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1,2,1, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,2,2,1, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1,1,1, 1,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,1, @@ -175,49 +175,49 @@ document.addEventListener('DOMContentLoaded', () => { this.currentIndex = startIndex; this.color = color; this.timerId = null; - this.originalSpeed = 200; // Originele snelheid van de geest - this.currentSpeed = this.originalSpeed; // Huidige snelheid + this.originalSpeed = 200; // Original speed + this.currentSpeed = this.originalSpeed; // Current speed this.scared = false; this.ghostElement = document.createElement('div'); this.ghostElement.classList.add('ghost', this.color); - this.ghostElement.style.width = '20px'; // Stel de breedte in - this.ghostElement.style.height = '20px'; // Stel de hoogte in - this.ghostElement.style.borderRadius = '50%'; // Maak de ghost rond + this.ghostElement.style.width = '20px'; // Set the width + this.ghostElement.style.height = '20px'; // Set the height + this.ghostElement.style.borderRadius = '50%'; // Make the ghost round grid[this.currentIndex].appendChild(this.ghostElement); - this.draw(); // Teken de geest wanneer deze wordt gemaakt + this.draw(); // Draw the ghost on the grid } - + draw() { grid[this.currentIndex].appendChild(this.ghostElement); } - + scare() { this.scared = true; - this.currentSpeed = 400; // Langzamere snelheid + this.currentSpeed = 400; // Slow down the ghost this.updateAppearance(); this.restartMovement(); } - + unscare() { this.scared = false; this.currentSpeed = this.originalSpeed; this.updateAppearance(); this.restartMovement(); } - + updateAppearance() { if (this.scared) { - this.ghostElement.style.backgroundColor = 'darkblue'; // Maak de ghost donkerblauw + this.ghostElement.style.backgroundColor = 'darkblue'; // Make the ghost dark blue } else { - this.ghostElement.style.backgroundColor = ''; // Herstel de originele kleur + this.ghostElement.style.backgroundColor = ''; // Reset to original color } } - + restartMovement() { - clearInterval(this.timerId); // Stop de huidige beweging - this.moveGhost(); // Start de beweging opnieuw met de nieuwe snelheid + clearInterval(this.timerId); // Stop the current movement + this.moveGhost(); // Restart the movement with the new speed } - + moveGhost() { const directions = [-1, +1, -cols, +cols]; const distanceToPacman = (ghostIndex, pacmanIndex) => { @@ -227,29 +227,29 @@ document.addEventListener('DOMContentLoaded', () => { const pacmanCol = pacmanIndex % cols; return Math.abs(ghostRow - pacmanRow) + Math.abs(ghostCol - pacmanCol); }; - + const chooseDirection = () => { const pacmanIndex = grid.findIndex(cell => cell.classList.contains('pacman')); const validDirections = directions.filter(direction => { const nextMove = this.currentIndex + direction; return !grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost'); }); - + validDirections.sort((dir1, dir2) => { const nextMove1 = this.currentIndex + dir1; const nextMove2 = this.currentIndex + dir2; return distanceToPacman(nextMove1, pacmanIndex) - distanceToPacman(nextMove2, pacmanIndex); }); - + return validDirections.length > 0 ? validDirections[0] : null; }; - + let direction = chooseDirection(); - + this.timerId = setInterval(() => { if (!gameOver && direction !== null) { const nextMove = this.currentIndex + direction; - + if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { grid[this.currentIndex].removeChild(this.ghostElement); this.currentIndex = nextMove; @@ -258,7 +258,7 @@ document.addEventListener('DOMContentLoaded', () => { } else { direction = chooseDirection(); } - + if (this.currentIndex === pacmanCurrentIndex) { if (powerPelletActive) { // Ghost gets scared @@ -269,7 +269,7 @@ document.addEventListener('DOMContentLoaded', () => { } else { lives--; updateLivesDisplay(); - + if (lives === 0) { gameOver = true; endGame(); @@ -281,9 +281,9 @@ document.addEventListener('DOMContentLoaded', () => { } } } - }, this.currentSpeed); // Gebruik de huidige snelheid + }, this.currentSpeed); // Use the current speed } - + stop() { clearInterval(this.timerId); } @@ -291,16 +291,16 @@ document.addEventListener('DOMContentLoaded', () => { const ghost1 = new Ghost(209, 'red'); const ghost2 = new Ghost(229, 'blue'); - const ghosts = [ghost1, ghost2]; // Voeg alle geesten toe aan een array - + const ghosts = [ghost1, ghost2]; // Add all ghosts to an array + setTimeout(() => { ghost1.moveGhost(); - }, 5000); // Start met bewegen na 5 seconden - + }, 5000); // Start moving after 5 seconds + setTimeout(() => { ghost2.moveGhost(); - }, 15000); // Start met bewegen na 15 seconden - + }, 15000); // Start moving after 15 seconds + const lifeIcons = [ document.getElementById('life1'), document.getElementById('life2'), @@ -315,6 +315,7 @@ document.addEventListener('DOMContentLoaded', () => { } else { lifeIcons[i].style.display = 'none'; // Hide the life icon } + console.log(`Life icon ${i + 1}: display is ${lifeIcons[i].style.display}`); } }; @@ -340,16 +341,20 @@ document.addEventListener('DOMContentLoaded', () => { // Function to randomly turn a pac-dot into a power-pellet const turnPacDotIntoPowerPellet = () => { + // Check if there is already a power-pellet on the grid + const existingPowerPellet = grid.some(cell => cell.classList.contains('power-pellet')); + if (existingPowerPellet) return; // Exit if there is already a power-pellet + const pacDotIndices = grid .map((cell, index) => cell.classList.contains('pac-dot') ? index : -1) .filter(index => index !== -1); - + if (pacDotIndices.length > 0) { const randomIndex = pacDotIndices[Math.floor(Math.random() * pacDotIndices.length)]; grid[randomIndex].classList.remove('pac-dot'); // Delete pac-dot class grid[randomIndex].classList.add('power-pellet'); // Add new power-pellet class } - }; + }; // Turn a random pac-dot into a power-pellet every 30 seconds setInterval(turnPacDotIntoPowerPellet, 30000); @@ -364,7 +369,7 @@ document.addEventListener('DOMContentLoaded', () => { powerPelletTimer = setTimeout(() => { powerPelletActive = false; ghosts.forEach(ghost => ghost.unscare()); - }, 10000); // Power-pellet effect duurt 10 seconden + }, 10000); // Power-pellet effect lasts for 10 seconds }; // Event listener for Pac-Man eating a power-pellet From fea4aafcd935168cefef66549a1381d4696f8f24 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:27:29 +0100 Subject: [PATCH 24/48] 30 seconds between power pellets Power pellets appear 30 seconds after one has been used --- Games/Pac_Man_Game/script.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 05ec6816e0..53e36ea52a 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -9,10 +9,12 @@ document.addEventListener('DOMContentLoaded', () => { let score = 0; // Player's score let lives = 3; // Player's lives let totalPacDots = 0; // Total number of pac-dots in the game + let totalPowerPellets = 0; // Total number of power-pellets in the game let gameOver = false; // Flag to track game over state let gameLoop; // Variable to hold game loop interval let powerPelletActive = false; // Flag to track power pellet state let powerPelletTimer; // Timer for power pellet effect + let powerPelletSpawnTimer; // Timer for spawning power pellets // Level layout (0 = empty, 1 = wall, 2 = pac-dot, 3 = power-pellet) const layout = [ @@ -50,6 +52,7 @@ document.addEventListener('DOMContentLoaded', () => { totalPacDots++; } else if (cell === 3) { div.classList.add('power-pellet'); + totalPowerPellets++; } gameBoard.appendChild(div); @@ -62,6 +65,7 @@ document.addEventListener('DOMContentLoaded', () => { if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { grid[pacmanCurrentIndex].classList.remove('pac-dot'); score += 10; + totalPacDots--; document.getElementById('scoreValue').textContent = score; } @@ -101,6 +105,7 @@ document.addEventListener('DOMContentLoaded', () => { if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { grid[pacmanCurrentIndex].classList.remove('pac-dot'); score += 10; + totalPacDots--; document.getElementById('scoreValue').textContent = score; console.log('Score:', score); @@ -108,6 +113,7 @@ document.addEventListener('DOMContentLoaded', () => { } else if (grid[pacmanCurrentIndex].classList.contains('power-pellet')) { grid[pacmanCurrentIndex].classList.remove('power-pellet'); score += 50; + totalPowerPellets--; document.getElementById('scoreValue').textContent = score; console.log('Score:', score); @@ -130,13 +136,15 @@ document.addEventListener('DOMContentLoaded', () => { powerPelletTimer = setTimeout(() => { powerPelletActive = false; ghosts.forEach(ghost => ghost.unscare()); + // Restart the power-pellet spawn timer + powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); }, 10000); // Power pellet effect lasts for 10 seconds ghosts.forEach(ghost => ghost.scare()); }; const checkForWin = () => { - if (score === totalPacDots * 10 + 50) { // Adjusted for power-pellet score + if (totalPacDots === 0 && totalPowerPellets === 0) { gameOver = true; clearInterval(gameLoop); @@ -353,23 +361,28 @@ document.addEventListener('DOMContentLoaded', () => { const randomIndex = pacDotIndices[Math.floor(Math.random() * pacDotIndices.length)]; grid[randomIndex].classList.remove('pac-dot'); // Delete pac-dot class grid[randomIndex].classList.add('power-pellet'); // Add new power-pellet class + totalPacDots--; + totalPowerPellets++; } }; // Turn a random pac-dot into a power-pellet every 30 seconds - setInterval(turnPacDotIntoPowerPellet, 30000); + powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); // Function to make ghosts dark blue and slow const activatePowerPelletEffect = () => { powerPelletActive = true; clearTimeout(powerPelletTimer); + clearInterval(powerPelletSpawnTimer); // Stop spawning new power-pellets during the effect ghosts.forEach(ghost => ghost.scare()); powerPelletTimer = setTimeout(() => { powerPelletActive = false; ghosts.forEach(ghost => ghost.unscare()); - }, 10000); // Power-pellet effect lasts for 10 seconds + // Restart the power-pellet spawn timer + powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); + }, 10000); // Power pellet effect lasts for 10 seconds }; // Event listener for Pac-Man eating a power-pellet From d24dbd60ab341a82905b28984fa17c5a08d9e29d Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:45:08 +0100 Subject: [PATCH 25/48] Added portals Added portals to the sides --- Games/Pac_Man_Game/script.js | 34 +++++++++++++++++++++++++--------- Games/Pac_Man_Game/style.css | 6 +++++- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 53e36ea52a..a324dbad43 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -27,7 +27,7 @@ document.addEventListener('DOMContentLoaded', () => { 1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, - 1,2,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,1, + 0,2,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,0, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1, 1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1, @@ -87,11 +87,15 @@ document.addEventListener('DOMContentLoaded', () => { case 'ArrowLeft': if (pacmanCurrentIndex % cols !== 0 && !grid[pacmanCurrentIndex - 1].classList.contains('wall')) { newIndex -= 1; + } else if (pacmanCurrentIndex % cols === 0) { + newIndex += cols - 1; // Move to the right portal } break; case 'ArrowRight': if (pacmanCurrentIndex % cols < cols - 1 && !grid[pacmanCurrentIndex + 1].classList.contains('wall')) { newIndex += 1; + } else if (pacmanCurrentIndex % cols === cols - 1) { + newIndex -= cols - 1; // Move to the left portal } break; } @@ -133,14 +137,16 @@ document.addEventListener('DOMContentLoaded', () => { const activatePowerPellet = () => { powerPelletActive = true; clearTimeout(powerPelletTimer); + clearInterval(powerPelletSpawnTimer); // Stop spawning new power-pellets during the effect + + ghosts.forEach(ghost => ghost.scare()); + powerPelletTimer = setTimeout(() => { powerPelletActive = false; ghosts.forEach(ghost => ghost.unscare()); // Restart the power-pellet spawn timer powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); }, 10000); // Power pellet effect lasts for 10 seconds - - ghosts.forEach(ghost => ghost.scare()); }; const checkForWin = () => { @@ -148,8 +154,7 @@ document.addEventListener('DOMContentLoaded', () => { gameOver = true; clearInterval(gameLoop); - ghost1.stop(); - ghost2.stop(); + ghosts.forEach(ghost => ghost.stop()); setTimeout(() => { alert("Congratulations! You won!"); @@ -168,8 +173,7 @@ document.addEventListener('DOMContentLoaded', () => { const endGame = () => { clearInterval(gameLoop); - ghost1.stop(); - ghost2.stop(); + ghosts.forEach(ghost => ghost.stop()); setTimeout(() => { alert("Game over! You lost!"); @@ -288,6 +292,13 @@ document.addEventListener('DOMContentLoaded', () => { } } } + + // Handle portal logic for ghosts + if (this.currentIndex % cols === 0) { + this.currentIndex += cols - 1; // Move to the right portal + } else if (this.currentIndex % cols === cols - 1) { + this.currentIndex -= cols - 1; // Move to the left portal + } } }, this.currentSpeed); // Use the current speed } @@ -298,8 +309,9 @@ document.addEventListener('DOMContentLoaded', () => { } const ghost1 = new Ghost(209, 'red'); - const ghost2 = new Ghost(229, 'blue'); - const ghosts = [ghost1, ghost2]; // Add all ghosts to an array + const ghost2 = new Ghost(229, 'green'); + const ghost3 = new Ghost(249, 'pink'); + const ghosts = [ghost1, ghost2, ghost3]; // Add all ghosts to an array setTimeout(() => { ghost1.moveGhost(); @@ -309,6 +321,10 @@ document.addEventListener('DOMContentLoaded', () => { ghost2.moveGhost(); }, 15000); // Start moving after 15 seconds + setTimeout(() => { + ghost3.moveGhost(); + }, 30000); // Start moving after 30 seconds + const lifeIcons = [ document.getElementById('life1'), document.getElementById('life2'), diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index ae04ebfd10..5df1bbe448 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -69,10 +69,14 @@ body { background-color: red; } -.ghost.blue { +.ghost.green { background-color: green; } +.ghost.pink { + background-color: pink; +} + #score { margin-top: 20px; } From 08219f2ef00a87bcf5518bf2894ceb4feb0c7045 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 17:04:33 +0100 Subject: [PATCH 26/48] Changed map a bit Changed map a bit --- Games/Pac_Man_Game/script.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index a324dbad43..65d8cef6f8 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -20,6 +20,8 @@ document.addEventListener('DOMContentLoaded', () => { const layout = [ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, + 1,2,1,2,1,1,1,1,2,1,1,2,1,1,1,1,2,1,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,2,1,1,1,1,1,2,1,1,2,1,1,2,1,1,1,1,2,1, 1,2,2,2,2,2,2,2,1,2,2,2,1,2,1,2,2,2,2,1, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1, @@ -37,6 +39,8 @@ document.addEventListener('DOMContentLoaded', () => { 1,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,1, 1,2,1,1,1,1,1,2,1,2,1,2,1,2,1,1,1,1,2,1, 1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1, + 1,2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,2,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ]; From f9e0e4cca8232d5880d408ab96358d2d4ca31c2e Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 17:55:50 +0100 Subject: [PATCH 27/48] Fixes Fixes collision timing + added restart button when you lose --- Games/Pac_Man_Game/index.js | 387 +++++++++++++++++++++++++++++++++++ Games/Pac_Man_Game/script.js | 52 +++-- Games/Pac_Man_Game/style.css | 16 ++ 3 files changed, 439 insertions(+), 16 deletions(-) create mode 100644 Games/Pac_Man_Game/index.js diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js new file mode 100644 index 0000000000..878b528efa --- /dev/null +++ b/Games/Pac_Man_Game/index.js @@ -0,0 +1,387 @@ +const canvas = document.querySelector('canvas'); // Get the canvas element +const c = canvas.getContext('2d'); // Get the context of the canvas + +const score = document.querySelector('#score'); // Get the score element + +// Define the size of each cell in the map +const cellSize = 40; + +// Calculate the canvas size based on the map dimensions +const mapWidth = 19; // Number of columns in the map +const mapHeight = 15; // Number of rows in the map + +canvas.width = mapWidth * cellSize; // Set the width of the canvas based on the map width +canvas.height = mapHeight * cellSize; // Set the height of the canvas based on the map height + +// Prevent scrollbars +document.body.style.overflow = 'hidden'; + +// Create a class for the player +class Boundary { + static width = 40; + static height = 40; + constructor({position}) { // The constructor takes an object with a position property so we can destructure it + this.position = position; // Set the position of the player + this.width = 40; + this.height = 40; + } + draw() { + c.fillStyle = 'blue'; + c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player + } +} + +class Pacman { + constructor({position, velocity}) { + this.position = position; + this.velocity = velocity; + this.radius = 15; + this.radians = 0.75; // Start with the mouth closed + this.openRate = 0.05; // How fast the mouth opens and closes + this.rotation = 0; // Rotation of Pacman starts at 0 + } + draw() { + c.save(); // Save the current state of the canvas + c.translate(this.position.x, this.position.y); // Translate the canvas to the position of Pacman so we can rotate around him + c.rotate(this.rotation); // Rotation of Pacman so the mouth opens in the right direction + c.translate(-this.position.x, -this.position.y); // Translate the canvas back to the original position + c.fillStyle = 'yellow'; // Set the fill color to yellow + c.beginPath(); // Start a new path + c.arc(this.position.x, this.position.y, this.radius, this.radians, Math.PI * 2 - this.radians); // Draw the mouth of Pacman with the current radians. Math.PI * 2 is a full circle + c.lineTo(this.position.x, this.position.y); // Draw a line to the center of Pacman to close the mouth + c.fill(); // Fill the path with the current fill color + c.closePath(); // Close the path so we can start a new one + c.restore(); // Restore the canvas to the previous state + } + update() { + this.draw(); // Draw Pacman + this.position.x += this.velocity.x; // Move Pacman on the x-axis + this.position.y += this.velocity.y; // Move Pacman on the y-axis + + // Calculate the rotation of Pacman based on his velocity + if (this.velocity.x !== 0 || this.velocity.y !== 0) { // Check if Pacman is moving + this.rotation = Math.atan2(this.velocity.y, this.velocity.x); // Rotate Pacman based on his velocity + } + + // Open and close the mouth of Pacman + if (this.radians < 0 || this.radians > 0.75) this.openRate = -this.openRate; // Change the open rate if the mouth is fully open or closed + this.radians += this.openRate; // Change the radians of Pacman + } +} + +class Ghost { + constructor({position, velocity, color = 'pink'}) { + this.position = position; + this.velocity = velocity; + this.radius = 15; + this.color = color; + this.startMoving = false; + this.originalSpeed = Math.hypot(velocity.x, velocity.y); // Bewaar de oorspronkelijke snelheid + } + draw() { + c.fillStyle = this.color; + c.beginPath(); + c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2); + c.fill(); + c.closePath(); + } + update() { + this.draw(); + if (this.startMoving) { + this.position.x += this.velocity.x; + this.position.y += this.velocity.y; + } + } +} + +class Pellet { + constructor({position}) { + this.position = position; + this.radius = 3; + } + draw() { + c.fillStyle = 'white'; + c.beginPath() + c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) + c.fill() + c.closePath() + } +} + +const pellets = [] +const boundaries = [] +const ghosts = [] + +const pacman = new Pacman({ + position: { + x: Boundary.width + Boundary.width / 2, + y: Boundary.height + Boundary.height / 2 + }, + velocity: { + x: 0, + y: 0 + } +}) + +const keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].reduce((acc, key) => { + acc[key] = { pressed: false }; + return acc; +}, {}); + +let lastKey = '' +let scoreValue = 0 +let lives = 3; + +function updateLives() { + const livesContainer = document.getElementById('livesContainer'); + livesContainer.innerHTML = ''; + for (let i = 0; i < lives; i++) { + const life = document.createElement('span'); + life.classList.add('life'); + livesContainer.appendChild(life); + } +} + +// Create an array to store the boundaries +const map = [ + ['-','-','-','-','-','-','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-',' ','-',' ','-',' ','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-',' ','-',' ','-',' ','-'], + ['-',' ',' ',' ',' ',' ','-'], + ['-','-','-','-','-','-','-'] +] + +map.forEach((row, i) => { + row.forEach((symbol, j) => { + switch (symbol) { + case '-': + boundaries.push( + new Boundary({ + position: { + x: Boundary.width * j, + y: Boundary.height * i + } + }) + ) + break + } + }) +}) + +function circleCollidesWithRectangle({circle, rectangle}) { + const padding = Boundary.width / 2 - circle.radius - 1 + return ( + circle.position.y - circle.radius + circle.velocity.y <= rectangle.position.y + rectangle.height + padding && + circle.position.x + circle.radius + circle.velocity.x >= rectangle.position.x - padding && + circle.position.y + circle.radius + circle.velocity.y >= rectangle.position.y - padding && + circle.position.x - circle.radius + circle.velocity.x <= rectangle.position.x + rectangle.width + padding + ) +} + +function animate() { + requestAnimationFrame(animate) + c.clearRect(0, 0, canvas.width, canvas.height) + + if (keys.ArrowUp.pressed && lastKey === 'ArrowUp') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: 0, + y: -1.5 // Adjusted speed + }}, + rectangle: boundary + }) + ) { + pacman.velocity.y = 0 + break + } else { + pacman.velocity.y = -1.5 // Adjusted speed + } + } + } else if (keys.ArrowLeft.pressed && lastKey === 'ArrowLeft') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: -1.5, // Adjusted speed + y: 0 + }}, + rectangle: boundary + }) + ) { + pacman.velocity.x = 0 + break + } else { + pacman.velocity.x = -1.5 // Adjusted speed + } + } + } else if (keys.ArrowDown.pressed && lastKey === 'ArrowDown') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: 0, + y: 1.5 // Adjusted speed + }}, + rectangle: boundary + }) + ) { + pacman.velocity.y = 0 + break + } else { + pacman.velocity.y = 1.5 // Adjusted speed + } + } + } else if (keys.ArrowRight.pressed && lastKey === 'ArrowRight') { + for (let i = 0; i < boundaries.length; i++) { + const boundary = boundaries[i] + if (circleCollidesWithRectangle({ + circle: {...pacman, velocity: { + x: 1.5, // Adjusted speed + y: 0 + }}, + rectangle: boundary + }) + ) { + pacman.velocity.x = 0 + break + } else { + pacman.velocity.x = 1.5 // Adjusted speed + } + } + } + + // Check for portal collisions + if (pacman.position.x < 0) { + pacman.position.x = canvas.width - pacman.radius; + } else if (pacman.position.x > canvas.width) { + pacman.position.x = pacman.radius; + } + + // Check for pellet collisions + pellets.forEach((pellet, i) => { // Loop through the pellets + pellet.draw() // Draw the pellet + + // Check if the pellet collides with the player + if (Math.hypot(pellet.position.x - pacman.position.x, // Calculate the x and y distance between the pellet and the pacman + pellet.position.y - pacman.position.y + ) < pellet.radius + pacman.radius // Check if the distance is less than what it would be if the two circles were colliding + ) { + pellets.splice(i, 1) // Remove the pellet from the array when it collides with the pacman + scoreValue += 10 // Increase the score by 10 + score.innerHTML = scoreValue // Update the score element + + // Check if all pellets are collected + if (pellets.length === 0) { + setTimeout(() => { + alert('Congratulations! You have won!'); + window.location.reload(); // Refresh the page instead of initializing the game + }, 100); + } + } + }) + boundaries.forEach((boundary) => { + boundary.draw() + + if ( + circleCollidesWithRectangle({ + circle: pacman, + rectangle: boundary + }) + ) { + pacman.velocity.x = 0 + pacman.velocity.y = 0 + } +}) +pacman.update() + +ghosts.forEach((ghost) => { + ghost.update(); + + // Check for portal collisions for ghosts + if (ghost.position.x < 0) { + ghost.position.x = canvas.width - ghost.radius; + } else if (ghost.position.x > canvas.width) { + ghost.position.x = ghost.radius; + } + + let collision = false; + boundaries.forEach(boundary => { + if (circleCollidesWithRectangle({ + circle: {...ghost, velocity: { + x: ghost.velocity.x, + y: ghost.velocity.y + }}, + rectangle: boundary + })) { + collision = true; + } + }); + + if (collision) { + // Stop the ghost and set a random new direction, but use original speed + ghost.velocity.x = 0; + ghost.velocity.y = 0; + + // Possible directions to move + const directions = [ + { direction: 'right', x: ghost.originalSpeed, y: 0 }, + { direction: 'left', x: -ghost.originalSpeed, y: 0 }, + { direction: 'up', x: 0, y: -ghost.originalSpeed }, + { direction: 'down', x: 0, y: ghost.originalSpeed } + ]; + + // Function to check if a move is valid (not blocked by a boundary) + const isMoveValid = (newX, newY) => { + let valid = true; + boundaries.forEach(boundary => { + if (circleCollidesWithRectangle({ + circle: { ...ghost, velocity: { x: newX, y: newY } }, + rectangle: boundary + })) { + valid = false; + } + }); + return valid; + }; + + // Filter out invalid moves + const validDirections = directions.filter(({x, y}) => isMoveValid(x, y)); + + // If there are valid directions, pick one + if (validDirections.length > 0) { + const randomDirection = validDirections[Math.floor(Math.random() * validDirections.length)]; + ghost.velocity = { x: randomDirection.x, y: randomDirection.y }; + } + } + + // Check for collision with Pac-Man + if (Math.hypot(ghost.position.x - pacman.position.x, ghost.position.y - pacman.position.y) < ghost.radius + pacman.radius) { + lives -= 1; + updateLives(); + if (lives === 0) { + alert('Game Over!'); + window.location.reload(); // Refresh the page instead of initializing the game + } else { + // Reset Pac-Man position + pacman.position = { + x: Boundary.width + Boundary.width / 2, + y: Boundary.height + Boundary.height / 2 + }; + pacman.velocity = { + x: 0, + y: 0 + }; + } + } +}) +} + +initializeGame(); +animate() + +window.addEventListener('keydown', ({key}) => keys[key] && (keys[key].pressed = true, lastKey = key)); +window.addEventListener('keyup', ({key}) => keys[key] && (keys[key].pressed = false)); diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 65d8cef6f8..50f272d5ff 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -4,7 +4,7 @@ document.addEventListener('DOMContentLoaded', () => { // Initialize variables const grid = []; // Array to hold the grid cells - const rows = 20; // Number of rows in the grid + const rows = 24; // Updated number of rows in the grid const cols = 20; // Number of columns in the grid let score = 0; // Player's score let lives = 3; // Player's lives @@ -22,20 +22,20 @@ document.addEventListener('DOMContentLoaded', () => { 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,2,1,2,1,1,1,1,2,1,1,2,1,1,1,1,2,1,2,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, - 1,2,1,1,1,1,1,2,1,1,2,1,1,2,1,1,1,1,2,1, + 1,2,1,1,1,1,1,2,1,1,1,2,1,2,1,1,1,1,2,1, 1,2,2,2,2,2,2,2,1,2,2,2,1,2,1,2,2,2,2,1, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1, 1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, - 1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1, + 1,2,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,2,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 0,2,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,0, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1, 1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1, - 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1,2,1, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,2,2,1, - 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1,1,1, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1,2,1, 1,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,1, 1,2,1,1,1,1,1,2,1,2,1,2,1,2,1,1,1,1,2,1, 1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1, @@ -176,13 +176,32 @@ document.addEventListener('DOMContentLoaded', () => { const endGame = () => { clearInterval(gameLoop); - + ghosts.forEach(ghost => ghost.stop()); - - setTimeout(() => { - alert("Game over! You lost!"); - }, 500); + + // Verwijder bestaande overlay als er al een is + const existingOverlay = document.getElementById('gameOverOverlay'); + if (existingOverlay) { + existingOverlay.remove(); + } + + // Maak een nieuwe overlay + const gameOverOverlay = document.createElement('div'); + gameOverOverlay.id = 'gameOverOverlay'; + gameOverOverlay.innerHTML = ` +
+

${lives === 0 ? 'Game Over!' : 'Congratulations! You Won!'}

+ +
+ `; + document.body.appendChild(gameOverOverlay); + + // Event listener voor opnieuw starten + document.getElementById('restartGameButton').addEventListener('click', () => { + window.location.reload(); // Herlaad de pagina om een nieuw spel te starten + }); }; + gameLoop = setInterval(movePacman, 200); @@ -348,12 +367,13 @@ document.addEventListener('DOMContentLoaded', () => { }; const checkCollision = () => { - if (grid[pacmanCurrentIndex].classList.contains('ghost') && !powerPelletActive) { - lives--; // Decrease lives - updateLivesDisplay(); // Update visual display of lives - - // Reset Pac-Man's position - grid[pacmanCurrentIndex].classList.remove('pacman', 'ghost', 'scared'); + const ghostInSameCell = grid[pacmanCurrentIndex].querySelector('.ghost'); + if (ghostInSameCell && !powerPelletActive) { + lives--; // Decrease lives by 1 + updateLivesDisplay(); // Update the lives display + + // Check if the game is over + grid[pacmanCurrentIndex].classList.remove('pacman'); pacmanCurrentIndex = 21; grid[pacmanCurrentIndex].classList.add('pacman'); } diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 5df1bbe448..6a1cc77d7e 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -22,6 +22,22 @@ body { background-color: black; } +.game-over-message { + color: white; + text-align: center; +} +#restartGameButton { + padding: 10px 20px; + font-size: 16px; + background-color: #ffcc00; + border: none; + cursor: pointer; + border-radius: 5px; +} +#restartGameButton:hover { + background-color: #ff9900; +} + .cell { width: 20px; height: 20px; From 9f9e55b674e90694e7aabb2d6c1cf6f24c6fe419 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 17:56:29 +0100 Subject: [PATCH 28/48] Delete Delete --- Games/Pac_Man_Game/index.js | 387 ------------------------------------ 1 file changed, 387 deletions(-) delete mode 100644 Games/Pac_Man_Game/index.js diff --git a/Games/Pac_Man_Game/index.js b/Games/Pac_Man_Game/index.js deleted file mode 100644 index 878b528efa..0000000000 --- a/Games/Pac_Man_Game/index.js +++ /dev/null @@ -1,387 +0,0 @@ -const canvas = document.querySelector('canvas'); // Get the canvas element -const c = canvas.getContext('2d'); // Get the context of the canvas - -const score = document.querySelector('#score'); // Get the score element - -// Define the size of each cell in the map -const cellSize = 40; - -// Calculate the canvas size based on the map dimensions -const mapWidth = 19; // Number of columns in the map -const mapHeight = 15; // Number of rows in the map - -canvas.width = mapWidth * cellSize; // Set the width of the canvas based on the map width -canvas.height = mapHeight * cellSize; // Set the height of the canvas based on the map height - -// Prevent scrollbars -document.body.style.overflow = 'hidden'; - -// Create a class for the player -class Boundary { - static width = 40; - static height = 40; - constructor({position}) { // The constructor takes an object with a position property so we can destructure it - this.position = position; // Set the position of the player - this.width = 40; - this.height = 40; - } - draw() { - c.fillStyle = 'blue'; - c.fillRect(this.position.x, this.position.y, this.width, this.height); // Draw the player - } -} - -class Pacman { - constructor({position, velocity}) { - this.position = position; - this.velocity = velocity; - this.radius = 15; - this.radians = 0.75; // Start with the mouth closed - this.openRate = 0.05; // How fast the mouth opens and closes - this.rotation = 0; // Rotation of Pacman starts at 0 - } - draw() { - c.save(); // Save the current state of the canvas - c.translate(this.position.x, this.position.y); // Translate the canvas to the position of Pacman so we can rotate around him - c.rotate(this.rotation); // Rotation of Pacman so the mouth opens in the right direction - c.translate(-this.position.x, -this.position.y); // Translate the canvas back to the original position - c.fillStyle = 'yellow'; // Set the fill color to yellow - c.beginPath(); // Start a new path - c.arc(this.position.x, this.position.y, this.radius, this.radians, Math.PI * 2 - this.radians); // Draw the mouth of Pacman with the current radians. Math.PI * 2 is a full circle - c.lineTo(this.position.x, this.position.y); // Draw a line to the center of Pacman to close the mouth - c.fill(); // Fill the path with the current fill color - c.closePath(); // Close the path so we can start a new one - c.restore(); // Restore the canvas to the previous state - } - update() { - this.draw(); // Draw Pacman - this.position.x += this.velocity.x; // Move Pacman on the x-axis - this.position.y += this.velocity.y; // Move Pacman on the y-axis - - // Calculate the rotation of Pacman based on his velocity - if (this.velocity.x !== 0 || this.velocity.y !== 0) { // Check if Pacman is moving - this.rotation = Math.atan2(this.velocity.y, this.velocity.x); // Rotate Pacman based on his velocity - } - - // Open and close the mouth of Pacman - if (this.radians < 0 || this.radians > 0.75) this.openRate = -this.openRate; // Change the open rate if the mouth is fully open or closed - this.radians += this.openRate; // Change the radians of Pacman - } -} - -class Ghost { - constructor({position, velocity, color = 'pink'}) { - this.position = position; - this.velocity = velocity; - this.radius = 15; - this.color = color; - this.startMoving = false; - this.originalSpeed = Math.hypot(velocity.x, velocity.y); // Bewaar de oorspronkelijke snelheid - } - draw() { - c.fillStyle = this.color; - c.beginPath(); - c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2); - c.fill(); - c.closePath(); - } - update() { - this.draw(); - if (this.startMoving) { - this.position.x += this.velocity.x; - this.position.y += this.velocity.y; - } - } -} - -class Pellet { - constructor({position}) { - this.position = position; - this.radius = 3; - } - draw() { - c.fillStyle = 'white'; - c.beginPath() - c.arc(this.position.x, this.position.y, this.radius, 0, Math.PI * 2) - c.fill() - c.closePath() - } -} - -const pellets = [] -const boundaries = [] -const ghosts = [] - -const pacman = new Pacman({ - position: { - x: Boundary.width + Boundary.width / 2, - y: Boundary.height + Boundary.height / 2 - }, - velocity: { - x: 0, - y: 0 - } -}) - -const keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].reduce((acc, key) => { - acc[key] = { pressed: false }; - return acc; -}, {}); - -let lastKey = '' -let scoreValue = 0 -let lives = 3; - -function updateLives() { - const livesContainer = document.getElementById('livesContainer'); - livesContainer.innerHTML = ''; - for (let i = 0; i < lives; i++) { - const life = document.createElement('span'); - life.classList.add('life'); - livesContainer.appendChild(life); - } -} - -// Create an array to store the boundaries -const map = [ - ['-','-','-','-','-','-','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-',' ','-',' ','-',' ','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-',' ','-',' ','-',' ','-'], - ['-',' ',' ',' ',' ',' ','-'], - ['-','-','-','-','-','-','-'] -] - -map.forEach((row, i) => { - row.forEach((symbol, j) => { - switch (symbol) { - case '-': - boundaries.push( - new Boundary({ - position: { - x: Boundary.width * j, - y: Boundary.height * i - } - }) - ) - break - } - }) -}) - -function circleCollidesWithRectangle({circle, rectangle}) { - const padding = Boundary.width / 2 - circle.radius - 1 - return ( - circle.position.y - circle.radius + circle.velocity.y <= rectangle.position.y + rectangle.height + padding && - circle.position.x + circle.radius + circle.velocity.x >= rectangle.position.x - padding && - circle.position.y + circle.radius + circle.velocity.y >= rectangle.position.y - padding && - circle.position.x - circle.radius + circle.velocity.x <= rectangle.position.x + rectangle.width + padding - ) -} - -function animate() { - requestAnimationFrame(animate) - c.clearRect(0, 0, canvas.width, canvas.height) - - if (keys.ArrowUp.pressed && lastKey === 'ArrowUp') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: 0, - y: -1.5 // Adjusted speed - }}, - rectangle: boundary - }) - ) { - pacman.velocity.y = 0 - break - } else { - pacman.velocity.y = -1.5 // Adjusted speed - } - } - } else if (keys.ArrowLeft.pressed && lastKey === 'ArrowLeft') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: -1.5, // Adjusted speed - y: 0 - }}, - rectangle: boundary - }) - ) { - pacman.velocity.x = 0 - break - } else { - pacman.velocity.x = -1.5 // Adjusted speed - } - } - } else if (keys.ArrowDown.pressed && lastKey === 'ArrowDown') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: 0, - y: 1.5 // Adjusted speed - }}, - rectangle: boundary - }) - ) { - pacman.velocity.y = 0 - break - } else { - pacman.velocity.y = 1.5 // Adjusted speed - } - } - } else if (keys.ArrowRight.pressed && lastKey === 'ArrowRight') { - for (let i = 0; i < boundaries.length; i++) { - const boundary = boundaries[i] - if (circleCollidesWithRectangle({ - circle: {...pacman, velocity: { - x: 1.5, // Adjusted speed - y: 0 - }}, - rectangle: boundary - }) - ) { - pacman.velocity.x = 0 - break - } else { - pacman.velocity.x = 1.5 // Adjusted speed - } - } - } - - // Check for portal collisions - if (pacman.position.x < 0) { - pacman.position.x = canvas.width - pacman.radius; - } else if (pacman.position.x > canvas.width) { - pacman.position.x = pacman.radius; - } - - // Check for pellet collisions - pellets.forEach((pellet, i) => { // Loop through the pellets - pellet.draw() // Draw the pellet - - // Check if the pellet collides with the player - if (Math.hypot(pellet.position.x - pacman.position.x, // Calculate the x and y distance between the pellet and the pacman - pellet.position.y - pacman.position.y - ) < pellet.radius + pacman.radius // Check if the distance is less than what it would be if the two circles were colliding - ) { - pellets.splice(i, 1) // Remove the pellet from the array when it collides with the pacman - scoreValue += 10 // Increase the score by 10 - score.innerHTML = scoreValue // Update the score element - - // Check if all pellets are collected - if (pellets.length === 0) { - setTimeout(() => { - alert('Congratulations! You have won!'); - window.location.reload(); // Refresh the page instead of initializing the game - }, 100); - } - } - }) - boundaries.forEach((boundary) => { - boundary.draw() - - if ( - circleCollidesWithRectangle({ - circle: pacman, - rectangle: boundary - }) - ) { - pacman.velocity.x = 0 - pacman.velocity.y = 0 - } -}) -pacman.update() - -ghosts.forEach((ghost) => { - ghost.update(); - - // Check for portal collisions for ghosts - if (ghost.position.x < 0) { - ghost.position.x = canvas.width - ghost.radius; - } else if (ghost.position.x > canvas.width) { - ghost.position.x = ghost.radius; - } - - let collision = false; - boundaries.forEach(boundary => { - if (circleCollidesWithRectangle({ - circle: {...ghost, velocity: { - x: ghost.velocity.x, - y: ghost.velocity.y - }}, - rectangle: boundary - })) { - collision = true; - } - }); - - if (collision) { - // Stop the ghost and set a random new direction, but use original speed - ghost.velocity.x = 0; - ghost.velocity.y = 0; - - // Possible directions to move - const directions = [ - { direction: 'right', x: ghost.originalSpeed, y: 0 }, - { direction: 'left', x: -ghost.originalSpeed, y: 0 }, - { direction: 'up', x: 0, y: -ghost.originalSpeed }, - { direction: 'down', x: 0, y: ghost.originalSpeed } - ]; - - // Function to check if a move is valid (not blocked by a boundary) - const isMoveValid = (newX, newY) => { - let valid = true; - boundaries.forEach(boundary => { - if (circleCollidesWithRectangle({ - circle: { ...ghost, velocity: { x: newX, y: newY } }, - rectangle: boundary - })) { - valid = false; - } - }); - return valid; - }; - - // Filter out invalid moves - const validDirections = directions.filter(({x, y}) => isMoveValid(x, y)); - - // If there are valid directions, pick one - if (validDirections.length > 0) { - const randomDirection = validDirections[Math.floor(Math.random() * validDirections.length)]; - ghost.velocity = { x: randomDirection.x, y: randomDirection.y }; - } - } - - // Check for collision with Pac-Man - if (Math.hypot(ghost.position.x - pacman.position.x, ghost.position.y - pacman.position.y) < ghost.radius + pacman.radius) { - lives -= 1; - updateLives(); - if (lives === 0) { - alert('Game Over!'); - window.location.reload(); // Refresh the page instead of initializing the game - } else { - // Reset Pac-Man position - pacman.position = { - x: Boundary.width + Boundary.width / 2, - y: Boundary.height + Boundary.height / 2 - }; - pacman.velocity = { - x: 0, - y: 0 - }; - } - } -}) -} - -initializeGame(); -animate() - -window.addEventListener('keydown', ({key}) => keys[key] && (keys[key].pressed = true, lastKey = key)); -window.addEventListener('keyup', ({key}) => keys[key] && (keys[key].pressed = false)); From 09f6f3c4632b979033ccf28482b3dde8abefe544 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:15:21 +0100 Subject: [PATCH 29/48] Added button Added restart button for when you win --- Games/Pac_Man_Game/script.js | 56 ++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 50f272d5ff..8c842133a3 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -157,51 +157,69 @@ document.addEventListener('DOMContentLoaded', () => { if (totalPacDots === 0 && totalPowerPellets === 0) { gameOver = true; clearInterval(gameLoop); - + ghosts.forEach(ghost => ghost.stop()); - - setTimeout(() => { - alert("Congratulations! You won!"); - }, 500); + + // Delete existing overlay + const existingOverlay = document.getElementById('gameOverOverlay'); + if (existingOverlay) { + existingOverlay.remove(); + } + + // Create new overlay + const gameOverOverlay = document.createElement('div'); + gameOverOverlay.id = 'gameOverOverlay'; + gameOverOverlay.innerHTML = ` +
+

Congratulations! You Won!

+ +
+ `; + document.body.appendChild(gameOverOverlay); + + // Event listener for restart button + document.getElementById('restartGameButton').addEventListener('click', () => { + window.location.reload(); // Reload the page after clicking the button + }); } }; - - let direction = null; - document.addEventListener('keydown', (event) => { - const key = event.key; - if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) { - direction = key; - } - }); - + const endGame = () => { clearInterval(gameLoop); ghosts.forEach(ghost => ghost.stop()); - // Verwijder bestaande overlay als er al een is + // Delete existing overlay const existingOverlay = document.getElementById('gameOverOverlay'); if (existingOverlay) { existingOverlay.remove(); } - // Maak een nieuwe overlay + // Create new overlay const gameOverOverlay = document.createElement('div'); gameOverOverlay.id = 'gameOverOverlay'; gameOverOverlay.innerHTML = `
-

${lives === 0 ? 'Game Over!' : 'Congratulations! You Won!'}

+

Game Over!

`; document.body.appendChild(gameOverOverlay); - // Event listener voor opnieuw starten + // Event listener for restart button document.getElementById('restartGameButton').addEventListener('click', () => { - window.location.reload(); // Herlaad de pagina om een nieuw spel te starten + window.location.reload(); // Reload the page after clicking the button }); }; + let direction = null; + document.addEventListener('keydown', (event) => { + const key = event.key; + if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) { + direction = key; + } + }); + gameLoop = setInterval(movePacman, 200); From 96802f3d3e99c51340d3547dad3116ea048ddcb2 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:10:35 +0100 Subject: [PATCH 30/48] Pacman gif Added Pacman gif --- Games/Pac_Man_Game/gifs/pacman.gif | Bin 0 -> 189 bytes Games/Pac_Man_Game/script.js | 29 +++++++++++++++++++---------- Games/Pac_Man_Game/style.css | 5 +++-- 3 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 Games/Pac_Man_Game/gifs/pacman.gif diff --git a/Games/Pac_Man_Game/gifs/pacman.gif b/Games/Pac_Man_Game/gifs/pacman.gif new file mode 100644 index 0000000000000000000000000000000000000000..6437292fc00f3b6dbc4f935d54765868d0cec444 GIT binary patch literal 189 zcmZ?wbhEHblwgoxXkcXc|AFEE|Nn~rx&2&2f}I@$T#fV$m>C%u7!-f9a7r>TGUx!= zK&2843`}M{{VQibcrVc$AlLQ!Oy%eMH4jw#QpKl*6|B>FJ}KkQI`xG6w-yCw_B%7k zcg;I8WA?=z!+PPUAd>*8OReY7}j%6k8zss7gc% { const movePacman = () => { if (!gameOver && direction !== null) { let newIndex = pacmanCurrentIndex; + let rotation = 0; switch (direction) { case 'ArrowUp': if (pacmanCurrentIndex - cols >= 0 && !grid[pacmanCurrentIndex - cols].classList.contains('wall')) { newIndex -= cols; + rotation = -90; // Rotate up } break; case 'ArrowDown': if (pacmanCurrentIndex + cols < cols * rows && !grid[pacmanCurrentIndex + cols].classList.contains('wall')) { newIndex += cols; + rotation = 90; // Rotate down } break; case 'ArrowLeft': if (pacmanCurrentIndex % cols !== 0 && !grid[pacmanCurrentIndex - 1].classList.contains('wall')) { newIndex -= 1; + rotation = 180; // Rotate left } else if (pacmanCurrentIndex % cols === 0) { newIndex += cols - 1; // Move to the right portal + rotation = 180; // Rotate left } break; case 'ArrowRight': if (pacmanCurrentIndex % cols < cols - 1 && !grid[pacmanCurrentIndex + 1].classList.contains('wall')) { newIndex += 1; + rotation = 0; // Rotate right } else if (pacmanCurrentIndex % cols === cols - 1) { newIndex -= cols - 1; // Move to the left portal + rotation = 0; // Rotate right } break; } @@ -108,15 +115,15 @@ document.addEventListener('DOMContentLoaded', () => { grid[pacmanCurrentIndex].classList.remove('pacman'); pacmanCurrentIndex = newIndex; grid[pacmanCurrentIndex].classList.add('pacman'); - - + grid[pacmanCurrentIndex].style.transform = `rotate(${rotation}deg)`; // Apply rotation + if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { grid[pacmanCurrentIndex].classList.remove('pac-dot'); score += 10; totalPacDots--; document.getElementById('scoreValue').textContent = score; console.log('Score:', score); - + checkForWin(); } else if (grid[pacmanCurrentIndex].classList.contains('power-pellet')) { grid[pacmanCurrentIndex].classList.remove('power-pellet'); @@ -124,13 +131,13 @@ document.addEventListener('DOMContentLoaded', () => { totalPowerPellets--; document.getElementById('scoreValue').textContent = score; console.log('Score:', score); - + activatePowerPellet(); } - + checkCollision(); } - + if (lives === 0) { gameOver = true; endGame(); @@ -179,8 +186,9 @@ document.addEventListener('DOMContentLoaded', () => { // Event listener for restart button document.getElementById('restartGameButton').addEventListener('click', () => { - window.location.reload(); // Reload the page after clicking the button - }); + console.log('Restart button clicked'); + window.location.reload(); // Reload the page + }); } }; @@ -208,8 +216,9 @@ document.addEventListener('DOMContentLoaded', () => { // Event listener for restart button document.getElementById('restartGameButton').addEventListener('click', () => { - window.location.reload(); // Reload the page after clicking the button - }); + console.log('Restart button clicked'); + window.location.reload(); // Reload the page + }); }; let direction = null; diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 6a1cc77d7e..c8649624b6 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -68,10 +68,11 @@ body { } .pacman { - background-color: yellow; - border-radius: 50%; width: 20px; height: 20px; + background-image: url('./gifs/pacman.gif'); + background-size: cover; + border-radius: 50%; } .ghost { From 74cad47e49a632cfe198245ce78abaf1ed8aad2a Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:25:18 +0100 Subject: [PATCH 31/48] ghost gifs Added pngs and gifs of ghosts --- Games/Pac_Man_Game/pixels/ghost-blue.png | Bin 0 -> 903 bytes Games/Pac_Man_Game/pixels/ghost-pink.png | Bin 0 -> 879 bytes Games/Pac_Man_Game/pixels/ghost-red.png | Bin 0 -> 960 bytes Games/Pac_Man_Game/pixels/ghosts-slow.gif | Bin 0 -> 1267 bytes .../Pac_Man_Game/{gifs => pixels}/pacman.gif | Bin Games/Pac_Man_Game/script.js | 56 +++++++----------- Games/Pac_Man_Game/style.css | 16 +++-- 7 files changed, 32 insertions(+), 40 deletions(-) create mode 100644 Games/Pac_Man_Game/pixels/ghost-blue.png create mode 100644 Games/Pac_Man_Game/pixels/ghost-pink.png create mode 100644 Games/Pac_Man_Game/pixels/ghost-red.png create mode 100644 Games/Pac_Man_Game/pixels/ghosts-slow.gif rename Games/Pac_Man_Game/{gifs => pixels}/pacman.gif (100%) diff --git a/Games/Pac_Man_Game/pixels/ghost-blue.png b/Games/Pac_Man_Game/pixels/ghost-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d2be581b393f11026bfc2314fae01443f431cc GIT binary patch literal 903 zcmV;219<$2P)^@RCwCFl}%_9Q4oOV?QXKM3H?bM zO=`6ktJYEp#bW&dD^$HH6h+0Of*zEDdi3bQlZc3jSWvu3{Q(Oi{?cBmq9_GxrP5ks z3yDqI#xy@oH=8(boz$1KNqVq8_}I6zJ2P+Io0-Q>_P&Aw<2cf>fZT_;3Mnf&gNF{O>8O_)ti>x%QuoUfWajt|ivkDPS18*z>+)+rI zr7#)bKTuz4heo@@kVO+3j76p)jL&EyQG+7Rg=`0`+2LfZu2oQMG8=+riUJ3!Yrz+b z!qtI3Lxz#T>3TO<71LZqTOBTNqq8p0H+bv!g0Lf*ha4D>u}^_NNwB7}1lCp+L%C`J zJ(Zd>Hmm9ItlMMERYiif)>@2QHc(|*+{p|F6+EY(zxJpdZ~6`4iGvMr>acs>;m*W$ zxY+UDm>1hr!$FRrQqnN)pp#C$9{$~ENBGI7(z(n^R$JIcvkA6ihBP-gjl=zb*)bXk z&uK{tgY~=1U~{~nAu`lkXgG#wNj97-3ULPa6jDivn0u|iv2EtIJ$1ZU&W zJMM+y&|gI!ugh(P=4ux-RV;^T%&x&-Q_$@l%Ug{J>MN+ALFdRlry&oJr$|uTa)~}_qrsn>hxUe*@K!uwRbaqi%Hj#Z`&jnZwE6679QKs9Y~_P9rP dbNIIa0{{}Z`QFk3K??u?002ovPDHLkV1gRGou~i+ literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/pixels/ghost-pink.png b/Games/Pac_Man_Game/pixels/ghost-pink.png new file mode 100644 index 0000000000000000000000000000000000000000..542f8b773ff844e4f161c44be34657efb908de3e GIT binary patch literal 879 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 C57{UH literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/gifs/pacman.gif b/Games/Pac_Man_Game/pixels/pacman.gif similarity index 100% rename from Games/Pac_Man_Game/gifs/pacman.gif rename to Games/Pac_Man_Game/pixels/pacman.gif diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index d55c650816..5889e744d6 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -229,7 +229,6 @@ document.addEventListener('DOMContentLoaded', () => { } }); - gameLoop = setInterval(movePacman, 200); class Ghost { @@ -244,42 +243,33 @@ document.addEventListener('DOMContentLoaded', () => { this.ghostElement.classList.add('ghost', this.color); this.ghostElement.style.width = '20px'; // Set the width this.ghostElement.style.height = '20px'; // Set the height - this.ghostElement.style.borderRadius = '50%'; // Make the ghost round grid[this.currentIndex].appendChild(this.ghostElement); this.draw(); // Draw the ghost on the grid } - + draw() { grid[this.currentIndex].appendChild(this.ghostElement); } - + scare() { this.scared = true; this.currentSpeed = 400; // Slow down the ghost - this.updateAppearance(); + this.ghostElement.classList.add('scared'); // Add scared class this.restartMovement(); } - + unscare() { this.scared = false; this.currentSpeed = this.originalSpeed; - this.updateAppearance(); + this.ghostElement.classList.remove('scared'); // Remove scared class this.restartMovement(); - } - - updateAppearance() { - if (this.scared) { - this.ghostElement.style.backgroundColor = 'darkblue'; // Make the ghost dark blue - } else { - this.ghostElement.style.backgroundColor = ''; // Reset to original color - } } - + restartMovement() { clearInterval(this.timerId); // Stop the current movement this.moveGhost(); // Restart the movement with the new speed } - + moveGhost() { const directions = [-1, +1, -cols, +cols]; const distanceToPacman = (ghostIndex, pacmanIndex) => { @@ -289,49 +279,47 @@ document.addEventListener('DOMContentLoaded', () => { const pacmanCol = pacmanIndex % cols; return Math.abs(ghostRow - pacmanRow) + Math.abs(ghostCol - pacmanCol); }; - + const chooseDirection = () => { const pacmanIndex = grid.findIndex(cell => cell.classList.contains('pacman')); const validDirections = directions.filter(direction => { const nextMove = this.currentIndex + direction; return !grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost'); }); - + validDirections.sort((dir1, dir2) => { const nextMove1 = this.currentIndex + dir1; const nextMove2 = this.currentIndex + dir2; return distanceToPacman(nextMove1, pacmanIndex) - distanceToPacman(nextMove2, pacmanIndex); }); - + return validDirections.length > 0 ? validDirections[0] : null; }; - + let direction = chooseDirection(); - + this.timerId = setInterval(() => { if (!gameOver && direction !== null) { const nextMove = this.currentIndex + direction; - + if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { grid[this.currentIndex].removeChild(this.ghostElement); this.currentIndex = nextMove; grid[this.currentIndex].appendChild(this.ghostElement); - this.updateAppearance(); } else { direction = chooseDirection(); } - + if (this.currentIndex === pacmanCurrentIndex) { if (powerPelletActive) { // Ghost gets scared grid[this.currentIndex].removeChild(this.ghostElement); this.currentIndex = nextMove; grid[this.currentIndex].appendChild(this.ghostElement); - this.updateAppearance(); } else { lives--; updateLivesDisplay(); - + if (lives === 0) { gameOver = true; endGame(); @@ -342,7 +330,7 @@ document.addEventListener('DOMContentLoaded', () => { } } } - + // Handle portal logic for ghosts if (this.currentIndex % cols === 0) { this.currentIndex += cols - 1; // Move to the right portal @@ -352,25 +340,25 @@ document.addEventListener('DOMContentLoaded', () => { } }, this.currentSpeed); // Use the current speed } - + stop() { clearInterval(this.timerId); } } - + const ghost1 = new Ghost(209, 'red'); - const ghost2 = new Ghost(229, 'green'); + const ghost2 = new Ghost(229, 'blue'); const ghost3 = new Ghost(249, 'pink'); const ghosts = [ghost1, ghost2, ghost3]; // Add all ghosts to an array - + setTimeout(() => { ghost1.moveGhost(); }, 5000); // Start moving after 5 seconds - + setTimeout(() => { ghost2.moveGhost(); }, 15000); // Start moving after 15 seconds - + setTimeout(() => { ghost3.moveGhost(); }, 30000); // Start moving after 30 seconds diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index c8649624b6..b2a5f33f3e 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -70,7 +70,7 @@ body { .pacman { width: 20px; height: 20px; - background-image: url('./gifs/pacman.gif'); + background-image: url('./pixels/pacman.gif'); background-size: cover; border-radius: 50%; } @@ -78,20 +78,24 @@ body { .ghost { width: 20px; height: 20px; - border-radius: 50%; + background-size: cover; position: absolute; } .ghost.red { - background-color: red; + background-image: url('./pixels/ghost-red.png'); /* Vervang dit door het pad naar je rode geest GIF */ } -.ghost.green { - background-color: green; +.ghost.blue { + background-image: url('./pixels/ghost-blue.png')/* Vervang dit door het pad naar je groene geest GIF */ } .ghost.pink { - background-color: pink; + background-image: url('./pixels/ghost-pink.png'); /* Vervang dit door het pad naar je roze geest GIF */ +} + +.ghost.scared { + background-image: url('./pixels/ghosts-slow.gif'); /* Vervang dit door het pad naar je scared geest GIF */ } #score { From e0ac1cd16273708c57392621c89b92580fbeae4d Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:32:42 +0100 Subject: [PATCH 32/48] Wall Wall change --- Games/Pac_Man_Game/style.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index b2a5f33f3e..20582c3b38 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -48,9 +48,13 @@ body { } .wall { - background-color: blue; + background-color: black; + border: 2px solid blue; + border-radius: 5px; /* Maakt de hoeken afgerond */ + box-sizing: border-box; } + .pac-dot { width: 5px; /* Adjusted size */ height: 5px; /* Adjusted size */ From 63a1ebb381f165e0e24d46a8d7b7c8651e0eda85 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:33:49 +0100 Subject: [PATCH 33/48] Wall update Wall border change --- Games/Pac_Man_Game/style.css | 1 - 1 file changed, 1 deletion(-) diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 20582c3b38..516394f04b 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -50,7 +50,6 @@ body { .wall { background-color: black; border: 2px solid blue; - border-radius: 5px; /* Maakt de hoeken afgerond */ box-sizing: border-box; } From 66410e17edda58350af1ceca5edd031ba8f1e0a7 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Thu, 26 Dec 2024 20:02:09 +0100 Subject: [PATCH 34/48] Start screen Added start screen --- Games/Pac_Man_Game/index.html | 6 ++++++ Games/Pac_Man_Game/pixels/PacMan-title.png | Bin 0 -> 5052 bytes Games/Pac_Man_Game/script.js | 20 ++++++++++++++++++-- Games/Pac_Man_Game/style.css | 19 +++++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 Games/Pac_Man_Game/pixels/PacMan-title.png diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index 95e0ae2455..e9bbf0af7e 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -22,6 +22,12 @@
+ + +
+ Start Game +
+ diff --git a/Games/Pac_Man_Game/pixels/PacMan-title.png b/Games/Pac_Man_Game/pixels/PacMan-title.png new file mode 100644 index 0000000000000000000000000000000000000000..98630fc5bef4cb51b30b00c01efa73f6011f1594 GIT binary patch literal 5052 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

e3Q1QC~J*rRRdBeIa3YB#ss$m)QGoE)2l=~2o zXJg+8V@>;(;N(hAx-I-DPMh$<1){wB!gY|oXxK)7^;_Tudh26tCnc^zn9@bDLUWt_J$wO zW1wIX|4h56uyC{}yJr?MvG4fOG&dwFHvPk%AVO>x-gi^IqNwL|6RX}-n{MG>?#a}1 z=RxC*VliOf!#9{K`yRfd&1+#wl43AcT}8F78QP!K5#wqdaCNkdd1w^YjNq&8lE#S| z=zVVXb&<;-aul+~O)Z_y>W$qP6Lzm?z`Nfv%nWmRToFYv=7pXL^l|Y2)1G}vDQ|b; zV7HV<BTInu`~GjS%7l+BSeG(?h^lkN?z|afI^=~@+R)G@Q2s7Z2EHwQ za-FW>W?kX0wp<$qHH$xN;_3%4>{<3Nv=M!a*8{iaoq+73N*=1<_hXQdIeyA;X_*Pf z3qtwU=&U3lQc=EMLyMI@JN$RDynG7HeO0`bWS3tu)KD-~J@aZI*Zb&}>caOUgOa|g zT(yzs%7%U4`67(I6TSh)UxDhevusZ#ZXNSsF&mTLk=2Ygpi!GO&ax=0O1Cb8*^H2> zv-T!y0Ucf`u3AleD`Isw=-L|~^AR1qyR((6fCunbv2%4+u2QyjDCTDiu|019rrF6? z=Y1zmh0nL^e>B^psc&d8{^4I}o&Hh$gZZP`ufp@X(<6NqK#HlJv!{@k0cb z`9m5&tm577z5t^?`!IsM-ZI6q><|Ta#Q9X>N3%~-9T@2IwC3Yp7bvZmJspbt>A&Po zgwAizTZeyRL&~VINxpKO%~YcAB<5W@($Mk58d({*Uy974|QtYP0DkH zGjqZMnqV^N{CB!&@pj0L$U~b(W%hC#`uIU?C~ZTF=k-quKE91&Gj8f97i0NsSmW`- z9+9EfrpFw5QcEjLg2xUQ9D`4oCVQ+!7qvdsX3*s%XS2^ekT@^rXHA`gC1!S#&Ly+d zZg}JP#BA2cRO7U}Ry|F|g0?I%tSGyT zFj@2H$$m)QD}Uedi}E~k!GP;aRF=FAW9BS(n?{cA6k1erqJ)5xt%c^4VZR&9o@XZZ9b|SA~9rq zC(Axg#fbd+A>sRa^)j4yblFv+@_)wupBBjfn)ry|jCjSXSzkI&IA#v6|5&bnGP&X8 z$GxJ$ho2oVer=EyB2*?{d8F1V1=$tEx0%c|QoYFZXXah~oLW(JoR55;Fu=`^l1xrz zS}`|BqE6mlGZcS+@2IrQ25|{X7VLdu>NG*7d~NU-*=LpT#36(0eVY_70Q%X1eSW-T eC#f0s|AD7F2|!lS$p*ju&#$9tpi!fSjr<>b)9-iy literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 5889e744d6..8fde9a4dc8 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -16,6 +16,8 @@ document.addEventListener('DOMContentLoaded', () => { let powerPelletTimer; // Timer for power pellet effect let powerPelletSpawnTimer; // Timer for spawning power pellets + const initializeGame = () => { + // Level layout (0 = empty, 1 = wall, 2 = pac-dot, 3 = power-pellet) const layout = [ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, @@ -229,7 +231,11 @@ document.addEventListener('DOMContentLoaded', () => { } }); - gameLoop = setInterval(movePacman, 200); + // Start the game when the start button is clicked + document.getElementById('startGameButton').addEventListener('click', () => { + document.getElementById('startGameOverlay').style.display = 'none'; // Hide the start overlay + initializeGame(); // Initialize the game + }); class Ghost { constructor(startIndex, color) { @@ -446,4 +452,14 @@ document.addEventListener('DOMContentLoaded', () => { activatePowerPelletEffect(); }); }); -}); \ No newline at end of file + + // Start the game loop + gameLoop = setInterval(movePacman, 200); +}; + +// Start the game when the start button is clicked +document.getElementById('startGameButton').addEventListener('click', () => { + document.getElementById('startGameOverlay').style.display = 'none'; // Hide the start overlay + initializeGame(); // Initialize the game +}); +}); diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 516394f04b..d7616faf86 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -22,6 +22,25 @@ body { background-color: black; } +#startGameOverlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.8); /* Semi-transparent background */ + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; /* Ensure it is on top of other elements */ +} + +#startGameButton { + cursor: pointer; + width: 400px; /* Adjust the size as needed */ + height: auto; +} + .game-over-message { color: white; text-align: center; From 266b39c4740ed5ee423958768c109b3b92eed4bc Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Fri, 27 Dec 2024 14:30:05 +0100 Subject: [PATCH 35/48] Sound effects Added sound effects for start screen, eating and power up --- Games/Pac_Man_Game/index.html | 11 ++++++++++- Games/Pac_Man_Game/script.js | 10 ++++++++++ Games/Pac_Man_Game/sounds/game_start.wav | Bin 0 -> 373024 bytes Games/Pac_Man_Game/sounds/pacman_eat.wav | Bin 0 -> 7470 bytes Games/Pac_Man_Game/sounds/power_up.wav | Bin 0 -> 185926 bytes 5 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Games/Pac_Man_Game/sounds/game_start.wav create mode 100644 Games/Pac_Man_Game/sounds/pacman_eat.wav create mode 100644 Games/Pac_Man_Game/sounds/power_up.wav diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index e9bbf0af7e..8214cc7a1b 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -28,8 +28,17 @@ Start Game + + + + + + + + + - + \ No newline at end of file diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 8fde9a4dc8..265b3a4ba8 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -1,6 +1,9 @@ document.addEventListener('DOMContentLoaded', () => { // Get the game board element const gameBoard = document.getElementById('gameBoard'); + const startSound = document.getElementById('startSound'); // Start screen audio element + const eatSound = document.getElementById('eatSound'); // Eat sound element + const powerUpSound = document.getElementById('powerUpSound'); // Power-up sound element // Initialize variables const grid = []; // Array to hold the grid cells @@ -124,6 +127,7 @@ document.addEventListener('DOMContentLoaded', () => { score += 10; totalPacDots--; document.getElementById('scoreValue').textContent = score; + eatSound.play(); // Play the eat sound console.log('Score:', score); checkForWin(); @@ -132,6 +136,8 @@ document.addEventListener('DOMContentLoaded', () => { score += 50; totalPowerPellets--; document.getElementById('scoreValue').textContent = score; + eatSound.play(); // Play the eat sound + powerUpSound.play(); // Play the power-up sound console.log('Score:', score); activatePowerPellet(); @@ -159,6 +165,8 @@ document.addEventListener('DOMContentLoaded', () => { ghosts.forEach(ghost => ghost.unscare()); // Restart the power-pellet spawn timer powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); + powerUpSound.pause(); // Stop the power-up sound + powerUpSound.currentTime = 0; // Reset the power-up sound }, 10000); // Power pellet effect lasts for 10 seconds }; @@ -462,4 +470,6 @@ document.getElementById('startGameButton').addEventListener('click', () => { document.getElementById('startGameOverlay').style.display = 'none'; // Hide the start overlay initializeGame(); // Initialize the game }); + // Play the start sound when the start overlay is displayed + startSound.play(); }); diff --git a/Games/Pac_Man_Game/sounds/game_start.wav b/Games/Pac_Man_Game/sounds/game_start.wav new file mode 100644 index 0000000000000000000000000000000000000000..5a44df00768ae45a26939bc57e35aa4067aedbf6 GIT binary patch literal 373024 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

JF+g*c3oYA1-(0k7QzYl59@zt-{am9VE5O<{ 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%0D=maqce=ui4r`qsnMVv?7 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 z%0A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 U{;tWz-y_X$k-J|d<(J9-0YJpNW&i*H literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/sounds/power_up.wav b/Games/Pac_Man_Game/sounds/power_up.wav new file mode 100644 index 0000000000000000000000000000000000000000..bed8e582d7634aedb97dbd64ac22659518b1be6f GIT binary patch literal 185926 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 literal 0 HcmV?d00001 From 42b5b0955a758c0bdedee9d30263b9211667b06f Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Fri, 27 Dec 2024 15:19:20 +0100 Subject: [PATCH 36/48] Eat ghost Added ability to eat ghost --- Games/Pac_Man_Game/script.js | 61 +++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 265b3a4ba8..108c06164f 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -247,6 +247,7 @@ document.addEventListener('DOMContentLoaded', () => { class Ghost { constructor(startIndex, color) { + this.startIndex = startIndex; this.currentIndex = startIndex; this.color = color; this.timerId = null; @@ -283,6 +284,16 @@ document.addEventListener('DOMContentLoaded', () => { clearInterval(this.timerId); // Stop the current movement this.moveGhost(); // Restart the movement with the new speed } + + resetPosition() { + this.ghostElement.classList.remove('ghost', this.color); + this.currentIndex = this.startIndex; + grid[this.currentIndex].appendChild(this.ghostElement); + this.ghostElement.classList.add('ghost', this.color); + if (this.scared) { + this.ghostElement.classList.add('scared'); // Retain scared class if ghost is scared + } + } moveGhost() { const directions = [-1, +1, -cols, +cols]; @@ -323,17 +334,16 @@ document.addEventListener('DOMContentLoaded', () => { } else { direction = chooseDirection(); } - if (this.currentIndex === pacmanCurrentIndex) { if (powerPelletActive) { - // Ghost gets scared - grid[this.currentIndex].removeChild(this.ghostElement); - this.currentIndex = nextMove; - grid[this.currentIndex].appendChild(this.ghostElement); + // Pac-Man eats the ghost + this.resetPosition(); // Reset ghost position + score += 200; // Increase score for eating a ghost + document.getElementById('scoreValue').textContent = score; } else { lives--; updateLivesDisplay(); - + if (lives === 0) { gameOver = true; endGame(); @@ -376,7 +386,7 @@ document.addEventListener('DOMContentLoaded', () => { setTimeout(() => { ghost3.moveGhost(); }, 30000); // Start moving after 30 seconds - + const lifeIcons = [ document.getElementById('life1'), document.getElementById('life2'), @@ -396,21 +406,28 @@ document.addEventListener('DOMContentLoaded', () => { }; const checkCollision = () => { - const ghostInSameCell = grid[pacmanCurrentIndex].querySelector('.ghost'); - if (ghostInSameCell && !powerPelletActive) { - lives--; // Decrease lives by 1 - updateLivesDisplay(); // Update the lives display - - // Check if the game is over - grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = 21; - grid[pacmanCurrentIndex].classList.add('pacman'); - } - // Check if there are no lives left - if (lives === 0) { - gameOver = true; - endGame(); // Game over - } + ghosts.forEach(ghost => { + if (ghost.currentIndex === pacmanCurrentIndex) { + if (powerPelletActive) { + // Pac-Man eats the ghost + ghost.resetPosition(); // Reset ghost position + score += 200; // Increase score for eating a ghost + document.getElementById('scoreValue').textContent = score; + } else { + lives--; + updateLivesDisplay(); + + if (lives === 0) { + gameOver = true; + endGame(); + } else { + grid[pacmanCurrentIndex].classList.remove('pacman'); + pacmanCurrentIndex = 21; + grid[pacmanCurrentIndex].classList.add('pacman'); + } + } + } + }); }; // Check for collision on Pac-Man movement From bb390dab76fbaaa5499659873dfdfe5cab8fb472 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Fri, 27 Dec 2024 16:11:44 +0100 Subject: [PATCH 37/48] Score Added score indicator (+200) when you eat a ghost + sound effect --- Games/Pac_Man_Game/index.html | 3 ++ Games/Pac_Man_Game/script.js | 23 ++++++++++++-- Games/Pac_Man_Game/sounds/ghost_eaten.wav | Bin 0 -> 47050 bytes Games/Pac_Man_Game/style.css | 35 +++++++++++++++++++--- 4 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 Games/Pac_Man_Game/sounds/ghost_eaten.wav diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index 8214cc7a1b..a427d3ca32 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -37,6 +37,9 @@ + + + diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 108c06164f..af7be772cd 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -4,6 +4,7 @@ document.addEventListener('DOMContentLoaded', () => { const startSound = document.getElementById('startSound'); // Start screen audio element const eatSound = document.getElementById('eatSound'); // Eat sound element const powerUpSound = document.getElementById('powerUpSound'); // Power-up sound element + const ghostEatenSound = document.getElementById('ghostEatenSound'); // Ghost eaten sound element // Initialize variables const grid = []; // Array to hold the grid cells @@ -258,9 +259,10 @@ document.addEventListener('DOMContentLoaded', () => { this.ghostElement.classList.add('ghost', this.color); this.ghostElement.style.width = '20px'; // Set the width this.ghostElement.style.height = '20px'; // Set the height + this.ghostElement.style.transform = 'rotate(0deg)'; // Prevent rotation grid[this.currentIndex].appendChild(this.ghostElement); this.draw(); // Draw the ghost on the grid - } + } draw() { grid[this.currentIndex].appendChild(this.ghostElement); @@ -293,7 +295,7 @@ document.addEventListener('DOMContentLoaded', () => { if (this.scared) { this.ghostElement.classList.add('scared'); // Retain scared class if ghost is scared } - } + } moveGhost() { const directions = [-1, +1, -cols, +cols]; @@ -340,6 +342,9 @@ document.addEventListener('DOMContentLoaded', () => { this.resetPosition(); // Reset ghost position score += 200; // Increase score for eating a ghost document.getElementById('scoreValue').textContent = score; + showScoreIndicator('+200', pacmanCurrentIndex); // Show score indicator + const ghostEatenSoundInstance = ghostEatenSound.cloneNode(); // Clone the sound element + ghostEatenSoundInstance.play(); // Play the cloned sound } else { lives--; updateLivesDisplay(); @@ -370,6 +375,19 @@ document.addEventListener('DOMContentLoaded', () => { } } + // Function to show score indicator + const showScoreIndicator = (text, index) => { + const indicator = document.createElement('div'); + indicator.classList.add('score-indicator'); + indicator.textContent = text; + indicator.style.transform = 'rotate(0deg)'; // Prevent rotation + grid[index].appendChild(indicator); + + setTimeout(() => { + indicator.remove(); + }, 1000); // Remove the indicator after 1 second + }; + const ghost1 = new Ghost(209, 'red'); const ghost2 = new Ghost(229, 'blue'); const ghost3 = new Ghost(249, 'pink'); @@ -413,6 +431,7 @@ document.addEventListener('DOMContentLoaded', () => { ghost.resetPosition(); // Reset ghost position score += 200; // Increase score for eating a ghost document.getElementById('scoreValue').textContent = score; + showScoreIndicator('+200', pacmanCurrentIndex); // Show score indicator } else { lives--; updateLivesDisplay(); diff --git a/Games/Pac_Man_Game/sounds/ghost_eaten.wav b/Games/Pac_Man_Game/sounds/ghost_eaten.wav new file mode 100644 index 0000000000000000000000000000000000000000..30ae4a363ca541523cc9d6c765eac94ffb631a90 GIT binary patch literal 47050 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 VuK769)VXb+caAFUvghvq{{dx8vb_KR literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index d7616faf86..66b5eaf3da 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -102,28 +102,55 @@ body { height: 20px; background-size: cover; position: absolute; + transform: rotate(0deg); /* Prevent rotation of the score indicator */ + transform-origin: center; } .ghost.red { - background-image: url('./pixels/ghost-red.png'); /* Vervang dit door het pad naar je rode geest GIF */ + background-image: url('./pixels/ghost-red.png'); + transform: rotate(0deg); /* Prevent rotation of the score indicator */ } .ghost.blue { - background-image: url('./pixels/ghost-blue.png')/* Vervang dit door het pad naar je groene geest GIF */ + background-image: url('./pixels/ghost-blue.png'); + transform: rotate(0deg); /* Prevent rotation of the score indicator */ } .ghost.pink { - background-image: url('./pixels/ghost-pink.png'); /* Vervang dit door het pad naar je roze geest GIF */ + background-image: url('./pixels/ghost-pink.png'); + transform: rotate(0deg); /* Prevent rotation of the score indicator */ + transform-origin: center; } .ghost.scared { - background-image: url('./pixels/ghosts-slow.gif'); /* Vervang dit door het pad naar je scared geest GIF */ + background-image: url('./pixels/ghosts-slow.gif'); + transform: rotate(0deg); /* Prevent rotation of the score indicator */ + transform-origin: center; } #score { margin-top: 20px; } +.score-indicator { + position: absolute; + color: yellow; + font-size: 16px; + font-weight: bold; + animation: fadeOut 1s forwards; +} + +@keyframes fadeOut { + 0% { + opacity: 1; + transform: translateY(0); + } + 100% { + opacity: 0; + transform: translateY(-20px); + } +} + #livesContainer { margin-top: 10px; } From d46421a7755e43ab66eacecaad0ed0d85274e495 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Sat, 28 Dec 2024 15:40:01 +0100 Subject: [PATCH 38/48] Fruit Added fruits for bonus points with different scores --- Games/Pac_Man_Game/pixels/fruit-apple.png | Bin 0 -> 721 bytes Games/Pac_Man_Game/pixels/fruit-cherry.png | Bin 0 -> 803 bytes Games/Pac_Man_Game/pixels/fruit-orange.png | Bin 0 -> 655 bytes .../Pac_Man_Game/pixels/fruit-strawberry.png | Bin 0 -> 859 bytes Games/Pac_Man_Game/script.js | 51 ++++++++++++++++++ Games/Pac_Man_Game/style.css | 27 ++++++++++ 6 files changed, 78 insertions(+) create mode 100644 Games/Pac_Man_Game/pixels/fruit-apple.png create mode 100644 Games/Pac_Man_Game/pixels/fruit-cherry.png create mode 100644 Games/Pac_Man_Game/pixels/fruit-orange.png create mode 100644 Games/Pac_Man_Game/pixels/fruit-strawberry.png diff --git a/Games/Pac_Man_Game/pixels/fruit-apple.png b/Games/Pac_Man_Game/pixels/fruit-apple.png new file mode 100644 index 0000000000000000000000000000000000000000..4ddebc4ba4beba0d1f9e2ffe5ce676f41214e1b9 GIT binary patch literal 721 zcmV;?0xtcDP)=bUqykr-pxbMF)cttHkIk`QCWYhojDn|ML& z4JUHb7cSmMJq4!TK&}z*B@Pm9A!ZYI_`kD8AzZsgr_e~X3^oymYZ$yD#(3O2aCgGh zzgz=K70G}KQ+7GS*{)paT}Q!)Bv$z((_OBV^AjOT&Y<0}+k>-t=OBJzuRQUVFhv8& z>A|<2br{~!gPdmANH~S&D9`-Pw|TBKAZJqzaa>*E8Zc z@quSt?!lsgpq<3Eg3{JI9u2{e-C%V7vCU!lH66Q0CL!AlE7L`|Z6>ZO5;5X5&*qmV zcZkg=f~sy{`{R!b4RA@wbSkjPD3r|CE4P_xgV6I|tU6>dmRLSE(+qOPf@i>r} zLEqC)U=3S}EyQKQ;NyXc!J+DzlBz;EuphfE%Alp-dbN>>}~6DIW&SGm#e z>LD>iWUCF5!lVp;!Tv<^&UH`B{j(nY7lUEKc_0QW4+qyRejWQcH>%c+5GTd@*L#z{ zbMiIns}VXMKd4$iQLBG)6WKo^riF1@cn22sLx2GQA7a&R{Q=*K00000NkvXXu0mjf DcMeJ9 literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/pixels/fruit-cherry.png b/Games/Pac_Man_Game/pixels/fruit-cherry.png new file mode 100644 index 0000000000000000000000000000000000000000..5271b0743353cb9bb4cc86645e3eeaadc9d70bd9 GIT binary patch literal 803 zcmV+;1Kj+HP)Rk->C$}oxw!rs(7k%GXWsOSd~M1?PUBP*g_Bm^P-evx6Msq`X@YDyVQ ziqa^}ZFg?>>HBO)S+_gcoCiMK?cP1-d!F;0bM7oc2$D9guBLSB@+*|3IlwKj35C7`fl4}aJ46<7y4Kn1XXGLs$UBp@R!0Y$(LHh@*2 zlzqs9jF~OWR=^45p>1a|>F_#>9p!^PzEFW`Pzz+474p4l&<$LmRTd$*w-5mt?S60! z^nl%bfHLpHU<-d1^EoiJ`XOCL*9IEF8}J$of_~n?1&)3OL^Am??m$N4mT7TMQfcuN z?FiecqG3>Pw8tpQ4d~)@HL=h}Fp{mn3XZy|FiuY2h;S#Yq!iB3Bix$;=Rgf;0B^wu z7NKke_VVIp*)WPuwEXv6YRi~5r$&j0J=v+v{sH|VuHkG2?qpF>YnC9}5QwfH79Q7h zveABlpFq#259Vy;cOsmPy<{?(u4yiSBRuHl7f^~lR8U_>@ptbj5ek_%#n)t@7K=!B zv7`zNfV<$6v1I=#Q^o70WoJ&4ZF3!_iB-D!PXLaS80OA-aEhxib06qqV-&t}jclq) zOIusWRF{|8(I_sw=-$@H(nV3jD@cCa%Qf=H2?qyc`}Or$R;9UaN3lfS{?M|PTS hac;7SObh=CFaW&j)&}Flq96bO002ovPDHLkV1h4Hb$aHWFncBK`s*5`O|K2}z|(D;trpVIdKOgs`^JM1(D=pKTXKhrV`Z?z_I{ z&UrjHo#zc5C;7~qd*8k1d+xdS+-IC~5UV~MLTL9)8Fx`mnup1C(nW5P7usJZ56J8E z+-nDK_-6qbwjB{x!lHuCboUanhpgB3Jb4xhB-W87Fz6zjb??J&32HYvqzsca&3t68 z0Dfi-BW@fQ&4y$pmV6>JI%IAIY$b_wIbs;NTmmwuC{Ga?#@FI)lnvXnI}nWyAbPCh z+<=>#T1LlW8&PEr<6Hv0{t7I#bvkE)Txyo0LGK4xWs0V8+L;eG>yX;BKUu+-Pvd|*4+ZX! zl5DQ&?SSbqzDDg^{#0`dNZDW3>h2E(3aRS+Ta(CFH>>0cw88$Xz{hq7r1xO*=fAq% zkycA*kpy0mm%gT^yY6Uq~R*efahd z8IcuyAaAlRJFAyh^4{cd>~!a9;jV=OlDjM9iCh`v4B3)HV2q5)$A`Sj60kaWOfRt0 pIa4EPxz+MFd9e$vE%rlz0RSynmo)>z;(h=C002ovPDHLkV1lqND=7c~ literal 0 HcmV?d00001 diff --git a/Games/Pac_Man_Game/pixels/fruit-strawberry.png b/Games/Pac_Man_Game/pixels/fruit-strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..4719d06659656d49d48d10b61b3dea6297163d47 GIT binary patch literal 859 zcmV-h1El;ghWg%nvYNl4I3LP`(TA5alRe?UR_(gjj{snD>8v=<>C3ZH$5io^@1mMPYH zYu#P-?4C2HZ;oee_UzI1MH=|Q%r`UN_4mz4hGAg7yaM8g`eoc|*$0R5gwRB|O6WzJ z(OuUE7j}5;xB>STd%FmdP3Ey=S%f^>UYuu_V5Bp^qf$sqJDv2}_Kpzzgqwsb;zo9a zeXRZxX`$(g%z&I_4XATAQ0-CK4JB?|iYd}&5gxY-N`I2#26$aHAQ8@y#k)5rmmp5 zSjtn-Uz_V_pkOYJlLKKWaR#$ChFLdJ*OX-S!I&WA?iPy-W1Db|S6gC9qItrf#3C^9 z?LZ=e^JgkYw3Z zmU1>H2mX6^Ar}^IztId;#Y$@%w4ot$Emu?^>%o0^8!o4uWswM0+uFev7PjALMl1%k z=j}f)^7D~VcOJZ6=z5)eSks`5j;8J8enFN`I3yZpv$I(1=!7;hl6<+U3i94E#6Nuo z3kEqkCpdGQ3^WL`bA(p$DbS~;5PkHREG1XlQ-6Wd)`0NsJBS5?I*B?6&zua*39^v= zJ>kWbOZI@xFPN;_NM$&}J*Ska8!x?0mt&Ea3B2V82@#V-+1bdv)(m%L { document.getElementById('scoreValue').textContent = score; } + const spawnFruit = () => { + const fruitTypes = ['apple', 'orange', 'cherry', 'strawberry']; + + // Choose a random fruit type + const randomFruit = fruitTypes[Math.floor(Math.random() * fruitTypes.length)]; + + // Choose a random cell that does not contain a wall + const availableCells = grid.filter(cell => + !cell.classList.contains('wall') && + !cell.classList.contains('pacman') && + !cell.classList.contains('ghost') + ); + + if (availableCells.length > 0) { + const randomCell = availableCells[Math.floor(Math.random() * availableCells.length)]; + + // Add fruit to the cell + const fruitElement = document.createElement('div'); + fruitElement.classList.add('fruit', randomFruit); + randomCell.appendChild(fruitElement); + + // Remove the fruit after 10 seconds if it is not eaten + setTimeout(() => { + if (randomCell.contains(fruitElement)) { + randomCell.removeChild(fruitElement); + } + }, 10000); // 10 seconds + } + }; + + // Start an interval to spawn fruit every 20 seconds + setInterval(spawnFruit, 20000); + + const movePacman = () => { if (!gameOver && direction !== null) { let newIndex = pacmanCurrentIndex; @@ -117,6 +151,23 @@ document.addEventListener('DOMContentLoaded', () => { break; } + if (grid[pacmanCurrentIndex].querySelector('.fruit')) { + const fruit = grid[pacmanCurrentIndex].querySelector('.fruit'); + let fruitScore = 0; + + // Decide the number of points based on the fruit type + if (fruit.classList.contains('apple')) fruitScore = 100; + else if (fruit.classList.contains('orange')) fruitScore = 150; + else if (fruit.classList.contains('cherry')) fruitScore = 200; + else if (fruit.classList.contains('strawberry')) fruitScore = 250; + + score += fruitScore; + document.getElementById('scoreValue').textContent = score; + + // Delete fruit from grid + fruit.remove(); + } + if (newIndex !== pacmanCurrentIndex) { grid[pacmanCurrentIndex].classList.remove('pacman'); pacmanCurrentIndex = newIndex; diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 66b5eaf3da..6bbbcf7522 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -89,6 +89,33 @@ body { margin: auto; } +/* General styling for the fruits*/ +.fruit { + width: 20px; + height: 20px; + position: absolute; + background-size: contain; + background-repeat: no-repeat; + z-index: 10; +} + +/* Specific styling for each fruit */ +.fruit.apple { + background-image: url('./pixels/fruit-apple.png'); +} + +.fruit.orange { + background-image: url('./pixels/fruit-orange.png'); +} + +.fruit.cherry { + background-image: url('./pixels/fruit-cherry.png'); +} + +.fruit.strawberry { + background-image: url('./pixels/fruit-strawberry.png'); +} + .pacman { width: 20px; height: 20px; From c59ecaf03cf7b5976733a67e8178ce9f1e0d4287 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Sat, 28 Dec 2024 15:49:43 +0100 Subject: [PATCH 39/48] Fruit score Added fruit score indicator --- Games/Pac_Man_Game/script.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 18d9f827a6..e5fef180cf 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -163,6 +163,9 @@ document.addEventListener('DOMContentLoaded', () => { score += fruitScore; document.getElementById('scoreValue').textContent = score; + + // Show score indicator at the fruit position + showScoreIndicator(`+${fruitScore}`, pacmanCurrentIndex); // Delete fruit from grid fruit.remove(); From 2d996971f10785fff9eb8e5e1bd2f8ef5be96bf2 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Sat, 28 Dec 2024 15:55:43 +0100 Subject: [PATCH 40/48] Added instructions Added extra instructions on screen --- Games/Pac_Man_Game/index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index a427d3ca32..22d9f30da1 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -28,6 +28,10 @@ Start Game +

+

Use the ⬅️ ⬆️ ➡️ ⬇️ arrow keys to move Pac-Man!

+
+ From 5dd1720771a5ce11a19f566ab187958a121ee130 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Sat, 28 Dec 2024 16:00:29 +0100 Subject: [PATCH 41/48] game over sound Added game over sound effect --- Games/Pac_Man_Game/index.html | 4 ++++ Games/Pac_Man_Game/script.js | 3 +++ Games/Pac_Man_Game/sounds/game_over.wav | Bin 0 -> 245924 bytes 3 files changed, 7 insertions(+) create mode 100644 Games/Pac_Man_Game/sounds/game_over.wav diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index 22d9f30da1..9d52f894dd 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -28,6 +28,7 @@ Start Game +

Use the ⬅️ ⬆️ ➡️ ⬇️ arrow keys to move Pac-Man!

@@ -44,6 +45,9 @@ + + + diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index e5fef180cf..9fbcdfc4f5 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -5,6 +5,7 @@ document.addEventListener('DOMContentLoaded', () => { const eatSound = document.getElementById('eatSound'); // Eat sound element const powerUpSound = document.getElementById('powerUpSound'); // Power-up sound element const ghostEatenSound = document.getElementById('ghostEatenSound'); // Ghost eaten sound element + const gameOverSound = document.getElementById('gameOverSound'); // Game over sound element // Initialize variables const grid = []; // Array to hold the grid cells @@ -278,6 +279,8 @@ document.addEventListener('DOMContentLoaded', () => { `; document.body.appendChild(gameOverOverlay); + + gameOverSound.play(); // Play the game over sound // Event listener for restart button document.getElementById('restartGameButton').addEventListener('click', () => { diff --git a/Games/Pac_Man_Game/sounds/game_over.wav b/Games/Pac_Man_Game/sounds/game_over.wav new file mode 100644 index 0000000000000000000000000000000000000000..47f21ac751a71f23a7870991ff581c933b204bce GIT binary patch literal 245924 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 i_xfFa1KVi-D#l6h1 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 Date: Sat, 28 Dec 2024 17:02:40 +0100 Subject: [PATCH 42/48] Duplications Fixed some duplications --- Games/Pac_Man_Game/script.js | 53 +++++++++++++++--------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 9fbcdfc4f5..d2f748e160 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -196,7 +196,7 @@ document.addEventListener('DOMContentLoaded', () => { powerUpSound.play(); // Play the power-up sound console.log('Score:', score); - activatePowerPellet(); + activatePowerPelletEffect(); } checkCollision(); @@ -209,21 +209,12 @@ document.addEventListener('DOMContentLoaded', () => { } }; - const activatePowerPellet = () => { - powerPelletActive = true; - clearTimeout(powerPelletTimer); - clearInterval(powerPelletSpawnTimer); // Stop spawning new power-pellets during the effect - - ghosts.forEach(ghost => ghost.scare()); - - powerPelletTimer = setTimeout(() => { - powerPelletActive = false; - ghosts.forEach(ghost => ghost.unscare()); - // Restart the power-pellet spawn timer - powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); - powerUpSound.pause(); // Stop the power-up sound - powerUpSound.currentTime = 0; // Reset the power-up sound - }, 10000); // Power pellet effect lasts for 10 seconds + const addRestartButtonListener = () => { + // Event listener to the restart button + document.getElementById('restartGameButton').addEventListener('click', () => { + console.log('Restart button clicked'); + window.location.reload(); // Reload the page to restart the game + }); }; const checkForWin = () => { @@ -250,11 +241,7 @@ document.addEventListener('DOMContentLoaded', () => { `; document.body.appendChild(gameOverOverlay); - // Event listener for restart button - document.getElementById('restartGameButton').addEventListener('click', () => { - console.log('Restart button clicked'); - window.location.reload(); // Reload the page - }); + addRestartButtonListener(); } }; @@ -282,11 +269,7 @@ document.addEventListener('DOMContentLoaded', () => { gameOverSound.play(); // Play the game over sound - // Event listener for restart button - document.getElementById('restartGameButton').addEventListener('click', () => { - console.log('Restart button clicked'); - window.location.reload(); // Reload the page - }); + addRestartButtonListener(); }; let direction = null; @@ -533,19 +516,27 @@ document.addEventListener('DOMContentLoaded', () => { // Function to make ghosts dark blue and slow const activatePowerPelletEffect = () => { - powerPelletActive = true; - clearTimeout(powerPelletTimer); - clearInterval(powerPelletSpawnTimer); // Stop spawning new power-pellets during the effect - + powerPelletActive = true; // Set the power-pellet flag to true + clearTimeout(powerPelletTimer); // Stop the previous power-pellet timer + clearInterval(powerPelletSpawnTimer); // Stop spawning power-pellets + + // Scare the ghosts ghosts.forEach(ghost => ghost.scare()); - + + // After 10 seconds, deactivate the power-pellet effect powerPelletTimer = setTimeout(() => { powerPelletActive = false; ghosts.forEach(ghost => ghost.unscare()); + // Restart the power-pellet spawn timer powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); + + // Stop the power-up sound + powerUpSound.pause(); + powerUpSound.currentTime = 0; }, 10000); // Power pellet effect lasts for 10 seconds }; + // Event listener for Pac-Man eating a power-pellet grid.forEach(cell => { From 57d2a3c3f7c586f4cebecbfe3789c229c97e15c0 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Mon, 30 Dec 2024 13:44:26 +0100 Subject: [PATCH 43/48] Final things -Code standards -Update ReadMe -Changed screenshot --- Games/Pac_Man_Game/CodeStandards.md | 63 ++++++++++++++++++++++++++ Games/Pac_Man_Game/Img/Screenshot.png | Bin 25980 -> 32903 bytes Games/Pac_Man_Game/README.md | 12 +++-- 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 Games/Pac_Man_Game/CodeStandards.md diff --git a/Games/Pac_Man_Game/CodeStandards.md b/Games/Pac_Man_Game/CodeStandards.md new file mode 100644 index 0000000000..b228671bab --- /dev/null +++ b/Games/Pac_Man_Game/CodeStandards.md @@ -0,0 +1,63 @@ +# Code Standards + +## 1. File Structure +- Keep HTML, CSS, and JavaScript in separate files. +- Use clear and descriptive names for files and folders. + +## 2. HTML +- Use meaningful HTML tags. +- Link CSS and JavaScript files in the `` or at the end of the ``. +- Use meaningful `id` and `class` names. + +## 3. CSS +- Use consistent class names (e.g., `kebab-case`). +- Group related styles together. +- Use comments to separate sections. +- Use relative units (e.g., `em`, `rem`) for sizes. +- Use `z-index` sparingly. +- Use CSS animations for effects. + +## 4. JavaScript +- Use `const` and `let` instead of `var`. +- Use `const` for variables that don't change. +- Use `let` for variables that can change. +- Use clear names for variables and functions. +- Use camelCase for variables and functions. +- Use PascalCase for class names. +- Group related functions together. +- Add comments above and/or next to code to explain it. +- Use template literals for strings. +- Use event listeners for user interactions. +- Use `setInterval` and `setTimeout` for timed actions. +- Use `querySelector` and `querySelectorAll` to select elements. +- Use `classList` to add, remove, and toggle classes. +- Use `appendChild` and `removeChild` for DOM changes. +- Use `addEventListener` for events. + +### Example + +```javascript +// Use const for variables that do not change +const gameBoard = document.getElementById('gameBoard'); + +// Use let for variables that may change +let score = 0; + +// Use descriptive names for functions +const initializeGame = () => { + // Function logic here +}; + +// Use event listeners to handle user interactions +document.addEventListener('DOMContentLoaded', initializeGame); + +// Use template literals for string concatenation +const updateScore = (points) => { + score += points; + document.getElementById('scoreValue').textContent = `Score: ${score}`; +}; + +// Use arrow functions for anonymous functions +document.getElementById('startGameButton').addEventListener('click', () => { + // Start game logic here +}); \ No newline at end of file diff --git a/Games/Pac_Man_Game/Img/Screenshot.png b/Games/Pac_Man_Game/Img/Screenshot.png index 2fb1a59e204d6ef2f316bc6dd8a0daff44b7a01d..e2a5d12e26a5ba4bf8a11be166742d1ebd248f09 100644 GIT binary patch literal 32903 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 literal 25980 zcmeHv3tWFTm&Yyn#<;MsF;?s3&S8YKc#+^nW#=3m;A$VpPYkeO0XH3`@=N}MR)zkRk zm%jyk@A5qYagS`K{c#-l{qG0X?g&F5COn4!A5(_CwHJZ#o49V(_uCHnh&Tt&+~5(A z3f#EsEx+S`={+&_A8W@@DyLk$^1|sm|1Zb<{i_c@n7m~6ca7hC^|1x{$&)n?8;)$O z_-=j0!OxeE+qHhe*UM*d4)O*vj@}+g|2RHshV{_zH((W&p zj>Gpn|M5tkBwJ&Hi&RbH5qNoa5(ind)5CZNnb;wl3(@TG633)OPI`KJ$OmA|i0`ho z)DZs$Kf1bU%IPuigO3BQO*K4m;QzoAd8`{w`A=hQ&&{5mzEUku!<-@7s!O^ouJ=F4 zc7+g#pLw5`z+V}0JbTk8@V}dun*IML-Z>xnnRDciR>O0JSl>Qk_OOnzi%Vl~tjxJA zfm+fFCG>Rl2GZ^H>g0@cr1nv|S|>p_=&VRv+^NM|+!=a}yS!$DyWET6?#@J$?oLM_ zmOS=P=8i>JA3Of)PSw)bVqQwRx}0(+ogCf1dvkuqgSFB8E$)zj>cQ%$5UoKVwtK;w zwe#Mlq?{J3^O7h}cY_?1bbr_VTig9Z*((4%?qaHOYSefo9+?)7qAS-4{`axAo`H|9BN4P&b50hoxw_4)}L&ZRC}IoQ45C?ES6N)@M?(#Y?On#x!jov%J_e-3}iHm;-^DkAuy*>QLJKW;PkGw2B$=Tt%A@d_q~d4KpYz^IZphSe=EY>zs9 z^5n@+u5_3F7UvLax!f6|%QO8~`ag=ib;BteQu{AYUZSk^ZbIYG6{m^!x-4RbTyP5q z4P{quli4&o_zXm}vOL|C7Ef10<&}t7X&a=tn6-7Xz${t3WTmgpH7Wi0FDX zU*uf3Hfo&Y@+!>@&y&5+ar(KVET8&5Sb3krsk8;3J$H&nVM0(5weR>#qF%{1n>A4s zCVf?+*kVsml4}NS2gAM?i`YGp|7lVC_L{_-XXiUZ#179ZpUMxNS63>$W)~F|RS~M< z6%`y}V*j#1^n=x5|L=J z5+fmPtglrx>oU#_Sysa;$JZnk^pEYaUk2@=t?#sT%eOf@DGSoo4Q22_)ABL|vCd8N z5Qqiq+t7^hh^bdF{&_cva!EWz52Ivt zlXeKDZnZ7)tn|XDoOHSp&;E2?FKi+uhuz%0i|Rsv>3H5#Hwl=fL#w4a6A zMSZGrwjvUY#>=WCH8mD3M?U?3>Bhp(Pd#~8N0Om0ppPQE_ z-)#jt)NwVi z%OAQ#`o1hre)?(hE@lX@qN2b^`#^m&6z(=?1gI3ox8O~fY1|8745)KhU>(6Ah*Is^ za^om$TCV3KcuWcwwlJjKhlhXJ#(n2K&MfmkGi%+6eYSjy{~T@}XO=plA$2XPRAyf) zb!_jO@JM=gM;aI`DFta81LkY@7d4ILQ<+yj%-vyiUan*87X}2)3w^a*q2kw5h_*3k z$_mn?GTf!MqJ8JEmCL7NAhk?;@>Dc%Vrfh-x5;18KDbV%YsOZzslXa=t2+CBOFm3Q zAkKhb;e%cD=mOdc7cO+PL#pNMKPT}Ii+)+X0=&1h?1zJ6Ys_$|bxDkl2pcBzFg(YPkSrVY0Y{WfF3RQ$J|u<&1)u&tK= zpoz`S5EQoPFK4BRe6Jc3j^HI__Ws>aX|;9_JbQaeTg(wxXXhks4Eq@lKO&h5MI^1L zh@FJz?ilLf8rzAwPrw-zAB^_h5zJ_oBA0^=;Y);fMUzTS1_v$|BbF`$$9(v)6(`_6 zBhCd|2D)!p<6pV^L(!z4U9$p|OX-HU^_jzWwq=0J4v|(3oT>*KrR@|%q4;~*KBQ}gL#FlXZ*q|MdRt+4!2Y1i_ z2YKX}b&UVm8xW92Tf)us%1gHksD4m?$;}X(IFvKdWX7x+r1IsCx=N-@d6H-qTqgq| z%TU{4Hbvdow3Blx!;mWCw&_SIqaD-%zalfS|-yv{>ojKDA$6#Jm#);plY2H7gB7y-%-}hgh#Dm{eeR3!BXj zb1SVK61i9PuQC~|^1l96o*}D{cc-wbsU)z-Id55H1#|Dh+iA6dw7k4LQctqeO<^ED zMDK12-Y%F13TD_kgKrursS=E@5-aVpsMx3Om_Y%9H>3&q`*SRo8vMk^yBoDy-?cMH zww>c~oxt2IAY=T;!{*?x$==^HJ zvNIQ81cr_q?0>{}n89Y_EjO~BN&7K=+J>mDdH3L`G7^Uq+SGvD+z?HIxi*~TKe~9O z5n-QjeeIjL5Z*v3n)u_rs)5)N1e;~r_qf#ErohH$?)lLp6vnh0WPVgr3Y&BfL_1&~ z>1-L>D^XKqF(ukPZywfNGu-8M<37{@BZ(~%Bd zeB0c{kaumGIpVw@7M{9e03#!Q9J!1Zb_&%px*@^)-;Yo#N8eYTaB%XWyTn(wk?SFoOQDggS0Wsu?g7a= zav5`G;8NMG%-#XJjxUPktH#vKTcz%L>!?s>CFAm=RiXIXiF6Hi`Cw~fv^yYQ0f^78 zBQX}J+;@Dv0R*S;?0h)9EGqKC#RAZVjtPZ8v=E@YjQQgWce#8LoG`5JhvdNGg6LM! z%&@+}OoKx6B=I2UfWwo{_&>hnxkA9jtXdP>56u;%Kp=@WVK*Xu$5#X+b`t|9R_##= zvZ`bc@!n;Ob*Dwlz{9)=hP(XC^uQlAE?(X7ftemO=M6j_u*{Wh@r{Op$mHt(Rytrp zABNu}Bx4=nz(j)``V7Wp!OwRu2NDo~Rh&IIo4;xEhh#M3NNtDq<9|)`K=`B=4rhl{ zO~xRexzD$%O}YjHVsK9CEfI^C@LF(}oG3ts6$Kg%D>(wFW z{~dpFNV>;hB1Zj_fx{2r+rft)Ah!R7RUHgifb0__p2md%Da6o)0ojVG3S^DLAuCP5 z!h{zfmu>+W30ma}2egiP`t<9V^~R)72h!o8Q1X^gp8d#V;q<~o+A)YE8+h*FvJQOQ z{-SChd*2r1E@Me`mCxp35srhLc8VQ5J z=~=^c((IQ%TWRi2rK|T9`E53g{*W$8H(?!PDig!xe$BU-ga&cI&4S^O-!{3)mk}N7Eomjj;AD+dig3<_li_Q_i zV*kXqs~r9Y?O8!GKdhVZJ>zl-1;BR|zf`-H9;#ckz^V`m7N0t#76}N!!K+=h)8WLRhL-nqIExwtIDx!Hlz<~uijRZ^O zG-flMyc}OY91HRi(>_W(q?@oBOg#6A3^!L@@&v{p)2im3zIN=yjHsXVsB73c06ZLj zCWeQ)gJNO;ev#bExL4N4s2|_?`9$cV^z_;Cy<3veBzhqa0QSkr$q*(fu4R%f6jqOl zerYE18FhujmK#>-{F~WYHW6*y$%k|)Gs^M+)U|?S0NaVS!d{Smt~b;iz~26A*aq(j z4SuYQ5tZ3~;cJC(JwP-E0K#8<;12!>(AUMut{DJ*P0tcSaBk!Dp^=YJ*`N^{5YFl$6;zKViG?OW$&Ku;?*>qDGYFzjzVXs9xU7vDEpQv=;!P#~d7^l)Tgh=E zt1HB?DKSPM@x6B-8n6#iT+`$&EiJlooEpZ@3n0(_;{T3yjOHJL%Qor`*GhKQO5B== zRWLt+DdH|GNHKfzCgSv{Md65!CP4h>ih-aXG2+<&Ti}Ln!OKN( zEN0plZEI_;?Q9063VCm>o2QaXA{BLD_(zx58kZ%l?5_LArr*U#uE!_VkDvyUR!cVTk-?| zUI&^C2{D>24E-$S2Bft^yT+9vA1+m?Dt`fkHWucpDQK>tF!$Pj$QN?SSuBYk)_1C%n!Wtdk|BQXQiH<4({Br;Dm-D0+ZKJ*IDLCT?)W%GH0m$Uh#b1!oM-KML623kR!qcI( z#+OwfWIYo{VSZBH2I`y9Z~@^}NsPe|nqy1b%y%bgqx}K?4a$shEmMQeU>g?St-_mU zj~*eM9XT*Gn&PP21A>-4Alh6S?6Y~-Nkf=0TT=z+=&cXHpxz8%SB<`OMw{LT+0aRU zwHuVUK+HuI7w}T{1q1}>Esot#MsLt3Nz5>PKNNXh@NDk|N&6I@G`%?VJi8R=7`n@H?rewQx<<(d1~(&#!qta=cUzBk+D`2lOP(p`(fe(_&L5oZ;3yn z#}jt@9Q=>A&zC`&TN(GlqBSPF?hmRiprT*K<=diLt7xKNY=+b8qvqQrc&;WLslJ9x z2Lub8J4xUM-4)fr%a7=~za2Kx=;012F9=lFIwDr1qstv!+IXD6EGL(v`cFt>H( zXq6QUnBF44=JgulQDU(iMJbhcp*^vm&6V5N`2iZ%7o7Zlx=wu^I(* zL4wdT!%XC|y}5ww!Lq|p)7eyaR&SfA)IJQynnp?AH^D7z*Mv}+7a*3TH8Jh-$0MWf z0smrajr0woXl1{w+VW>5@~tVx7iAljow070=`FwqI00 zAH;0XnoE zCDT)0;Lk3g?6b+sW87m;%ZSU1z1WdeBu-~&J5cszub$=1LD#n@yPQJ`RqOKBfsr5l zii1;sSwMAM1*UZM>?D8?)oMSQ<{j!-c4f#AjkQmh-GDWH7f|drJOc4Y&rvgAwZ86C zcv7CCmeQ5dsHnExNV5_sOaZwQULH@Ut9FK6T^Qphn{t}suxoouhQP`{7pepJ#%mL{cH(gXv;HR$C%K?|Cl^_hLk!TMRE)H7U-N-&F|+k!vtL{vCmX-vsX zS85B=qqyi0`^eq~4cn|dqs-zoqt{t<{Km2~N{A`)yJRzew@yvfN8v@JpiojADUT!y zPt|NxCezpC=og>ZzGA*eGtQL^7rl<;ycP?Ru~^g+v3j1HyCTmPeKHcri z8}%o%H{v)EV2d*eS+q+&ay8D}CTo>?=XmM^m+4#L{pNvLx-?7ES>l(rEMw}Q+rctf zA2yFsZqufaTL{f4`SyAb>>2n(^<_i1?9d_pR0TN<9y|)Vbbi7Z|W;E_qd~UL) z{Q+It^e7EWk|n60E0?gjnzaOeNAA|JL<^FN?wi-h#3QMg6@7cCMXKL?BO>(AQJr{B zg@q4;v$>2dXQ7r%&j^#Zp&sDEHTwuJb(1h@<&TS~`YDV$k@|NO;~=9t(EmWT_jRYr zWMTrx7d4GbC90k{QP5J=oOrR*J#x}MI()XnTvLL3N>$W3{GfV`cj$CCyHo;W=KTwM z?P07C)QB2Fm6PN#c#UuY_^8s0>KeD?3NF38(QPApTtg`s5oSAG$qy2hj@85zoX9KE zC#bu!?a8Q1ODGOIQyirQODuds(40cmZ>dr0vw=__p2>2fEy~{6Y%`exRbEufGr7gv zxcEaD9Of1^H&N($Q|^0$&HkidleT?BnNoOvQ*@f<{Gl1quOIoBmg5q&-^JNilNPVT zI7Hl1I&>7Ktbr}i-oWw@7{vlLN83(anqZ!l&$Yy`wmixmB=PY)59Do1;*Je8MK8^n zQlz;T71dWzAM&EsEh!j{lbkxt!k5NmR54eb@BA)mkx^}38LdxLXAI~YwtMaG^#i{8f{kcxHAZ& z*=g6-9&n}jpd!OXut|dZJ;L$q1qF2aY0Y`gT)3JybEa<<$GqN+K+x@z>bzD}+Dsw! zlw9`|EXg7gJHv3lt9brCw$1s6doC7RO*x%Nqd1^7s>&avL7oDu04I_)rJzO}-uipM zIg+k{K6j#|DzMUo{)wpj*qp=*Lur10K(wKJd?Nmeeq!aEsySd>9z zToPmnILOPgAdaqUO++f~P>nBo1)eS0X3t>xRH}}KwW*FD&=){YTZ!5-QZcQU^Z;4b zdbMJ6UhP(31Fek~X>kNpf%byP5~8y_3s1^b*XR>53y2yGdW&PDkCPGuvh^376S_)= zrVSig8#DSAEqpw;U^C%1_`o9WGPYF2qEVLVwv;&Q*ov*?Z0-(P5pC&%cuXLw_q8a1 zZI*N;55yv@6HeiMeMJq#X~&M)-1ZV2+6e~%9RL#oeDWza+dO@i@9J?Bs~PHWc`O?D z`r|e#v50f13t#QQb87K%dYOz~aHYPj<#`2z?j9V>`BrjU7gfZ4<^)Na%)AL{=~-GI ze8N`QQS<1lwB8@$EXP|oe;u(d+25fQcI*`ZV*->;m;L%id`6l$gu3^J=TwFSrQ0w6 z4Vh!<+NZ$z1f!-O(iBNDX9S|S<(@i#_-(=2>mkpk4N&r}{3$Vw8lAfxSFy)RpOx;! z@oDcZmJlRCC`hPiyF4v?xnQa%JgxBtLmwe^- z4MSnj`3JhP@EOidjXv~aLWU}oG47ebfhCW3jZU7CqVJTl=}GT9%+;iFHE0O|dXd;0-hic)mVp@Ym?+ zAdbVn46Odgns@_oZ{oxRiV;~!iU;9IVT5K4)NIA{Q>-hX(qH$8A{oG1XvicTJ&ig& zI;2#DbrGgHT@g$66C_qPEKh7p7L}-@UuP4dcXIbDGliW&r0`BBw0c)|$Fr&^^{H%U zN>JF#4n^$=ANuQ`3Fks{iQUJqQzKhJ1a~}5;M|hvM9QK|u=dlj#Zr6)NBlbq$xZWg za$l@`HtlZ0Ms!Leb`EnFR!PWArzAD%o_LbQZ360a#@Qqvx`rcJV&_VymOrm7i+yps zMRHk4Uu&?Ce3&UxMSftS{;yiqX=O~*d4B%a@*`xHz%WB1jUY@zL3?pE_9?e0sx?L1 zquNT;<&(^Ak1wDSdorvnwgqsqsE*K21jQ4PSkry6-Xg~6#vc5nX>k??&>L;m+f!&g zjR_?kkBgO3b&35Qu1_XPgxW}HP%gkRTd<`;_V>+d(h4?3gD|i5+Oq9dQy3wPZ7lL4 zN(ILsUA60`{R9O~8l6MhUkz;wE1*GVIh}O3mNl;PozIciAh*^&MzNBTv zwq)9~X;-`dv)(f7>o5(}?9Fm>!YmG3-lXizO9yV%PjPW;RqXXf^1Sh(9EMiC=;1z7P+0i63}NHp~DWmzC|+HS+B zoB*=7hL1>nCrAxGg&EM&IpdShEgxiD=jrGtX(0VKPuEBuA6@ttNR#{un_6}~(Z zRF4(h1#=CRUfXBGl?O2Z=9+rF%qPD>N*R4YJbScI+t2cJ2DuKCsvwL?4^2qsP+)dQK@MhJ8u7l~jXzz> zPnUr6rS1%>5`oCk4IP1vq(oHOF;|2wAgg&-7P;kbo*i*pS=8^^H^8LvfzL{wp$#Kv z)#wT|J3NMqHDK)qpmLgUx~Mt%n~HBAZaq4_>FBPYniVhC#J)&vkz5i^TNlWsp0r*J zxa?`FdrM$8N(GD#ns>e5ef?h^e^n;nm*?4sU^NYvEy})!;J7&Ci^{30p5qA`M=!KC zfhWkIHiw`ao5kt}#2(#aW?q5jxw^(aq%N;EBcaxbo4*aMZUGUUy{m#jB?^QhPj=Bx zw9KAa9WAbsTA~;md^?ssC)b~ta&okpNC7HV5;oo zmrD9JPNiec6%ktVlC+%=(HVwi2pw6CiqKF3-T}&s((#gjlkb#M(wB_8jI~L-NGcwC113ErI*r!% zSn2K-eO1*L!1bZ|k{(A!h$nfb&(n9kgvPZq9ba#gv(QcYC$SWjN`Tb4;>YLtWYK%b zM1E_iGg9AImZ5)*)U6ETQ&2nwrvctBcdr&-Ku)%@$mpA}_-k z)<-H%&7rKw&;N`cluF$p!mahblnMKYbKUqY7m}m?35rW80K$ZnA6>B;L|T8l6^vER z4G9HNOk}xb2tJo6NL7TDgS;e7oF%|B!ZWiNhi}tyk=!^(ajSr5t{}C~<4-^5mQMh7 zdJ>1U!ba9{t+FWdq19+h4#u$t%di*EeJZ=x-pKP0R@W_bGr=?W;PP zHFTDYVBM7gFJ(utI9>aj1kT=_aM$vqZV*EhB@Alw9jutP9Zd{nn6KE13BolhYvRh# zq!US++Z*JpNvPFy70KxeN4e+?#-*4?$Sa3U-7jh9!!dj(Aw-R(dt^QS2gs}D%}hIQ zK;arJfis2G2&?uILwWTuE8|8$)cncF;)_p2R41uAS7lZr@^Y!nmuhEW8`9EeWTa)U z_5s#sx%Br|O$zZ|3bDALIh-!7*(z^*%;Z2nL6!DoAFpWH@iPAq90qz(&vs}j+KEwj zy;PKh)qCSu7+p`ixi}1?))BMH9TFG0Rr|m=q2ra!g_7RIp&0y0IPqP()Zj@bE;VUB zPd?SQ8>^vfnZ4WR(j_ub))4#{`E_o^4+kTZTjdw)n+Sp+d8+wdMPScU@hRnWB8cX0 zlT(76a9PCmY*bx6{ou=1!dWGT5S^V;O-D*A=bfh#_$}8(jK~~L(>`&VoH_#qspaNNRP;GjlOoXri0q7Y%8OzKw>mOSUpEQ&JG(`Zt1csUmkF5Bopu^Y91&8>)kR##L*^~ByGp z#jt@CAcd&r8z?4u#m@~Clip`5Ss7G%Q^<}BMoCM59|a&@V^WZypqGNIb{m86u-Dt<$#zp3zST+MOtOtF1wesQRzI%=I^lK4JO#WgwU9lg$EUR;hMr zyLK{Sw`!1dke}zQ%rVe$8C5A1B4B43)Yw4%E#*0bT40;XwnFtS;$bLYa`#vD0VN+{ z{Tl^o(){@jqw5cU%>w1K-ypOe_P+Nh;w4}z8+d6L(m>5gr&Ya#2Nk;%Jr1$`Q|ers zCo9bzACS&N{;=-8I94_0?nflzL!*{)gPPmmtK|yEvYS1p0k0GgrYEEV;`>`Jt)!uVk{mPR@oUivi@=S=n2Uq#h&=iWKdKGqA)JXNQpNo zzXn*ffYOQ9_bUOr012}#Y&4DsoG#XOhrlTuAFlhs)xHc0hGC-gz?ma%q3KSrW)J?Y zj5jJHXnAsOTEkG9z6Y8?9K_)STmCo+|I-R z!Jis%Zef1f8zPTE;RlNKS1|jDQ2$?-bPbmJ4M+n)f1JI?QjPQ-7kgmL2a*;e2Ny`G zK#VZP219Q)Pz@48z*!goC$K;YY^w&0>3EpgQ+(*2K}KxPflqNishSJa#J;^lJ0}dL z-VX5Y??e)z{wgNe3xG{)oG4fm3bS)ZpK<_Z;Kk*KjB?U`VV6lWI&!beD8Juex~0Z&%L{|HR(z)7gR(O) zy*<-RHueZh#zQqH07k{b6~qM4`(+3bemHIZzr)4Pz4Btbh0*25j$rx$Rz{sc_cc;F z1neMFde#=Os6f}3|NYhgog+jjK%M>p;*9e7*L*fj%4K>}K1SZ}L zvA}6CelSv+2h0c%rAgrc=N-Zv7}$0Qe2`U_p*inuuEF)J}j1+E{xLq z7N+FdQHCm+K%8i=ZcB_>M7XlYee3I1-@*`>h5syR{_oNoc3l7;d|O))IH-U{-EX}Z z)ZQMARF#{45hm~3XG;o>8I_-5;80s-IMN%jKeoP0;?wVh-o3$K7sdRCX0e`6IR`0} zplOh6sH0|YPMN)C{wGNzx1ATDzu>QMT;TRhoH)?m1OWLZ+AV*0^^?nl@$SkXT`kH{ zBa%>xDE8~J0_yMR`urKkkD59b>?(FXIA(xOIQ*o8@YfQOiZpUSYrA^L%cbVDtem^@N&k!-IUq+S zq_``v)Mf{bq@RJ01(B=EcScTWrr6apx=s^+{wLG~Fm`{xrmk%FAo&sZS z47NcFgP}rYzr`}I6&YRi+5qVy$16YFZXhxY5`Yvo!#C8?q8xOldGj%YdRhp78{t?I zu3P&3=f8=RY2@$>%}vxGB0wM>%lTghNaBqLQzdYVK#In9KC0gN$La;9BseKX`tI-eH_7+6>IZ_uNyuEd0DAJUbYV#vznP;?y? z%_M`M7KzyO!H7;Oe|_hq=~L~QTvOAYV-7MP!kS9n>3S1xb~~6OM3WdfLc<&KB@S(C zk@oh!iUW+F|N1T7*_sh#>wAdb4!){O4A_cnmZ|w}{vq zsXt>$*PF%~0Nu-iQ-)6>!eKlVM1fJjIV@AsvyF*m#Xy^2xYZu)feo$pj71u_S>D0- z3KF*W!hS(HP|GoNxP}9er6%R-+d8mX&+D%Tam(9@up45AnB3AHxNL$(j;8LO4=5v! zCE__EfOGf_^k#8LFnxphMsEaYB*`1ayte)lj*XXS+&QD}bK@v-$>{!?iXcKnz7zwebl-=ckBgC09z!EE{KAy}J~;io%HidN zg~)^Y;egoCX|$5vsNg9TNbpSZ`1Pi}0^%oA6>rO+l|C@g0qt`{TPM>T)|P$&s+~sq z?O)Z=*dPlwa3L-{h5O!vpEqqCTB2qK^*0cCQ# Date: Mon, 30 Dec 2024 14:26:54 +0100 Subject: [PATCH 44/48] Sounds -Loops power up sound -Added eat fruit sound --- Games/Pac_Man_Game/index.html | 3 +++ Games/Pac_Man_Game/script.js | 8 ++++++++ Games/Pac_Man_Game/sounds/eat_fruit.wav | Bin 0 -> 5120 bytes 3 files changed, 11 insertions(+) create mode 100644 Games/Pac_Man_Game/sounds/eat_fruit.wav diff --git a/Games/Pac_Man_Game/index.html b/Games/Pac_Man_Game/index.html index 9d52f894dd..fbcaa99a25 100644 --- a/Games/Pac_Man_Game/index.html +++ b/Games/Pac_Man_Game/index.html @@ -39,6 +39,9 @@ + + + diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index d2f748e160..7e3d7f7505 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -3,6 +3,7 @@ document.addEventListener('DOMContentLoaded', () => { const gameBoard = document.getElementById('gameBoard'); const startSound = document.getElementById('startSound'); // Start screen audio element const eatSound = document.getElementById('eatSound'); // Eat sound element + const eatFruitSound = document.getElementById('eatFruitSound'); // Eat fruit sound element const powerUpSound = document.getElementById('powerUpSound'); // Power-up sound element const ghostEatenSound = document.getElementById('ghostEatenSound'); // Ghost eaten sound element const gameOverSound = document.getElementById('gameOverSound'); // Game over sound element @@ -167,6 +168,9 @@ document.addEventListener('DOMContentLoaded', () => { // Show score indicator at the fruit position showScoreIndicator(`+${fruitScore}`, pacmanCurrentIndex); + + // Play the eat fruit sound + eatFruitSound.play(); // Delete fruit from grid fruit.remove(); @@ -522,6 +526,10 @@ document.addEventListener('DOMContentLoaded', () => { // Scare the ghosts ghosts.forEach(ghost => ghost.scare()); + + // Loop the power-up sound + powerUpSound.loop = true + powerUpSound.play(); // After 10 seconds, deactivate the power-pellet effect powerPelletTimer = setTimeout(() => { diff --git a/Games/Pac_Man_Game/sounds/eat_fruit.wav b/Games/Pac_Man_Game/sounds/eat_fruit.wav new file mode 100644 index 0000000000000000000000000000000000000000..420c02b7a0ebbab6bb0d642fa931c724fab09808 GIT binary patch literal 5120 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 N;5$?ewEF*ve+S!7gIWLp literal 0 HcmV?d00001 From 5d5a25770c6a4438e466fe65445879e10f884797 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:38:38 +0100 Subject: [PATCH 45/48] Auto lose fix -You no longer lose immediately if the ghost collides with the pacman at the spawn --- Games/Pac_Man_Game/script.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 7e3d7f7505..4a3c942178 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -468,6 +468,8 @@ document.addEventListener('DOMContentLoaded', () => { }; const checkCollision = () => { + if (invincible) return; // Ignore collisions if Pac-Man is invincible + ghosts.forEach(ghost => { if (ghost.currentIndex === pacmanCurrentIndex) { if (powerPelletActive) { @@ -484,15 +486,22 @@ document.addEventListener('DOMContentLoaded', () => { gameOver = true; endGame(); } else { + invincible = true; // Set Pac-Man to be invincible grid[pacmanCurrentIndex].classList.remove('pacman'); pacmanCurrentIndex = 21; grid[pacmanCurrentIndex].classList.add('pacman'); + + // Add a brief delay before checking for collisions again + clearTimeout(invincibilityTimeout); // Make sure to clear the previous timeout + invincibilityTimeout = setTimeout(() => { + invincible = false; // Remove invincibility after 3 seconds + }, 3000); } } } }); }; - + // Check for collision on Pac-Man movement setInterval(checkCollision, 100); // Check collision every 100ms From 57627747311adaddc13888248e8f0e26cf7fcea7 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:51:40 +0100 Subject: [PATCH 46/48] Revert "Auto lose fix" This reverts commit 5d5a25770c6a4438e466fe65445879e10f884797. --- Games/Pac_Man_Game/script.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 4a3c942178..7e3d7f7505 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -468,8 +468,6 @@ document.addEventListener('DOMContentLoaded', () => { }; const checkCollision = () => { - if (invincible) return; // Ignore collisions if Pac-Man is invincible - ghosts.forEach(ghost => { if (ghost.currentIndex === pacmanCurrentIndex) { if (powerPelletActive) { @@ -486,22 +484,15 @@ document.addEventListener('DOMContentLoaded', () => { gameOver = true; endGame(); } else { - invincible = true; // Set Pac-Man to be invincible grid[pacmanCurrentIndex].classList.remove('pacman'); pacmanCurrentIndex = 21; grid[pacmanCurrentIndex].classList.add('pacman'); - - // Add a brief delay before checking for collisions again - clearTimeout(invincibilityTimeout); // Make sure to clear the previous timeout - invincibilityTimeout = setTimeout(() => { - invincible = false; // Remove invincibility after 3 seconds - }, 3000); } } } }); }; - + // Check for collision on Pac-Man movement setInterval(checkCollision, 100); // Check collision every 100ms From cd4e4d7a8ae879ad0413342965169bf940e18bff Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Mon, 30 Dec 2024 16:59:39 +0100 Subject: [PATCH 47/48] Comments Added comments --- Games/Pac_Man_Game/script.js | 452 ++++++++++++++++++----------------- Games/Pac_Man_Game/style.css | 87 ++++--- 2 files changed, 272 insertions(+), 267 deletions(-) diff --git a/Games/Pac_Man_Game/script.js b/Games/Pac_Man_Game/script.js index 7e3d7f7505..67f85f3fcc 100644 --- a/Games/Pac_Man_Game/script.js +++ b/Games/Pac_Man_Game/script.js @@ -1,6 +1,6 @@ document.addEventListener('DOMContentLoaded', () => { // Get the game board element - const gameBoard = document.getElementById('gameBoard'); + const gameBoard = document.getElementById('gameBoard'); // Game board element const startSound = document.getElementById('startSound'); // Start screen audio element const eatSound = document.getElementById('eatSound'); // Eat sound element const eatFruitSound = document.getElementById('eatFruitSound'); // Eat fruit sound element @@ -22,9 +22,10 @@ document.addEventListener('DOMContentLoaded', () => { let powerPelletTimer; // Timer for power pellet effect let powerPelletSpawnTimer; // Timer for spawning power pellets + // Start game after startscreen const initializeGame = () => { - // Level layout (0 = empty, 1 = wall, 2 = pac-dot, 3 = power-pellet) + // Level layout (0 = empty, 1 = wall, 2 = pac-dot) const layout = [ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, @@ -53,59 +54,61 @@ document.addEventListener('DOMContentLoaded', () => { ]; // Create the grid - layout.forEach((cell, index) => { - const div = document.createElement('div'); - div.classList.add('cell'); - - if (cell === 1) { - div.classList.add('wall'); - } else if (cell === 2) { - div.classList.add('pac-dot'); - totalPacDots++; - } else if (cell === 3) { - div.classList.add('power-pellet'); - totalPowerPellets++; + layout.forEach((cell, index) => { // Loop through each cell in the layout + const div = document.createElement('div'); // Create a new div element + div.classList.add('cell'); // Add the cell class to the div + + if (cell === 1) { // If the cell is a wall + div.classList.add('wall'); // Add the wall class to the div + } else if (cell === 2) { // If the cell is a pac-dot + div.classList.add('pac-dot'); // Add the pac-dot class to the div + totalPacDots++; // Add to the total number of pac-dots } - - gameBoard.appendChild(div); - grid.push(div); + gameBoard.appendChild(div); // Append the div to the game board + grid.push(div); // Add the div to the grid array }); - let pacmanCurrentIndex = 21; - grid[pacmanCurrentIndex].classList.add('pacman'); + let pacmanCurrentIndex = 21; // Starting position + grid[pacmanCurrentIndex].classList.add('pacman'); // Add the pacman class to the starting position - if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { - grid[pacmanCurrentIndex].classList.remove('pac-dot'); - score += 10; - totalPacDots--; - document.getElementById('scoreValue').textContent = score; + // Kept this here so that the firs pac-dot is eaten and the backgriund of the pacman doesn't turn white + if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { // If the pacman is on a pac-dot + grid[pacmanCurrentIndex].classList.remove('pac-dot'); // Remove the pac-dot class + score += 10; // Add 10 to the score + totalPacDots--; // Subtract 1 from the total number of pac-dots + document.getElementById('scoreValue').textContent = score; // Update the score display + grid[pacmanCurrentIndex].style.backgroundColor = '#000'; // Set the background color to match the game board } + // Function to spawn fruit const spawnFruit = () => { - const fruitTypes = ['apple', 'orange', 'cherry', 'strawberry']; + const fruitTypes = ['apple', 'orange', 'cherry', 'strawberry']; // Array of fruit types - // Choose a random fruit type - const randomFruit = fruitTypes[Math.floor(Math.random() * fruitTypes.length)]; + // Choose a random fruit type (math.floor rounds down to the nearest integer and math.random generates a random number between 0 and 1) + // Math.random() * fruitTypes.length generates a random number between 0 and 3 + const randomFruit = fruitTypes[Math.floor(Math.random() * fruitTypes.length)]; // Choose a random fruit type // Choose a random cell that does not contain a wall const availableCells = grid.filter(cell => - !cell.classList.contains('wall') && - !cell.classList.contains('pacman') && - !cell.classList.contains('ghost') + !cell.classList.contains('wall') && // Filter out walls + !cell.classList.contains('pacman') && // Filter out pacman + !cell.classList.contains('ghost') // Filter out ghosts ); - if (availableCells.length > 0) { - const randomCell = availableCells[Math.floor(Math.random() * availableCells.length)]; + if (availableCells.length > 0) { // If there are available cells + // Choose a random cell (math.floor rounds down to the nearest integer and math.random generates a random number between 0 and 1) + // Math.random() * availableCells.length generates a random number between 0 and the number of available cells + const randomCell = availableCells[Math.floor(Math.random() * availableCells.length)]; // Choose a random cell // Add fruit to the cell - const fruitElement = document.createElement('div'); - fruitElement.classList.add('fruit', randomFruit); - randomCell.appendChild(fruitElement); + const fruitElement = document.createElement('div'); // Create a new div element + fruitElement.classList.add('fruit', randomFruit); // Add the fruit and fruit type classes to the div + randomCell.appendChild(fruitElement); // Append the div to the random cell // Remove the fruit after 10 seconds if it is not eaten setTimeout(() => { - if (randomCell.contains(fruitElement)) { - randomCell.removeChild(fruitElement); + if (randomCell.contains(fruitElement)) { // If the random cell contains the fruit element + randomCell.removeChild(fruitElement); // Remove the fruit element } }, 10000); // 10 seconds } @@ -114,37 +117,37 @@ document.addEventListener('DOMContentLoaded', () => { // Start an interval to spawn fruit every 20 seconds setInterval(spawnFruit, 20000); - + // Function to move Pac-Man const movePacman = () => { - if (!gameOver && direction !== null) { - let newIndex = pacmanCurrentIndex; - let rotation = 0; - - switch (direction) { - case 'ArrowUp': - if (pacmanCurrentIndex - cols >= 0 && !grid[pacmanCurrentIndex - cols].classList.contains('wall')) { - newIndex -= cols; + if (!gameOver && direction !== null) { // If the game is not over and there is a direction + let newIndex = pacmanCurrentIndex; // Set the new index to the current index + let rotation = 0; // Set the rotation to 0 so that the pacman faces right at the start + + switch (direction) { // Switch statement to handle the direction + case 'ArrowUp': // If the direction is up + if (pacmanCurrentIndex - cols >= 0 && !grid[pacmanCurrentIndex - cols].classList.contains('wall')) { // If the new index is within the grid and does not contain a wall + newIndex -= cols; // Subtract the number of columns from the new index so that it moves up rotation = -90; // Rotate up } - break; - case 'ArrowDown': + break; // Break out of the switch statement so that the pacman does not move in multiple directions + case 'ArrowDown': // If the direction is down if (pacmanCurrentIndex + cols < cols * rows && !grid[pacmanCurrentIndex + cols].classList.contains('wall')) { - newIndex += cols; + newIndex += cols; // Add the number of columns to the new index so that it moves down rotation = 90; // Rotate down } break; - case 'ArrowLeft': + case 'ArrowLeft': // If the direction is left if (pacmanCurrentIndex % cols !== 0 && !grid[pacmanCurrentIndex - 1].classList.contains('wall')) { - newIndex -= 1; + newIndex -= 1; // Subtract 1 from the new index so that it moves left rotation = 180; // Rotate left - } else if (pacmanCurrentIndex % cols === 0) { + } else if (pacmanCurrentIndex % cols === 0) { // If the pacman is at the left portal newIndex += cols - 1; // Move to the right portal rotation = 180; // Rotate left } break; - case 'ArrowRight': + case 'ArrowRight': // If the direction is right if (pacmanCurrentIndex % cols < cols - 1 && !grid[pacmanCurrentIndex + 1].classList.contains('wall')) { - newIndex += 1; + newIndex += 1; // Add 1 to the new index so that it moves right rotation = 0; // Rotate right } else if (pacmanCurrentIndex % cols === cols - 1) { newIndex -= cols - 1; // Move to the left portal @@ -153,9 +156,9 @@ document.addEventListener('DOMContentLoaded', () => { break; } - if (grid[pacmanCurrentIndex].querySelector('.fruit')) { - const fruit = grid[pacmanCurrentIndex].querySelector('.fruit'); - let fruitScore = 0; + if (grid[pacmanCurrentIndex].querySelector('.fruit')) { // If the current cell contains a fruit + const fruit = grid[pacmanCurrentIndex].querySelector('.fruit'); // Get the fruit element + let fruitScore = 0; // Initialize the fruit score so that it can be updated later // Decide the number of points based on the fruit type if (fruit.classList.contains('apple')) fruitScore = 100; @@ -163,8 +166,8 @@ document.addEventListener('DOMContentLoaded', () => { else if (fruit.classList.contains('cherry')) fruitScore = 200; else if (fruit.classList.contains('strawberry')) fruitScore = 250; - score += fruitScore; - document.getElementById('scoreValue').textContent = score; + score += fruitScore; // Add the fruit score to the total score + document.getElementById('scoreValue').textContent = score; // Update the score display // Show score indicator at the fruit position showScoreIndicator(`+${fruitScore}`, pacmanCurrentIndex); @@ -176,107 +179,109 @@ document.addEventListener('DOMContentLoaded', () => { fruit.remove(); } - if (newIndex !== pacmanCurrentIndex) { - grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = newIndex; - grid[pacmanCurrentIndex].classList.add('pacman'); - grid[pacmanCurrentIndex].style.transform = `rotate(${rotation}deg)`; // Apply rotation - - if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { - grid[pacmanCurrentIndex].classList.remove('pac-dot'); - score += 10; - totalPacDots--; - document.getElementById('scoreValue').textContent = score; + if (newIndex !== pacmanCurrentIndex) { // If the new index is different from the current index + grid[pacmanCurrentIndex].classList.remove('pacman'); // Remove the pacman class from the current cell + pacmanCurrentIndex = newIndex; // Update the current index to the new index + grid[pacmanCurrentIndex].classList.add('pacman'); // Add the pacman class to the new cell + grid[pacmanCurrentIndex].style.transform = `rotate(${rotation}deg)`; // Apply rotation when moving + + if (grid[pacmanCurrentIndex].classList.contains('pac-dot')) { // If the new cell contains a pac-dot + grid[pacmanCurrentIndex].classList.remove('pac-dot'); // Remove the pac-dot class + score += 10; // Add 10 to the score + totalPacDots--; // Subtract 1 from the total number of pac-dots + document.getElementById('scoreValue').textContent = score; // Update the score display eatSound.play(); // Play the eat sound console.log('Score:', score); - checkForWin(); - } else if (grid[pacmanCurrentIndex].classList.contains('power-pellet')) { - grid[pacmanCurrentIndex].classList.remove('power-pellet'); - score += 50; - totalPowerPellets--; - document.getElementById('scoreValue').textContent = score; + checkForWin(); // Check for win condition + } else if (grid[pacmanCurrentIndex].classList.contains('power-pellet')) { // If the new cell contains a power-pellet + grid[pacmanCurrentIndex].classList.remove('power-pellet'); // Remove the power-pellet class + score += 50; // Add 50 to the score + totalPowerPellets--; // Subtract 1 from the total number of power-pellets + document.getElementById('scoreValue').textContent = score; // Update the score display eatSound.play(); // Play the eat sound powerUpSound.play(); // Play the power-up sound console.log('Score:', score); - activatePowerPelletEffect(); + activatePowerPelletEffect(); // Activate the power-pellet effect } - checkCollision(); + checkCollision(); // Check for collision } - if (lives === 0) { - gameOver = true; - endGame(); + if (lives === 0) { // If the player has no lives left + gameOver = true; // Set the game over flag to true + endGame(); // End the game } } }; - const addRestartButtonListener = () => { + const addRestartButtonListener = () => { // Function to add an event listener to the restart button // Event listener to the restart button - document.getElementById('restartGameButton').addEventListener('click', () => { + document.getElementById('restartGameButton').addEventListener('click', () => { // When the restart button is clicked console.log('Restart button clicked'); window.location.reload(); // Reload the page to restart the game }); }; - const checkForWin = () => { - if (totalPacDots === 0 && totalPowerPellets === 0) { - gameOver = true; - clearInterval(gameLoop); + const checkForWin = () => { // Function to check for the win condition + if (totalPacDots === 0 && totalPowerPellets === 0) { // If there are no pac-dots and power-pellets left + gameOver = true; // Set the game over flag to true + clearInterval(gameLoop); // Clear the game loop - ghosts.forEach(ghost => ghost.stop()); + ghosts.forEach(ghost => ghost.stop()); // Stop the ghosts // Delete existing overlay - const existingOverlay = document.getElementById('gameOverOverlay'); - if (existingOverlay) { - existingOverlay.remove(); + const existingOverlay = document.getElementById('gameOverOverlay'); // Get the existing overlay + if (existingOverlay) { // If the overlay exists + existingOverlay.remove(); // Remove the overlay } // Create new overlay - const gameOverOverlay = document.createElement('div'); - gameOverOverlay.id = 'gameOverOverlay'; + const gameOverOverlay = document.createElement('div'); // Create a new div element + gameOverOverlay.id = 'gameOverOverlay'; // Set the id of the div + // Add the game over message to the div gameOverOverlay.innerHTML = `

Congratulations! You Won!

`; - document.body.appendChild(gameOverOverlay); + document.body.appendChild(gameOverOverlay); // Append the div to the body - addRestartButtonListener(); + addRestartButtonListener(); // Add an event listener to the restart button } }; - const endGame = () => { - clearInterval(gameLoop); + const endGame = () => { // Function to end the game + clearInterval(gameLoop); // Clear the game loop - ghosts.forEach(ghost => ghost.stop()); + ghosts.forEach(ghost => ghost.stop()); // Stop the ghosts // Delete existing overlay - const existingOverlay = document.getElementById('gameOverOverlay'); - if (existingOverlay) { - existingOverlay.remove(); + const existingOverlay = document.getElementById('gameOverOverlay'); // Get the existing overlay + if (existingOverlay) { // If the overlay exists + existingOverlay.remove(); // Remove the overlay } // Create new overlay - const gameOverOverlay = document.createElement('div'); - gameOverOverlay.id = 'gameOverOverlay'; + const gameOverOverlay = document.createElement('div'); // Create a new div element + gameOverOverlay.id = 'gameOverOverlay'; // Set the id of the div + // Add the game over message to the div gameOverOverlay.innerHTML = `

Game Over!

`; - document.body.appendChild(gameOverOverlay); + document.body.appendChild(gameOverOverlay); // Append the div to the body gameOverSound.play(); // Play the game over sound - addRestartButtonListener(); + addRestartButtonListener(); // Add an event listener to the restart button }; - let direction = null; + let direction = null; // Direction variable to store the current direction document.addEventListener('keydown', (event) => { const key = event.key; if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) { @@ -284,130 +289,130 @@ document.addEventListener('DOMContentLoaded', () => { } }); - // Start the game when the start button is clicked - document.getElementById('startGameButton').addEventListener('click', () => { + // Start the game when the start button is clicked (startscreen) + document.getElementById('startGameButton').addEventListener('click', () => { // When the start button is clicked document.getElementById('startGameOverlay').style.display = 'none'; // Hide the start overlay initializeGame(); // Initialize the game }); class Ghost { - constructor(startIndex, color) { - this.startIndex = startIndex; - this.currentIndex = startIndex; + constructor(startIndex, color) { // Constructor to initialize the ghost + this.startIndex = startIndex; // Set the start index + this.currentIndex = startIndex; // Set the current index this.color = color; - this.timerId = null; + this.timerId = null; // Timer ID this.originalSpeed = 200; // Original speed this.currentSpeed = this.originalSpeed; // Current speed - this.scared = false; - this.ghostElement = document.createElement('div'); - this.ghostElement.classList.add('ghost', this.color); + this.scared = false; // Initial scared state + this.ghostElement = document.createElement('div'); // Create a new div element + this.ghostElement.classList.add('ghost', this.color); // Add the ghost and color classes this.ghostElement.style.width = '20px'; // Set the width this.ghostElement.style.height = '20px'; // Set the height this.ghostElement.style.transform = 'rotate(0deg)'; // Prevent rotation - grid[this.currentIndex].appendChild(this.ghostElement); + grid[this.currentIndex].appendChild(this.ghostElement); // Append the div to the grid this.draw(); // Draw the ghost on the grid } - draw() { + draw() { // Function to draw the ghost on the grid grid[this.currentIndex].appendChild(this.ghostElement); } - scare() { - this.scared = true; + scare() { // Function to scare the ghost + this.scared = true; // Set the scared state to true this.currentSpeed = 400; // Slow down the ghost this.ghostElement.classList.add('scared'); // Add scared class - this.restartMovement(); + this.restartMovement(); // Restart the movement } - unscare() { - this.scared = false; - this.currentSpeed = this.originalSpeed; + unscare() { // Function to unscare the ghost + this.scared = false; // Set the scared state to false + this.currentSpeed = this.originalSpeed; // Reset the speed this.ghostElement.classList.remove('scared'); // Remove scared class - this.restartMovement(); + this.restartMovement(); // Restart the movement } - restartMovement() { + restartMovement() { // Function to restart the movement clearInterval(this.timerId); // Stop the current movement this.moveGhost(); // Restart the movement with the new speed } - resetPosition() { - this.ghostElement.classList.remove('ghost', this.color); - this.currentIndex = this.startIndex; - grid[this.currentIndex].appendChild(this.ghostElement); - this.ghostElement.classList.add('ghost', this.color); - if (this.scared) { + resetPosition() { // Function to reset the ghost position + this.ghostElement.classList.remove('ghost', this.color); // Remove the ghost and color classes + this.currentIndex = this.startIndex; // Reset the current index + grid[this.currentIndex].appendChild(this.ghostElement); // Append the ghost element to the grid + this.ghostElement.classList.add('ghost', this.color); // Add the ghost and color classes + if (this.scared) { // If the ghost is scared this.ghostElement.classList.add('scared'); // Retain scared class if ghost is scared } } - moveGhost() { - const directions = [-1, +1, -cols, +cols]; - const distanceToPacman = (ghostIndex, pacmanIndex) => { - const ghostRow = Math.floor(ghostIndex / cols); - const ghostCol = ghostIndex % cols; - const pacmanRow = Math.floor(pacmanIndex / cols); - const pacmanCol = pacmanIndex % cols; - return Math.abs(ghostRow - pacmanRow) + Math.abs(ghostCol - pacmanCol); + moveGhost() { // Function to move the ghost + const directions = [-1, +1, -cols, +cols]; // Array of directions + const distanceToPacman = (ghostIndex, pacmanIndex) => { // Function to calculate the distance + const ghostRow = Math.floor(ghostIndex / cols); // Calculate the row (ghost position divided by number of columns) + const ghostCol = ghostIndex % cols; // Calculate the column by getting the remainder of the ghost position divided by number of columns + const pacmanRow = Math.floor(pacmanIndex / cols); // Calculate the row (pacman position divided by number of columns) + const pacmanCol = pacmanIndex % cols; // Calculate the column by getting the remainder of the pacman position divided by number of columns + return Math.abs(ghostRow - pacmanRow) + Math.abs(ghostCol - pacmanCol); // Return the absolute difference between the rows and columns }; - const chooseDirection = () => { - const pacmanIndex = grid.findIndex(cell => cell.classList.contains('pacman')); - const validDirections = directions.filter(direction => { - const nextMove = this.currentIndex + direction; - return !grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost'); + const chooseDirection = () => { // Function to choose the direction + const pacmanIndex = grid.findIndex(cell => cell.classList.contains('pacman')); // Find the index of the pacman + const validDirections = directions.filter(direction => { // Filter the directions + const nextMove = this.currentIndex + direction; // Calculate the next move by adding the direction to the current index + return !grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost'); // Return true if the next move is not a wall or ghost }); - validDirections.sort((dir1, dir2) => { - const nextMove1 = this.currentIndex + dir1; - const nextMove2 = this.currentIndex + dir2; - return distanceToPacman(nextMove1, pacmanIndex) - distanceToPacman(nextMove2, pacmanIndex); + validDirections.sort((dir1, dir2) => { // Sort the valid directions + const nextMove1 = this.currentIndex + dir1; // Calculate the next move for direction 1 + const nextMove2 = this.currentIndex + dir2; // Calculate the next move for direction 2 + return distanceToPacman(nextMove1, pacmanIndex) - distanceToPacman(nextMove2, pacmanIndex); // Return the difference in distance }); - return validDirections.length > 0 ? validDirections[0] : null; + return validDirections.length > 0 ? validDirections[0] : null; // Return the first valid direction or null }; - let direction = chooseDirection(); + let direction = chooseDirection(); // Choose the direction - this.timerId = setInterval(() => { - if (!gameOver && direction !== null) { - const nextMove = this.currentIndex + direction; + this.timerId = setInterval(() => { // Set an interval to move the ghost + if (!gameOver && direction !== null) { // If the game is not over and there is a direction + const nextMove = this.currentIndex + direction; // Calculate the next move by adding the direction to the current index - if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { - grid[this.currentIndex].removeChild(this.ghostElement); - this.currentIndex = nextMove; - grid[this.currentIndex].appendChild(this.ghostElement); - } else { - direction = chooseDirection(); + if (!grid[nextMove].classList.contains('wall') && !grid[nextMove].classList.contains('ghost')) { // If the next move is not a wall or ghost + grid[this.currentIndex].removeChild(this.ghostElement); // Remove the ghost element from the grid + this.currentIndex = nextMove; // Update the current index to the next move + grid[this.currentIndex].appendChild(this.ghostElement); // Append the ghost element to the grid + } else { // If the next move is a wall or ghost + direction = chooseDirection(); // Choose a new direction } - if (this.currentIndex === pacmanCurrentIndex) { - if (powerPelletActive) { + if (this.currentIndex === pacmanCurrentIndex) { // If the ghost reaches the pacman + if (powerPelletActive) { // If the power-pellet is active // Pac-Man eats the ghost this.resetPosition(); // Reset ghost position score += 200; // Increase score for eating a ghost - document.getElementById('scoreValue').textContent = score; + document.getElementById('scoreValue').textContent = score; // Update the score display showScoreIndicator('+200', pacmanCurrentIndex); // Show score indicator const ghostEatenSoundInstance = ghostEatenSound.cloneNode(); // Clone the sound element ghostEatenSoundInstance.play(); // Play the cloned sound - } else { - lives--; - updateLivesDisplay(); - - if (lives === 0) { - gameOver = true; - endGame(); - } else { - grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = 21; - grid[pacmanCurrentIndex].classList.add('pacman'); + } else { // If the power-pellet is not active + lives--; // Decrease the number of lives by 1 + updateLivesDisplay(); // Update the lives display + + if (lives === 0) { // If the player has no lives left + gameOver = true; // Set the game over flag to true + endGame(); // End the game + } else { // if the player has lives left + grid[pacmanCurrentIndex].classList.remove('pacman'); // Remove the pacman class + pacmanCurrentIndex = 21; // Reset the pacman position + grid[pacmanCurrentIndex].classList.add('pacman'); // Add the pacman class } } } // Handle portal logic for ghosts - if (this.currentIndex % cols === 0) { + if (this.currentIndex % cols === 0) { // If the ghost is at the left portal this.currentIndex += cols - 1; // Move to the right portal - } else if (this.currentIndex % cols === cols - 1) { + } else if (this.currentIndex % cols === cols - 1) { // If the ghost is at the right portal this.currentIndex -= cols - 1; // Move to the left portal } } @@ -415,24 +420,25 @@ document.addEventListener('DOMContentLoaded', () => { } stop() { - clearInterval(this.timerId); + clearInterval(this.timerId); // Stop the ghost movement when the game is over } } // Function to show score indicator - const showScoreIndicator = (text, index) => { - const indicator = document.createElement('div'); - indicator.classList.add('score-indicator'); - indicator.textContent = text; + const showScoreIndicator = (text, index) => { // Function to show the score indicator + const indicator = document.createElement('div'); // Create a new div element + indicator.classList.add('score-indicator'); // Add the score indicator class + indicator.textContent = text; // Set the text content of the indicator indicator.style.transform = 'rotate(0deg)'; // Prevent rotation - grid[index].appendChild(indicator); + grid[index].appendChild(indicator); // Append the indicator to the grid - setTimeout(() => { + setTimeout(() => { // Set a timeout to remove the indicator indicator.remove(); }, 1000); // Remove the indicator after 1 second }; - const ghost1 = new Ghost(209, 'red'); + // Create the ghosts + const ghost1 = new Ghost(209, 'red'); // Set the start index and color for the ghost const ghost2 = new Ghost(229, 'blue'); const ghost3 = new Ghost(249, 'pink'); const ghosts = [ghost1, ghost2, ghost3]; // Add all ghosts to an array @@ -449,50 +455,50 @@ document.addEventListener('DOMContentLoaded', () => { ghost3.moveGhost(); }, 30000); // Start moving after 30 seconds - const lifeIcons = [ + const lifeIcons = [ // Array of life icons document.getElementById('life1'), document.getElementById('life2'), document.getElementById('life3') ]; - const updateLivesDisplay = () => { + const updateLivesDisplay = () => { // Function to update the lives display console.log('Updating lives display. Current lives:', lives); - for (let i = 0; i < lifeIcons.length; i++) { - if (i < lives) { + for (let i = 0; i < lifeIcons.length; i++) { // Loop through each life icon + if (i < lives) { // If the index is less than the number of lives lifeIcons[i].style.display = 'inline-block'; // Display the life icon - } else { + } else { // If the index is greater than or equal to the number of lives lifeIcons[i].style.display = 'none'; // Hide the life icon } console.log(`Life icon ${i + 1}: display is ${lifeIcons[i].style.display}`); } }; - const checkCollision = () => { - ghosts.forEach(ghost => { - if (ghost.currentIndex === pacmanCurrentIndex) { - if (powerPelletActive) { + const checkCollision = () => { // Function to check for collision + ghosts.forEach(ghost => { // Loop through each ghost + if (ghost.currentIndex === pacmanCurrentIndex) { // If the ghost index is the same as the pacman index + if (powerPelletActive) { // If the power-pellet is active // Pac-Man eats the ghost ghost.resetPosition(); // Reset ghost position score += 200; // Increase score for eating a ghost document.getElementById('scoreValue').textContent = score; showScoreIndicator('+200', pacmanCurrentIndex); // Show score indicator - } else { - lives--; - updateLivesDisplay(); - - if (lives === 0) { - gameOver = true; - endGame(); - } else { - grid[pacmanCurrentIndex].classList.remove('pacman'); - pacmanCurrentIndex = 21; - grid[pacmanCurrentIndex].classList.add('pacman'); + } else { // If the power-pellet is not active + lives--; // Decrease the number of lives by 1 + updateLivesDisplay(); // Update the lives display + + if (lives === 0) { // If the player has no lives left + gameOver = true; // Set the game over flag to true + endGame(); // End the game + } else { // If the player has lives left + grid[pacmanCurrentIndex].classList.remove('pacman'); // Remove the pacman class + pacmanCurrentIndex = 21; // Reset the pacman position + grid[pacmanCurrentIndex].classList.add('pacman'); // Add the pacman class } } } }); }; - + // Check for collision on Pac-Man movement setInterval(checkCollision, 100); // Check collision every 100ms @@ -502,16 +508,16 @@ document.addEventListener('DOMContentLoaded', () => { const existingPowerPellet = grid.some(cell => cell.classList.contains('power-pellet')); if (existingPowerPellet) return; // Exit if there is already a power-pellet - const pacDotIndices = grid - .map((cell, index) => cell.classList.contains('pac-dot') ? index : -1) - .filter(index => index !== -1); + const pacDotIndices = grid // Get the indices (positions) of all pac-dots + .map((cell, index) => cell.classList.contains('pac-dot') ? index : -1) // Map the indices to -1 if they are not pac-dots + .filter(index => index !== -1); // Filter out the -1 values - if (pacDotIndices.length > 0) { - const randomIndex = pacDotIndices[Math.floor(Math.random() * pacDotIndices.length)]; + if (pacDotIndices.length > 0) { // If there are pac-dots + const randomIndex = pacDotIndices[Math.floor(Math.random() * pacDotIndices.length)]; // Choose a random pac-dot index grid[randomIndex].classList.remove('pac-dot'); // Delete pac-dot class grid[randomIndex].classList.add('power-pellet'); // Add new power-pellet class - totalPacDots--; - totalPowerPellets++; + totalPacDots--; // Subtract 1 from the total number of pac-dots + totalPowerPellets++; // Add 1 to the total number of power-pellets } }; @@ -519,7 +525,7 @@ document.addEventListener('DOMContentLoaded', () => { powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); // Function to make ghosts dark blue and slow - const activatePowerPelletEffect = () => { + const activatePowerPelletEffect = () => { // Function to activate the power-pellet effect powerPelletActive = true; // Set the power-pellet flag to true clearTimeout(powerPelletTimer); // Stop the previous power-pellet timer clearInterval(powerPelletSpawnTimer); // Stop spawning power-pellets @@ -532,33 +538,33 @@ document.addEventListener('DOMContentLoaded', () => { powerUpSound.play(); // After 10 seconds, deactivate the power-pellet effect - powerPelletTimer = setTimeout(() => { - powerPelletActive = false; - ghosts.forEach(ghost => ghost.unscare()); + powerPelletTimer = setTimeout(() => { // Set a timeout to deactivate the power-pellet effect + powerPelletActive = false; // Set the power-pellet flag to false + ghosts.forEach(ghost => ghost.unscare()); // Go through each ghost and unscare them - // Restart the power-pellet spawn timer + // Restart the power-pellet spawn timer after 30 seconds powerPelletSpawnTimer = setInterval(turnPacDotIntoPowerPellet, 30000); // Stop the power-up sound powerUpSound.pause(); - powerUpSound.currentTime = 0; + powerUpSound.currentTime = 0; // Reset the sound to the beginning }, 10000); // Power pellet effect lasts for 10 seconds }; // Event listener for Pac-Man eating a power-pellet - grid.forEach(cell => { - cell.addEventListener('pacmanEatPowerPellet', () => { - activatePowerPelletEffect(); + grid.forEach(cell => { // Loop through each cell in the grid + cell.addEventListener('pacmanEatPowerPellet', () => { // When Pac-Man eats a power-pellet + activatePowerPelletEffect(); // Activate the power-pellet effect function }); }); - // Start the game loop - gameLoop = setInterval(movePacman, 200); + // Start the game loop interval + gameLoop = setInterval(movePacman, 200); // Move Pac-Man every 200ms }; // Start the game when the start button is clicked -document.getElementById('startGameButton').addEventListener('click', () => { +document.getElementById('startGameButton').addEventListener('click', () => { // When the start button is clicked document.getElementById('startGameOverlay').style.display = 'none'; // Hide the start overlay initializeGame(); // Initialize the game }); diff --git a/Games/Pac_Man_Game/style.css b/Games/Pac_Man_Game/style.css index 6bbbcf7522..0e432558f1 100644 --- a/Games/Pac_Man_Game/style.css +++ b/Games/Pac_Man_Game/style.css @@ -14,18 +14,17 @@ body { font-family: Arial, sans-serif; } -#gameBoard { - display: grid; - grid-template-columns: repeat(20, 20px); - grid-template-rows: repeat(20, 20px); - gap: 1px; +#gameBoard { /* Adjust the size of the game board as needed */ + display: grid; /* Use CSS Grid for layout */ + grid-template-columns: repeat(20, 20px); /* Create a grid with 20 columns */ + grid-template-rows: repeat(24, 20px); /* Create a grid with 24 rows */ background-color: black; } -#startGameOverlay { - position: fixed; - top: 0; - left: 0; +#startGameOverlay { /* Overlay to display the start game button */ + position: fixed; /* Fixed position to cover the entire viewport */ + top: 0; /* Position from the top */ + left: 0; /* Position from the left */ width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.8); /* Semi-transparent background */ @@ -35,29 +34,31 @@ body { z-index: 1000; /* Ensure it is on top of other elements */ } -#startGameButton { - cursor: pointer; - width: 400px; /* Adjust the size as needed */ +#startGameButton { /* Start game button styling */ + cursor: pointer; /* Change cursor to pointer on hover */ + width: 400px; height: auto; } -.game-over-message { +.game-over-message { /* Styling for the game over message */ color: white; text-align: center; } -#restartGameButton { + +#restartGameButton { /* Restart game button styling */ padding: 10px 20px; font-size: 16px; background-color: #ffcc00; border: none; - cursor: pointer; + cursor: pointer; /* Change cursor to pointer on hover */ border-radius: 5px; } -#restartGameButton:hover { + +#restartGameButton:hover { /* Hover effect for the restart game button */ background-color: #ff9900; } -.cell { +.cell { /* Styling for each cell in the game board */ width: 20px; height: 20px; display: flex; @@ -66,27 +67,27 @@ body { background-color: black; /* Set the background color of the cell */ } -.wall { +.wall { /* Styling for the walls */ background-color: black; border: 2px solid blue; - box-sizing: border-box; + box-sizing: border-box; /* Include border in the width and height of the cell */ } -.pac-dot { - width: 5px; /* Adjusted size */ - height: 5px; /* Adjusted size */ +.pac-dot { /* Styling for the pac-dots */ + width: 5px; + height: 5px; background-color: white; - border-radius: 50%; + border-radius: 50%; /* Create a circular shape */ margin: auto; /* Center the dot within the cell */ } -.power-pellet { +.power-pellet { /* Styling for the power pellets */ width: 10px; height: 10px; background-color: yellow; - border-radius: 50%; - margin: auto; + border-radius: 50%; /* Create a circular shape */ + margin: auto; /* Center the pellet within the cell */ } /* General styling for the fruits*/ @@ -116,21 +117,20 @@ body { background-image: url('./pixels/fruit-strawberry.png'); } -.pacman { +.pacman { /* Styling for the pacman */ width: 20px; height: 20px; background-image: url('./pixels/pacman.gif'); - background-size: cover; - border-radius: 50%; + background-size: cover; /* Ensure the image covers the entire cell */ } .ghost { width: 20px; height: 20px; - background-size: cover; - position: absolute; + background-size: cover; /* Ensure the image covers the entire cell */ + position: absolute; /* Position the ghost absolutely within the cell so it can move freely */ transform: rotate(0deg); /* Prevent rotation of the score indicator */ - transform-origin: center; + transform-origin: center; /* Set the rotation origin to the center of the ghost */ } .ghost.red { @@ -156,34 +156,33 @@ body { } #score { - margin-top: 20px; + margin-top: 20px; /* Add margin to separate the score from the game board */ } -.score-indicator { - position: absolute; +.score-indicator { /* Styling for the score indicator */ color: yellow; font-size: 16px; font-weight: bold; animation: fadeOut 1s forwards; } -@keyframes fadeOut { +@keyframes fadeOut { /* Animation to fade out the score indicator */ 0% { - opacity: 1; - transform: translateY(0); + opacity: 1; /* Start with full opacity */ + transform: translateY(0); /* Start at the original position */ } - 100% { - opacity: 0; - transform: translateY(-20px); + 100% { /* End with zero opacity and move up */ + opacity: 0; /* End with zero opacity */ + transform: translateY(-20px); /* Move up by 20px */ } } #livesContainer { - margin-top: 10px; + margin-top: 10px; /* Add margin to separate the lives from the score */ } -.life { - display: inline-block; +.life { /* Styling for each life indicator */ + display: inline-block; /* Display the lives horizontally */ width: 20px; height: 20px; background-color: yellow; From 80e32563712fd47a08c957b5f3890e659223a0f9 Mon Sep 17 00:00:00 2001 From: aamira0 <150680980+aamira0@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:25:55 +0100 Subject: [PATCH 48/48] Thumbnail -Changed thumbnail --- assets/images/Pac_Man_Game.png | Bin 0 -> 32903 bytes assets/images/Pac_Man_Thumbnail.png | Bin 25980 -> 0 bytes assets/js/gamesData.json | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/images/Pac_Man_Game.png delete mode 100644 assets/images/Pac_Man_Thumbnail.png diff --git a/assets/images/Pac_Man_Game.png b/assets/images/Pac_Man_Game.png new file mode 100644 index 0000000000000000000000000000000000000000..e2a5d12e26a5ba4bf8a11be166742d1ebd248f09 GIT binary patch literal 32903 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 literal 0 HcmV?d00001 diff --git a/assets/images/Pac_Man_Thumbnail.png b/assets/images/Pac_Man_Thumbnail.png deleted file mode 100644 index 2fb1a59e204d6ef2f316bc6dd8a0daff44b7a01d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25980 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