From 5e492df5162ee782062165f3b48a930601b87819 Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Thu, 25 Jul 2024 14:48:51 +0530 Subject: [PATCH 01/14] Create index.html --- .../Elemental switch/index.html | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 SinglePlayer - Games/Elemental switch/index.html diff --git a/SinglePlayer - Games/Elemental switch/index.html b/SinglePlayer - Games/Elemental switch/index.html new file mode 100644 index 00000000..65b8f394 --- /dev/null +++ b/SinglePlayer - Games/Elemental switch/index.html @@ -0,0 +1,22 @@ + + + + + + Elemental Switch + + + +
+

Elemental Switch

+ +
+ + + +
+

Use arrow keys to move. Switch between elements to overcome obstacles!

+
+ + + From 409708b8e3033da2544b765f30d752add0220f3d Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Thu, 25 Jul 2024 14:49:06 +0530 Subject: [PATCH 02/14] Create styles.css --- .../Elemental switch/styles.css | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 SinglePlayer - Games/Elemental switch/styles.css diff --git a/SinglePlayer - Games/Elemental switch/styles.css b/SinglePlayer - Games/Elemental switch/styles.css new file mode 100644 index 00000000..d0dffd77 --- /dev/null +++ b/SinglePlayer - Games/Elemental switch/styles.css @@ -0,0 +1,32 @@ +body { + text-align: center; + font-family: Arial, sans-serif; + background-color: #f0f0f0; +} + +#game { + margin: 20px auto; + width: 600px; + background-color: #ffffff; + padding: 20px; + border-radius: 10px; + box-shadow: 0 0 10px rgba(0,0,0,0.1); +} + +canvas { + border: 1px solid #000; + margin-top: 10px; +} + +button { + margin: 10px; + padding: 10px 20px; + font-size: 16px; + border: none; + border-radius: 5px; + cursor: pointer; +} + +button:active { + transform: scale(0.95); +} From 57821bca965d729a45c81e01beb39cb887822aaf Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Thu, 25 Jul 2024 14:49:21 +0530 Subject: [PATCH 03/14] Create script.js --- .../Elemental switch/script.js | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 SinglePlayer - Games/Elemental switch/script.js diff --git a/SinglePlayer - Games/Elemental switch/script.js b/SinglePlayer - Games/Elemental switch/script.js new file mode 100644 index 00000000..9a994806 --- /dev/null +++ b/SinglePlayer - Games/Elemental switch/script.js @@ -0,0 +1,88 @@ +const canvas = document.getElementById('gameCanvas'); +const ctx = canvas.getContext('2d'); + +let character = { + x: 50, + y: 350, + width: 30, + height: 30, + element: 'fire' +}; + +let obstacles = [ + { x: 200, y: 300, width: 50, height: 50, type: 'fire' }, + { x: 300, y: 200, width: 50, height: 50, type: 'water' }, + { x: 400, y: 100, width: 50, height: 50, type: 'earth' } +]; + +let goal = { x: 550, y: 350, width: 30, height: 30 }; + +function switchElement(element) { + character.element = element; +} + +document.addEventListener('keydown', (e) => { + switch (e.key) { + case 'ArrowUp': character.y -= 10; break; + case 'ArrowDown': character.y += 10; break; + case 'ArrowLeft': character.x -= 10; break; + case 'ArrowRight': character.x += 10; break; + } + checkCollisions(); + drawGame(); +}); + +function checkCollisions() { + obstacles.forEach(obstacle => { + if (character.x < obstacle.x + obstacle.width && + character.x + character.width > obstacle.x && + character.y < obstacle.y + obstacle.height && + character.y + character.height > obstacle.y) { + if (character.element !== obstacle.type) { + alert('Game Over! You hit an obstacle.'); + resetGame(); + } + } + }); + + if (character.x < goal.x + goal.width && + character.x + character.width > goal.x && + character.y < goal.y + goal.height && + character.y + character.height > goal.y) { + alert('You Win! You reached the goal.'); + resetGame(); + } +} + +function resetGame() { + character.x = 50; + character.y = 350; + character.element = 'fire'; + drawGame(); +} + +function drawGame() { + ctx.clearRect(0, 0, canvas.width, canvas.height); + + ctx.fillStyle = getColor(character.element); + ctx.fillRect(character.x, character.y, character.width, character.height); + + obstacles.forEach(obstacle => { + ctx.fillStyle = getColor(obstacle.type); + ctx.fillRect(obstacle.x, obstacle.y, obstacle.width, obstacle.height); + }); + + ctx.fillStyle = 'gold'; + ctx.fillRect(goal.x, goal.y, goal.width, goal.height); +} + +function getColor(element) { + switch (element) { + case 'fire': return 'red'; + case 'water': return 'blue'; + case 'earth': return 'green'; + default: return 'black'; + } +} + +drawGame(); From 776e79cd240b21467d329d5d77864d3239c8545e Mon Sep 17 00:00:00 2001 From: its-kritika Date: Wed, 31 Jul 2024 01:47:56 +0530 Subject: [PATCH 04/14] New Game, issue #1104 Created Arkanoid Game --- README.md | 1 + SinglePlayer - Games/Arkanoid_Game/README.md | 29 ++ SinglePlayer - Games/Arkanoid_Game/index.html | 29 ++ SinglePlayer - Games/Arkanoid_Game/script.js | 248 ++++++++++++++++++ SinglePlayer - Games/Arkanoid_Game/style.css | 67 +++++ assets/images/arkanoid-game1 (1).png | Bin 0 -> 20973 bytes assets/images/arkanoid-game1 (2).png | Bin 0 -> 29568 bytes 7 files changed, 374 insertions(+) create mode 100644 SinglePlayer - Games/Arkanoid_Game/README.md create mode 100644 SinglePlayer - Games/Arkanoid_Game/index.html create mode 100644 SinglePlayer - Games/Arkanoid_Game/script.js create mode 100644 SinglePlayer - Games/Arkanoid_Game/style.css create mode 100644 assets/images/arkanoid-game1 (1).png create mode 100644 assets/images/arkanoid-game1 (2).png diff --git a/README.md b/README.md index 0aacec62..74fcdda2 100644 --- a/README.md +++ b/README.md @@ -262,6 +262,7 @@ ________________________________________________________________________________ | 204 | [Breakout_Game](.SinglePlayer%20-%20Games/BreakOut_Game) | | 205 | [Breakout_Game](.SinglePlayer%20-%20Games/Maze_Game) | | 206 | [Breakout_Game](.SinglePlayer%20-%20Games/Bomber_Game) | +| 207 | [Arkanoid_Game](.SinglePlayer%20-%20Games/Arkanoid_Game) | diff --git a/SinglePlayer - Games/Arkanoid_Game/README.md b/SinglePlayer - Games/Arkanoid_Game/README.md new file mode 100644 index 00000000..ea78a296 --- /dev/null +++ b/SinglePlayer - Games/Arkanoid_Game/README.md @@ -0,0 +1,29 @@ +# Arkanoid Game +Welcome to the game! This is a classic brick-breaking game inspired by the popular game Arkanoid. The objective is to break all the bricks on the screen using a ball while preventing the ball from falling out of the play area with the help of a paddle. + +# Features +- **Brick Types**: The game includes three types of bricks, each with different hit points and corresponding score values: + - **Gold Bricks**: Requires 3 hits to break and gives the 25 points. + - **Silver Bricks**: Requires 2 hits to break and gives 15 points. + - **Red Bricks**: Requires 1 hit to break and gives the 8 points. +- **Dynamic Speed**: The ball speed increases as the score increases, adding more challenge to the game. +- **Scoring System**: Track your current score and lives. +- **Persistent Highest Score**: Highest score is saved locally in your browser. +- **Game Over Popup**: A popup appears with a restart button when the game is over. +- **Easy Controls**: Use arrow keys to move the basket left and right. + +# Installation +- Clone the repository +- Navigate to the project directory `cd Arkanoid_Game` + +# Usage +- Open index.html to start the game. +- Use the left and right arrow keys to move the paddle. +- Keep an eye on your score and lives at the top of the screen. +- When you lose all your lives, the game will show a "Game Over" popup with a button to restart the game. + +# Controls +- **Left Arrow Key**: Move basket to the left. +- **Right Arrow Key**: Move basket to the right. + +# Enjoy Playing!🥳 \ No newline at end of file diff --git a/SinglePlayer - Games/Arkanoid_Game/index.html b/SinglePlayer - Games/Arkanoid_Game/index.html new file mode 100644 index 00000000..705239da --- /dev/null +++ b/SinglePlayer - Games/Arkanoid_Game/index.html @@ -0,0 +1,29 @@ + + + + + + Arkanoid Game + + + +
+

Highest Score is :

+

Current Score : 0

+
+
+
+

Break the Blocks

+

Ready to Play!!

+ +
+ +
+

Game Over

+

+ +
+
+ + + \ No newline at end of file diff --git a/SinglePlayer - Games/Arkanoid_Game/script.js b/SinglePlayer - Games/Arkanoid_Game/script.js new file mode 100644 index 00000000..fb578374 --- /dev/null +++ b/SinglePlayer - Games/Arkanoid_Game/script.js @@ -0,0 +1,248 @@ +const canvas = document.getElementById('game-board') +const gameOver = document.getElementById('game-over') +const gameStart = document.getElementById('game-start') +const restart = document.getElementById('restart') +const start = document.getElementById('start') +const scoreCard = document.getElementById('score-card') +const Currscore = document.getElementById('current-score') +const highScoreCard = document.getElementById('highest-score') + +const ctx = canvas.getContext('2d') + +const highestScoreKey = 'arkanoid' +let highestScore = localStorage.getItem(highestScoreKey) ? parseInt(localStorage.getItem(highestScoreKey)) : 0 + +highScoreCard.textContent += highestScore + +//paddle +const paddleWidth = 130 +const paddleHeight = 12 +const paddleSpeed = 16 + +const ballRadius = 10 +//let gameRunning + +//brick +const brickRowCount = 7 +const brickColumnCount = 9 +const brickWidth = 75 +const brickHeight = 20 +const brickPadding = 10 +const brickOffsetTop = 30 +const brickOffsetLeft = 25 + +let score = 0 + +const keys = { + left : false, + right : false +} + +bricks = [] + +//When we press the arrow key +document.addEventListener('keydown', e => { + if (e.key === 'ArrowLeft') keys.left = true + if (e.key === 'ArrowRight') keys.right = true +}) + +//When arrow key is released +document.addEventListener('keyup', e => { + if (e.key === 'ArrowLeft') keys.left = false + if (e.key === 'ArrowRight') keys.right = false +}) + +function drawBall() { + ctx.beginPath(); + ctx.arc(x, y, ballRadius, 0, Math.PI * 2); + ctx.fillStyle = "#0095DD"; + ctx.fill(); + ctx.closePath(); +} + +function drawPaddle(){ + ctx.beginPath() //It's typically used when you want to start a new shape or line segment without connecting it to the previous shapes or lines drawn on the canvas. + //canvas.height: This is the total height of the canvas. Placing something exactly at canvas.height would put it right at the bottom edge of the canvas, which means it would be off-screen because the y-coordinates start at 0 at the top and increase downward. + //paddleHeight: This is the height of the paddle itself. By subtracting the paddle's height from the canvas height, you ensure that the top edge of the paddle is positioned exactly paddleHeight pixels above the bottom edge of the canvas. + // x-coordinate, y-coordinate, width of paddle, height of paddle + ctx.rect(paddleX, canvas.height - paddleHeight, paddleWidth, paddleHeight) + ctx.fillStyle = '#00FF00' + ctx.fill() + ctx.closePath() +} + +function drawBricks() { + for (let c = 0; c < brickColumnCount; c++) { + if (c === 4){ + continue + } + for (let r = 0; r < brickRowCount; r++) { + // Only draw the brick if it has hit points left + if (bricks[c][r].hitPoints > 0) { + //c * (brickWidth + brickPadding) calculates the total horizontal distance from the left edge of the first brick to the left edge of the current brick. + //brickOffsetLeft ensures that the entire row of bricks is offset from the left edge of the canvas by a specific amount + const brickX = c * (brickWidth + brickPadding) + brickOffsetLeft + const brickY = r * (brickHeight + brickPadding) + brickOffsetTop + bricks[c][r].x = brickX + bricks[c][r].y = brickY + ctx.beginPath() + ctx.rect(brickX, brickY, brickWidth, brickHeight) + ctx.fillStyle = bricks[c][r].color + ctx.fill() + ctx.closePath() + } + } + } +} + +function movePaddle(){ + if (keys.left && paddleX > 0){ + paddleX -= paddleSpeed + } + if (keys.right && paddleX < canvas.width - paddleWidth){ + paddleX += paddleSpeed + } +} + +// Collision detection +function collisionDetection() { + for (let c = 0; c < brickColumnCount; c++) { + for (let r = 0; r < brickRowCount; r++) { + const brick = bricks[c][r]; + if (brick.hitPoints > 0) { + //Checking if ball's x-coordinate is greater than the brick's left edge and less than the brick's right edge + //Similarly for y-coordinate + if (x > brick.x && x < brick.x + brickWidth && y > brick.y && y < brick.y + brickHeight) { + dy = -dy //it reverses the vertical direction of the ball by negating its vertical velocity (dy). This makes the ball bounce off the brick. + brick.hitPoints-- + if (brick.hitPoints === 2) { + brick.color = "#bebebe" //silver + } else if (brick.hitPoints === 1) { + brick.color = "red" + } + else { + brick.color = ""; + score += (r === 3 || r === 0) ? 25 : (r === 2) ? 15 : 8 + } + } + } + } + } +} + +function adjustSpeedBasedOnScore() { + const baseSpeed = 3 + const speedIncrement = 0.5 // Adjust increment as needed + const additionalSpeed = Math.floor(score / 30) * speedIncrement; + + const newSpeed = baseSpeed + additionalSpeed + + // Adjust dx and dy proportionally to maintain the direction + const speedRatio = newSpeed / Math.sqrt(dx * dx + dy * dy); + dx *= speedRatio; + dy *= speedRatio; +} + +let animationFrameId + +function draw() { + ctx.clearRect(0, 0, canvas.width, canvas.height) + + drawBricks() + drawBall() + drawPaddle() + collisionDetection() + adjustSpeedBasedOnScore() + + + //Horizontal Collision Detection + if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) { + dx = -dx + } + //Top Collision Detection + if (y + dy < ballRadius) { + dy = -dy + } + //Bottom Collision Detection + else if (y + dy > canvas.height - ballRadius) { + if (x > paddleX && x < paddleX + paddleWidth) { + dy = -dy; + } else { + //gameRunning = false + scoreCard.textContent = 'Your Score is : ' + score + gameOver.style.display = 'block' + Currscore.style.display = 'none' + + if (score > highestScore){ + highestScore = score + localStorage.setItem(highestScoreKey, highestScore) + highScoreCard.textContent = 'Highest Score is : ' + highestScore + } + return + } + } + movePaddle() + + x += dx + y += dy + Currscore.textContent = 'Current Score : ' + score + animationFrameId = requestAnimationFrame(draw) +} + +function resetGame() { + //so that on restarting game speed of ball remains same, it happened bcoz each time resetGame is called, it starts a new game + //loop by calling draw again, which can result in multiple overlapping game loops, causing the ball to move faster. + if (animationFrameId) { + cancelAnimationFrame(animationFrameId); + } + + // Reset ball position + x = canvas.width / 2 + y = canvas.height - 30 + + // Reset ball velocity + const speed = 3 + dx = (Math.random() * 2 - 1) * speed + dy = -speed //so that ball always moves upward + + //Reset paddle + //By dividing the remaining space of the canvas (canvas.width - paddleWidth) by 2, we find the amount of space needed on the left + //side of the paddle to center it horizontally. This places the paddle in the middle of the canvas + paddleX = (canvas.width - paddleWidth) / 2 + + // Reset bricks + //it initializes a grid of bricks with different hit points and colors based on their row positions + for (let c = 0; c < brickColumnCount; c++) { + bricks[c] = [] + for (let r = 0; r < brickRowCount; r++) { + const hitPoints = (r === 3 || r === 0) ? 3 : (r === 2 || r === 4) ? 2 : 1; + let color + if (hitPoints === 3) { + color = '#ffcc00' //gold + } else if (hitPoints === 2) { + color = '#bebebe' //silver + } else { + color = 'red' + } + bricks[c][r] = { x: 0, y: 0, hitPoints, color } + } + } + + score = 0 + Currscore.style.display = 'block' + // Restart the game loop + draw() +} + +start.addEventListener('click', e => { + gameStart.style.display = 'none' + canvas.style.display = 'block' + resetGame() +}) + +//Re-initializing all variables +restart.addEventListener('click', e => { + gameOver.style.display = 'none' + resetGame() + +}) \ No newline at end of file diff --git a/SinglePlayer - Games/Arkanoid_Game/style.css b/SinglePlayer - Games/Arkanoid_Game/style.css new file mode 100644 index 00000000..c8869051 --- /dev/null +++ b/SinglePlayer - Games/Arkanoid_Game/style.css @@ -0,0 +1,67 @@ +body{ + box-sizing: border-box; + margin: 0; + height: 97vh; +} +.game-container{ + display: flex; + justify-content: center; + align-items: center; + position: relative; + height: 90%; +} +#game-board{ + background-color: black; + background-size: cover; + display: none; +} +#game-start{ + height: 500px; + width: 800px; + backdrop-filter: blur(12px) brightness(78%); + text-align: center; + font-size: 18px; +} +#game-over{ + width: 802px; + height: 560px; + display: none; + background-color: rgba(208, 207, 207, 0.838); + position: absolute; + z-index: 3; + text-align: center; +} +h1{ + margin-top: 18%; + margin-bottom: 3%; + font-family: Arial, Helvetica, sans-serif; +} +button{ + width: 140px; + height: 40px; + font-size: 16px; + cursor: pointer; +} +#score-card{ + font-size: 18px; + margin-bottom: 3%; +} +.flex{ + display: flex; +} +.flex p{ + margin: 12px; + font-size: 20px; + font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; + margin-right: 2.5%; +} +#highest-score{ + flex-grow: 1; +} +.name{ + font-size: 23px; + font-family: Arial, Helvetica, sans-serif; + margin-top: 15%; + color: rgba(7, 79, 174, 0.91); + font-weight: 600; +} \ No newline at end of file diff --git a/assets/images/arkanoid-game1 (1).png b/assets/images/arkanoid-game1 (1).png new file mode 100644 index 0000000000000000000000000000000000000000..24d20c2d9696bf3971a9ce2e939994a57552433e GIT binary patch literal 20973 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 Date: Wed, 31 Jul 2024 02:42:13 +0530 Subject: [PATCH 05/14] Updated additionalpage --- .../Banner - image/arkanoid_game.png | Bin 0 -> 20973 bytes additionalpage/game.html | 46 ++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 SinglePlayer - Games/Banner - image/arkanoid_game.png diff --git a/SinglePlayer - Games/Banner - image/arkanoid_game.png b/SinglePlayer - Games/Banner - image/arkanoid_game.png new file mode 100644 index 0000000000000000000000000000000000000000..24d20c2d9696bf3971a9ce2e939994a57552433e GIT binary patch literal 20973 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 My Balloon + + + + + + +

+
+ +
+ 41 + +
+
+
+
+
+

Break the Blocks

+

Arkanoid is a modern take on the classic Breakout game, featuring enhanced gameplay, diverse brick types, and engaging challenges. In this game, players control a paddle to bounce a ball and break various bricks arranged on the screen. The objective is to clear all the bricks while preventing the ball from falling off the bottom edge of the screen.

+
+
+ + + + + +
+
+
+
+
+

Release Date:  

+

31.07.2024

+
+
+

Updated:  

+

Action | Desktop

+
+
+
+ Play Now +
+
+
+
+ From e1d3df9a2390bc5842bcddf112209d42cbe2f3cd Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:18:57 +0530 Subject: [PATCH 06/14] Create index.html --- SinglePlayer - Games/Light-Weaver/index.html | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 SinglePlayer - Games/Light-Weaver/index.html diff --git a/SinglePlayer - Games/Light-Weaver/index.html b/SinglePlayer - Games/Light-Weaver/index.html new file mode 100644 index 00000000..696bfc56 --- /dev/null +++ b/SinglePlayer - Games/Light-Weaver/index.html @@ -0,0 +1,17 @@ + + + + + + Light Weaver + + + +
+

Light Weaver

+ +

Use arrow keys to move the light beam. Reflect off mirrors to navigate through the maze!

+
+ + + From 5f0fc52afd3aa26231209f21f117eb7061b152b1 Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:19:15 +0530 Subject: [PATCH 07/14] Create styles.css --- SinglePlayer - Games/Light-Weaver/styles.css | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 SinglePlayer - Games/Light-Weaver/styles.css diff --git a/SinglePlayer - Games/Light-Weaver/styles.css b/SinglePlayer - Games/Light-Weaver/styles.css new file mode 100644 index 00000000..6c383c04 --- /dev/null +++ b/SinglePlayer - Games/Light-Weaver/styles.css @@ -0,0 +1,19 @@ +body { + text-align: center; + font-family: Arial, sans-serif; + background-color: #f0f0f0; +} + +#game { + margin: 20px auto; + width: 600px; + background-color: #ffffff; + padding: 20px; + border-radius: 10px; + box-shadow: 0 0 10px rgba(0,0,0,0.1); +} + +canvas { + border: 1px solid #000; + margin-top: 10px; +} From 6da5da39939b18a7c2bb3414413c1a311c06a7b2 Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:19:30 +0530 Subject: [PATCH 08/14] Create script.js --- SinglePlayer - Games/Light-Weaver/script.js | 102 ++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 SinglePlayer - Games/Light-Weaver/script.js diff --git a/SinglePlayer - Games/Light-Weaver/script.js b/SinglePlayer - Games/Light-Weaver/script.js new file mode 100644 index 00000000..8f2343c8 --- /dev/null +++ b/SinglePlayer - Games/Light-Weaver/script.js @@ -0,0 +1,102 @@ +const canvas = document.getElementById('gameCanvas'); +const ctx = canvas.getContext('2d'); + +let lightBeam = { + x: 50, + y: 200, + dx: 2, + dy: 0, + width: 10, + height: 10 +}; + +let mirrors = [ + { x: 200, y: 150, width: 10, height: 100, angle: 45 }, + { x: 400, y: 100, width: 10, height: 100, angle: -45 } +]; + +let goal = { x: 550, y: 200, width: 30, height: 30 }; + +function drawGame() { + ctx.clearRect(0, 0, canvas.width, canvas.height); + + // Draw light beam + ctx.fillStyle = 'yellow'; + ctx.fillRect(lightBeam.x, lightBeam.y, lightBeam.width, lightBeam.height); + + // Draw mirrors + mirrors.forEach(mirror => { + ctx.save(); + ctx.translate(mirror.x + mirror.width / 2, mirror.y + mirror.height / 2); + ctx.rotate((mirror.angle * Math.PI) / 180); + ctx.fillStyle = 'silver'; + ctx.fillRect(-mirror.width / 2, -mirror.height / 2, mirror.width, mirror.height); + ctx.restore(); + }); + + // Draw goal + ctx.fillStyle = 'gold'; + ctx.fillRect(goal.x, goal.y, goal.width, goal.height); +} + +function updateGame() { + lightBeam.x += lightBeam.dx; + lightBeam.y += lightBeam.dy; + + checkCollisions(); + drawGame(); + + requestAnimationFrame(updateGame); +} + +function checkCollisions() { + mirrors.forEach(mirror => { + if (lightBeam.x < mirror.x + mirror.width && + lightBeam.x + lightBeam.width > mirror.x && + lightBeam.y < mirror.y + mirror.height && + lightBeam.y + lightBeam.height > mirror.y) { + // Reflect the light beam + if (mirror.angle === 45) { + lightBeam.dx = -lightBeam.dy; + lightBeam.dy = -lightBeam.dx; + } else if (mirror.angle === -45) { + lightBeam.dx = lightBeam.dy; + lightBeam.dy = lightBeam.dx; + } + } + }); + + if (lightBeam.x < goal.x + goal.width && + lightBeam.x + lightBeam.width > goal.x && + lightBeam.y < goal.y + goal.height && + lightBeam.y + lightBeam.height > goal.y) { + alert('You Win! You reached the goal.'); + resetGame(); + } + + if (lightBeam.x < 0 || lightBeam.x > canvas.width || + lightBeam.y < 0 || lightBeam.y > canvas.height) { + alert('Game Over! You went out of bounds.'); + resetGame(); + } +} + +function resetGame() { + lightBeam.x = 50; + lightBeam.y = 200; + lightBeam.dx = 2; + lightBeam.dy = 0; + drawGame(); +} + +document.addEventListener('keydown', (e) => { + switch (e.key) { + case 'ArrowUp': lightBeam.dy = -2; lightBeam.dx = 0; break; + case 'ArrowDown': lightBeam.dy = 2; lightBeam.dx = 0; break; + case 'ArrowLeft': lightBeam.dx = -2; lightBeam.dy = 0; break; + case 'ArrowRight': lightBeam.dx = 2; lightBeam.dy = 0; break; + } +}); + +drawGame(); +updateGame(); From 3ff69c6066633bbbaa9b748be08d3d763df6bdc6 Mon Sep 17 00:00:00 2001 From: vivi2004 Date: Fri, 2 Aug 2024 23:49:33 +0530 Subject: [PATCH 09/14] Added one game successfuly --- .../Snake and ladder Updated/index.html | 18 + .../Snake and ladder Updated/script.js | 114 + .../Snake and ladder Updated/styles.css | 51 + SinglePlayer - Games/Snakes And Ladders | 1 - additionalpage/assets/images/snake-ladder.jpg | 0 additionalpage/game.html | 5345 +---------------- assets/images/snake-ladder.jpg | Bin 0 -> 58849 bytes 7 files changed, 247 insertions(+), 5282 deletions(-) create mode 100644 SinglePlayer - Games/Snake and ladder Updated/index.html create mode 100644 SinglePlayer - Games/Snake and ladder Updated/script.js create mode 100644 SinglePlayer - Games/Snake and ladder Updated/styles.css delete mode 100644 SinglePlayer - Games/Snakes And Ladders create mode 100644 additionalpage/assets/images/snake-ladder.jpg create mode 100644 assets/images/snake-ladder.jpg diff --git a/SinglePlayer - Games/Snake and ladder Updated/index.html b/SinglePlayer - Games/Snake and ladder Updated/index.html new file mode 100644 index 00000000..71bde6df --- /dev/null +++ b/SinglePlayer - Games/Snake and ladder Updated/index.html @@ -0,0 +1,18 @@ + + + + + + Snake and Ladder Game + + + +
+
+ +

Dice Result:

+

Player Turn: 1

+
+ + + diff --git a/SinglePlayer - Games/Snake and ladder Updated/script.js b/SinglePlayer - Games/Snake and ladder Updated/script.js new file mode 100644 index 00000000..7691a9c4 --- /dev/null +++ b/SinglePlayer - Games/Snake and ladder Updated/script.js @@ -0,0 +1,114 @@ +// script.js +document.addEventListener('DOMContentLoaded', () => { + const board = document.getElementById('board'); + const rollDiceButton = document.getElementById('rollDice'); + const diceResult = document.getElementById('diceResult'); + const playerTurnDisplay = document.getElementById('playerTurn'); + + let player1Position = 1; + let player2Position = 1; + let currentPlayer = 1; + const boardSize = 100; + + // Define snakes and ladders + const snakes = { + 17: 7, + 54: 34, + 62: 19, + 64: 60, + 87: 24, + 93: 73, + 95: 75, + 99: 78 + }; + + const ladders = { + 1: 38, + 4: 14, + 9: 31, + 21: 42, + 28: 84, + 51: 67, + 72: 91, + 80: 99 + }; + + // Create the board + for (let i = 0; i < boardSize; i++) { + const cell = document.createElement('div'); + cell.id = `cell-${i + 1}`; + cell.innerText = i + 1; + board.appendChild(cell); + } + + // Create player pieces + const player1 = document.createElement('div'); + player1.classList.add('player', 'player1'); + board.appendChild(player1); + + const player2 = document.createElement('div'); + player2.classList.add('player', 'player2'); + board.appendChild(player2); + + const positions = [null, player1, player2]; + + function movePlayer(player, position) { + const cell = document.getElementById(`cell-${position}`); + const rect = cell.getBoundingClientRect(); + const boardRect = board.getBoundingClientRect(); + player.style.transform = `translate(${rect.left - boardRect.left}px, ${rect.top - boardRect.top}px)`; + } + + function handleSpecialSquares(player, position) { + if (snakes[position]) { + position = snakes[position]; + } else if (ladders[position]) { + position = ladders[position]; + } + return position; + } + + function checkWin(position) { + if (position >= boardSize) { + alert(`Player ${currentPlayer} wins!`); + resetGame(); + } + } + + function resetGame() { + player1Position = 1; + player2Position = 1; + currentPlayer = 1; + movePlayer(player1, player1Position); + movePlayer(player2, player2Position); + diceResult.innerText = `Dice Result: `; + playerTurnDisplay.innerText = `Player Turn: ${currentPlayer}`; + } + + rollDiceButton.addEventListener('click', () => { + const diceRoll = Math.floor(Math.random() * 6) + 1; + diceResult.innerText = `Dice Result: ${diceRoll}`; + + if (currentPlayer === 1) { + player1Position = Math.min(player1Position + diceRoll, boardSize); + movePlayer(player1, player1Position); + player1Position = handleSpecialSquares(player1, player1Position); + movePlayer(player1, player1Position); + checkWin(player1Position); + currentPlayer = 2; + } else { + player2Position = Math.min(player2Position + diceRoll, boardSize); + movePlayer(player2, player2Position); + player2Position = handleSpecialSquares(player2, player2Position); + movePlayer(player2, player2Position); + checkWin(player2Position); + currentPlayer = 1; + } + + playerTurnDisplay.innerText = `Player Turn: ${currentPlayer}`; + }); + + // Initial positions + movePlayer(player1, player1Position); + movePlayer(player2, player2Position); +}); diff --git a/SinglePlayer - Games/Snake and ladder Updated/styles.css b/SinglePlayer - Games/Snake and ladder Updated/styles.css new file mode 100644 index 00000000..0f3cb900 --- /dev/null +++ b/SinglePlayer - Games/Snake and ladder Updated/styles.css @@ -0,0 +1,51 @@ +/* styles.css */ +body { + display: flex; + flex-direction: column; + align-items: center; + font-family: Arial, sans-serif; +} + +.board { + display: grid; + grid-template-columns: repeat(10, 50px); + grid-template-rows: repeat(10, 50px); + border: 2px solid black; + margin-bottom: 20px; + position: relative; +} + +.board div { + display: flex; + align-items: center; + justify-content: center; + border: 1px solid gray; + width: 50px; + height: 50px; +} + +.player { + width: 20px; + height: 20px; + border-radius: 50%; + position: absolute; + transition: transform 0.5s ease; +} + +.player1 { + background-color: red; +} + +.player2 { + background-color: blue; +} + +.controls { + text-align: center; +} + +button { + padding: 10px 20px; + margin: 10px; + font-size: 16px; +} diff --git a/SinglePlayer - Games/Snakes And Ladders b/SinglePlayer - Games/Snakes And Ladders deleted file mode 100644 index 8b137891..00000000 --- a/SinglePlayer - Games/Snakes And Ladders +++ /dev/null @@ -1 +0,0 @@ - diff --git a/additionalpage/assets/images/snake-ladder.jpg b/additionalpage/assets/images/snake-ladder.jpg new file mode 100644 index 00000000..e69de29b diff --git a/additionalpage/game.html b/additionalpage/game.html index a01fb94c..b219e43e 100644 --- a/additionalpage/game.html +++ b/additionalpage/game.html @@ -132,8 +132,66 @@

3D Car Racing

+ + +
+
+ +
+ + +
+
+
+ + +
+
+

Snake and ladder with matrixes

+

Starting: All players place their tokens at the starting square, usually marked as 1. + Turns: Players take turns to roll the die and move their token forward by the number rolled. + If a player rolls a 4, they move their token 4 squares forward. + Ladders: If a player lands on the bottom of a ladder, they move their token to the square at the top of the ladder. Ladders allow players to climb up the board quickly. + Snakes: If a player lands on the head of a snake, they must move their token down to the square at the snake's tail. Snakes send players back down the board. + Winning: The first player to reach or exceed the last square (usually 100) wins the game. A player must roll the exact number needed to land on the last square. If they roll a higher number, they stay in place and lose their turn.

+
+
+ + + + + +
+
+
+
+
+

Release Date:  

+

2.08.2024

+
+
+

Updated:  

+

Action | Desktop

+
+
+
+ Play Now +
+
+
+
+ - + + @@ -265,205 +323,7 @@

DoraemonRun

Digit Dilemma

-

This is a logic-based puzzle game where your objective is to fill a grid with the numbers 1 through 9, ensuring that the calculations formed by the numbers in the grid equal the given target numbers.

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

18.07.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
- - - - - - - - -
-
- -
- 41 - -
-
-
-
-
-

HIghway Race

-

Highway Race: Barrel Dodge is an exciting racing game where you - control a car speeding along a highway, and your goal is to avoid barrels that - appear on the road. Test your reflexes and see how far you can go!

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

02.07.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - -
-
- -
- 41 - -
-
-
-
-
-

Slide and Solve

-

Slide, Solve, and Conquer the Puzzle!

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

26.06.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Alien Shooting Game

-

Unleash the power within. Conquer, create, and redefine your gaming - destiny with Alien Shooting Game...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - -
-
- -
- 41 - -
-
-
- -
-
-

QuickType

-

QuickType, a thrilling typing game that tests your typing speed and accuracy.

+

This is a logic-based puzzle game where your ogdom from waves of relentless enemies. ...

@@ -477,7 +337,7 @@

QuickType

Release Date:  

-

28.05.2023

+

07.12.2015

Updated:  

@@ -485,5088 +345,11 @@

QuickType

- Play Now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Anthority

-

Welcome to Anthority, a unique and funky game where you step into - the shoes of an all-powerful ruler! Build and manage your own civilization, make - important decisions, and navigate through various challenges to lead your people to - prosperity. With its quirky art style and engaging gameplay, Anthority offers a - refreshing twist on the strategy genre....

-
-
- - - - - + play now
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - -
-
- -
- 501 - -
-
-
- -
-
-

Classic-Pool-Game

-

Welcome to Classic Pool Game Where You Can play With Computer and - with Two Player As Well...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

21.06.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now - -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Anti Virus

-

Prepare to enter a digital realm filled with viruses and malicious - bugs in Anti Virus! As a savvy antivirus program, your mission is to eliminate the - invading threats and protect the system. Use your strategic thinking and quick - reflexes to navigate through complex mazes, destroy viruses, and restore order to - the digital world....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 45 - -
-
-
- -
-
-

SnakeBites

-

Snakebites is an exciting, fast-paced arcade game where players navigate a growing snake to consume food while avoiding obstacles. Test your reflexes and strategy as you aim for high scores and unlock new levels.

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Audio Dash

-

Put on your headphones and get ready for a rhythmic challenge in - Audio Dash! Navigate through a pulsating, neon-colored world while synchronizing - your movements to the beat of the music. With its catchy tunes and vibrant visuals, - Audio Dash will test your coordination and leave you grooving to the rhythm...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 45 - -
-
-
- - -
-
-

Unlock the Mystery, Embrace the - Numbers!

-

In this captivating guessing game, immerse yourself in the thrill - of anticipation as you navigate through the infinite possibilities. With each - calculated guess, you inch closer to the ultimate revelation, where victory awaits - those with sharp minds and an unwavering determination.

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

20.06.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - - -
-
- -
- 141 - -
-
-
- -
-
-

Bingo

-

Get your lucky charms ready and join the excitement of Bingo Game! - Mark off numbers on your card as they are called out and aim to complete a winning - pattern. With its timeless appeal and social atmosphere, Bingo Game is the perfect - way to test your luck and enjoy some friendly competition.....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 321 - -
-
-
- -
-
-

Bit Butcher

-

Enter the futuristic realm of speed and precision. Dominate the - race virtual world in Bit Butcher!"...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - -
-
- -
- 321 - -
-
-
- -
-
-

PicPuzz

-

Complete the picture using its pieces

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.07.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Black Jack

-

Step into the glitzy world of Black Jack, where fortunes are won - and lost with every flip of a card!Experience the pulse-pounding thrill of Black - Jack! Take on the dealer, test your luck, and aim for the coveted 21. Will you hit - or stand? The cards are in your hands, and the excitement awaits...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Black Jack Master

-

Step into the glamorous world of casinos and test your card skills - in Black Jack! Try to beat the dealer by getting a hand as close to 21 as possible - without going over. With its blend of strategy and luck, Black Jack offers an - exhilarating gaming experience that will have you on the edge of your seat...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Blanks Detective

-

Welcome to the enigmatic world of Blank Detective! Dive into a - captivating journey filled with mystery, suspense, and mind-bending puzzles...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Block Buster

-

Brace yourself for an addictive and fast-paced arcade game in Block - Buster! Use your reflexes and precision to break apart a tower of blocks by - launching a bouncing ball. Be careful not to let the ball slip past you, or it's - game over. With its simple yet addictive gameplay, Block Buster is perfect for quick - gaming sessions or long-lasting challenges.

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Bunny

-

Join Bunny on an epic adventure through whimsical worlds and help - him overcome obstacles and collect carrots in this charming platformer game. With - its cute visuals and intuitive controls, Bunny is an enjoyable and lighthearted game - that will captivate players of all ages....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Candy Crush

-

Get ready for a sugar-coated sensation that will satisfy your sweet - tooth and blow your mind! Candy Crush is the ultimate puzzle adventure that will - have you swapping, matching, and crushing candies like never before...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Card flip Game

-

Sharpen your memory and concentration skills in Card Flip Game! - Test your ability to remember the positions of cards as you flip them over and match - pairs. With its increasing difficulty levels and different themes to choose from, - Card Flip Game offers a fun and challenging experience for players of all ages.... -

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Chess

-

Enter the world of kings and queens, knights and pawns, and - strategic battles in CHESS! Test your intellect and tactical prowess as you play - this timeless board game against the computer or challenge your friends in - multiplayer mode. With its rich history and infinite possibilities, CHESS is the - ultimate game of strategy and mental agility...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Code Pong Game

-

Dive into the world of coding and classic arcade action with Code - Pong Game! Program your paddle's movements using simple code snippets and compete - against an AI opponent in a fast-paced game of Pong. With its innovative approach to - coding education and addictive gameplay, Code Pong Game is perfect for aspiring - programmers and gamers alike....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Complicit

-

Unravel a captivating mystery and uncover hidden secrets in - Complicit! As an amateur detective, you must investigate crime scenes, gather - evidence, and solve puzzling cases. With its immersive storytelling and - thought-provoking gameplay, Complicit offers a thrilling experience for fans of - mystery and suspense....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Connect4

-

Challenge your friends or the AI in the timeless game of Connect4! - Strategically drop your colored discs into the grid, aiming to create a line of four - before your opponent does. With its easy-to-learn mechanics and strategic depth, - Connect4 provides endless fun and competition for players of all ages....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Curve

-

Prepare for a fast-paced and adrenaline-fueled ride in Curve! - Navigate through a twisting and turning track while avoiding obstacles and staying - on course. With its sleek design and addictive gameplay, Curve will test your - reflexes and keep you coming back for more....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Cycles

-

Immerse yourself in a mesmerizing world of color and rhythm in - Cycles! Guide a bouncing ball through a series of geometric patterns, all while - avoiding obstacles and collecting gems. With its captivating visuals and soothing - soundtrack, Cycles offers a zen-like gaming experience that will transport you to a - state of flow...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Day of the Glitch

-

Experience a mind-bending journey through a glitch-ridden world in - Day Of The Glitch! Solve puzzles, manipulate reality, and navigate through surreal - landscapes to unravel the secrets of a digital anomaly. With its unique visual style - and thought-provoking gameplay, Day Of The Glitch offers an unforgettable and trippy - gaming experience....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Deep Space

-

Venture into the depths of the universe and engage in an - interstellar battle in DEEP SPACE! Pilot your spaceship, dodge asteroids, and - destroy enemy fleets in this action-packed arcade game. With its stunning visuals - and exhilarating gameplay, DEEP SPACE will satisfy your craving for epic space - adventures....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Dont Die To Ghosts

-

Enter a spooky mansion filled with ghosts and ghouls in - Dont-Die-To-Ghosts! Use your wits and reflexes to avoid the spectral beings and - survive the night. With its eerie atmosphere and challenging gameplay, - Dont-Die-To-Ghosts will keep you on the edge of your seat as you try to escape the - clutches of the supernatural....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - -
- - -
- -
-
-

Dots and Boxes Game

-

This game is a multiplayer game and most attractive game as we have - played it so many times in our childhood. If you do not know the rules of the game - don't worry i have added those rules also in the game. Read, Play & Enjoy the game -

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

19.06.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Magic Tiles

-

Welcome to the vibrant and soundfull world of Magic Tiles. In this - enchanting game, You will improve your mind co-ordination power....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Dinosaur Game

-

Travel back in time to the prehistoric era and come face to face - with mighty dinosaurs in Dinosaur_Game! Embark on thrilling adventures, discover - ancient fossils, and learn fascinating facts about these magnificent creatures. With - its educational value and captivating gameplay, Dinosaur_Game is a must-play for - dino enthusiasts of all ages...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Element Puzzle

-

Test your problem-solving skills and knowledge of the periodic - table in Element Puzzle! Combine elements strategically to create new ones and solve - a variety of challenging puzzles. With its educational twist and addictive gameplay, - Element Puzzle is a unique and engaging game that will entertain and enlighten - players....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Escape from Maze

-

Find your way out of intricate mazes and overcome obstacles in - Escape from Maze! Navigate through labyrinthine paths, collect keys, and unlock - doors to progress to the next level. With its challenging puzzles and - race-against-the-clock gameplay, Escape from Maze will put your problem-solving - skills to the test....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Fall Down

-

Prepare for a gravity-defying thrill ride in "Fall Down"! Get ready - to be mesmerized by the funky beats and addictive gameplay as you navigate a - labyrinth of twists and turns...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Flip the Card

-

Get ready to flip your way to victory in the funky and addictive - world of "Flip the Card"! Immerse yourself in a whirlwind of strategy, memory, and - quick reflexes as you uncover matching pairs and conquer the deck....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Floppy Bird

-

Get ready to flap, fly, and funkify your way through the skies in - "Floppy Bird"! It's a funky twist on the classic bird game that will have you - tapping to the beat and grooving to the rhythm.....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Formation Absent

-

Embark on an extraordinary journey through dreamlike landscapes in - Formation Absent! Solve puzzles, manipulate shapes, and uncover the mysteries of a - surreal world. With its captivating visuals and innovative gameplay mechanics, - Formation Absent will ignite your imagination and take you on an unforgettable - adventure....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Frantic Run

-

Strap on your dancing shoes and get ready for a frantic, funky, and - exhilarating run like no other in "Frantic Run"! It's a race against the clock where - speed, agility, and rhythm are your keys to success......

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Froggy CSS

-

Having trouble understanding CSS prosperities? Look no further and enjoy this - game, all while you get to learn most commonly used CSS prosperities. -

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

23.07.2023

-
-
-

Updated:  

-

Fun | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Galaxy Rider

-

Blast off into a cosmic journey of epic proportions in - Galaxy_Rider! Pilot your spacecraft through treacherous asteroid fields, engage in - intense dogfights, and unravel the secrets of the universe. With its stunning - visuals and exhilarating space combat, Galaxy_Rider offers an immersive and - action-packed gaming experience....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Geek Tac Toe

-

Geek out with the ultimate twist on a classic game in GeekTacToe! - Play Tic Tac Toe on a hexagonal grid, strategically placing your X's or O's to - create a winning line. With its geeky references and challenging gameplay, - GeekTacToe is a must-play for fans of strategy games and geek culture....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Guess The Number

-

Put your logical thinking and deduction skills to the test in Guess - The Number! Try to guess the secret number by receiving clues based on your previous - guesses. With its simple yet addictive gameplay, Guess The Number offers a - brain-teasing challenge that will keep you guessing....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

28.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - -
-
- -
- 41 - -
-
-
- -
-
-

Guess The Number

-

Attempt to logically guess the a random secret sequence of colours

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

27.05.2024

-
-
-

Updated:  

-

Puzzle | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Hangman Game

-

Get ready to play the ultimate word-guessing showdown in "Hangman: - Funk Edition"! It's a funky twist on the classic game that will have you guessing, - grooving, and keeping the beat.....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - -
-
- -
- 420 - -
-
-
- -
-
-

Hextris

-

Rotate, match, conquer! Experience the challenge of Hextris - puzzle-solving prowess...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

06.06.1984

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

HexGL Master

-

Get ready to rev up your engines and experience the future of - high-speed racing in "HexGL Master"! This funky and exhilarating game will take you - on a mind-bending journey through futuristic tracks filled with neon lights and - pulsating beats...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

I want to Google the Game

-

Have you ever wished you could Google anything within a game? Well, - now you can with I Want To Google The Game! Explore a virtual world where you can - search for answers, discover information, and even solve puzzles by using a built-in - search engine. With its unique concept and interactive gameplay, I Want To Google - The Game blurs the line between gaming and the internet....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Jumbit

-

Prepare to get funky and bounce your way to victory in "JUMBIT"! - This addictive and groovy game will have you jumping, flipping, and defying gravity - in a psychedelic wonderland....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Juno

-

Welcome to the funky world of "JunoJs"! Get ready to groove to the - rhythm and challenge your reflexes in this electrifying game. With its vibrant - visuals, catchy tunes, and addictive gameplay, "JunoJs" will have you on the edge of - your seat as you navigate through a pulsating maze of obstacles....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

LOSSST

-

Lose yourself in the minimalist and immersive world of LOSSST! - Navigate through abstract environments, solve intricate puzzles, and uncover the - mysteries that lie within. With its atmospheric soundtrack and visually stunning - design, LOSSST offers a meditative and introspective gaming experience....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Math Puzzle Game

-

Exercise your brain and sharpen your math skills in Math Puzzle - Game! Solve a variety of mathematical puzzles, ranging from basic arithmetic to - complex equations. With its educational value and challenging gameplay, Math Puzzle - Game is a fun way to brush up on your math while having fun..

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - -
-
- - -
- 45 - -
-
-
- - -
-
-

Ball_Jumper_Game

-

3D Ball Jumper Game

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

20.06.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play Now -
-
-
-
- - - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Memory Game

-

Get ready to exercise your brain and groove to the beat in "Memory - Game"! It's a funky twist on the classic memory game that will challenge your - recall skills and keep you grooving along. Flip cards, match pairs, and uncover - funky symbols ...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Movie Guess Game

-

Buckle up your shoes and get ready to show your filmy skillsss with - this game- "Movie Guess Game"....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Mexico Escape

-

Get ready to rev up your engines and experience the future of - high-speed racing in "Mexico Escape"! This funky and exhilarating game will take you - on a mind-bending journey through futuristic tracks filled with neon lights and - pulsating beats...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Minesweeper

-

Get ready to blast away the funk and exercise your memory muscles - in "Memory Minesweeper"! This groovy twist on the classic game will challenge your - brainpower as you uncover hidden mines with style. Navigate through a grid of funky - symbols, avoid explosive pitfalls, and match pairs to reveal the safe zones....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Nuclear Safe

-

Get ready to groove and safeguard your way through the explosive - challenge of "Memory Nuclear Safe"! It's a funky twist on the classic memory game, - where you'll need to defuse the ticking time bombs hidden within...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Off The Line

-

How far can you go without falling off the line? Find out in this - thrilling arcade game, Off the Line! Stay on track as you navigate through twisting - paths, jump over gaps, and avoid obstacles. With its simple yet addictive gameplay, - Off the Line offers a test of skill and reflexes that will keep you coming back for - more....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Off The Lines

-

Get ready to rev up your engines and experience the future of - high-speed racing in "Off The Lines"! This funky and exhilarating game will take you - on a mind-bending journey through futuristic tracks filled with neon lights and - pulsating beats...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Offline

-

How far can you go without falling off the line? Find out in this - thrilling arcade game, Off the Line! Stay on track as you navigate through twisting - paths, jump over gaps, and avoid obstacles. With its simple yet addictive gameplay, - Off the Line offers a test of skill and reflexes that will keep you coming back for - more....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

PacMan

-

Get ready to groove and chomp your way through a memory-filled maze - in "Memory Pac-Man"! It's a funky twist on the classic arcade game where you'll need - to remember the path and gobble up all the funky icons....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Pacific Air Battle

-

Get ready to take to the skies and unleash your inner funk in - "Pacific Air Battle"! It's an electrifying aerial combat game that will have you - grooving and blasting your way through the skies...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

PACKABUNCHAS

-

Get ready to embark on a funky adventure like no other in - "Packabunchas"! It's a wild and colorful puzzle game where you'll have to stack, - match, and groove your way to victory....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Ping Game

-

Get ready to bounce to the funky rhythm in "Ping Game"! It's a - fast-paced and addictive game that will have you swinging and grooving to victory. - Take control of the paddle, keep the ball in play, and challenge yourself against - various opponents....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Pinball

-

Get ready to rev up your engines and experience the future of - high-speed racing in "Pinball"! This funky and exhilarating game will take you on a - mind-bending journey through futuristic tracks filled with neon lights and pulsating - beats...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Ping Pong

-

Get ready to groove and rally in the ultimate game of "Funky Pong"! - It's a fast-paced and funky twist on the classic ping pong game that will have you - bouncing to the rhythm. Grab your paddle, step onto the neon-lit court, and engage - in epic matches filled with electrifying volleys and funky moves.....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Platform Game

-

Embark on a thrilling platforming adventure in this action-packed - game! Run, jump, and navigate through treacherous obstacles, perilous pits, and - challenging levels. Test your reflexes and precision as you leap across platforms, - avoid hazards, and collect power-ups along the way. ...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Save The Forest

-

Become an eco-warrior and protect the forest from destruction in - Save the Forest! Solve environmental puzzles, rescue endangered animals, and raise - awareness about conservation. With its meaningful message and engaging gameplay, - Save the Forest provides an educational and impactful gaming experience....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Sci-Fi Alchemy

-

Get ready to enter the funky realm of "Sci-Fi Alchemy"! It's an - intergalactic journey where you'll mix and match cosmic elements to create - mind-bending combinations. Harness the power of futuristic alchemy as you fuse - futuristic materials, otherworldly substances, and cosmic energy to unlock - extraordinary discoveries.....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Sciarra of colors

-

"Sciarra of Colors" is an immersive coloring game that invites you - to unleash your artistic flair. Dive into a world of intricate designs and vibrant - hues as you bring stunning artwork to life with a simple brushstroke....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Scroll Run

-

Embark on an epic adventure through scrolling landscapes and - treacherous obstacles in Scroll Run! Jump, slide, and dodge your way through - challenging levels as you race against the scrolling screen. With its fast-paced - gameplay and dynamic environments, Scroll Run will keep you on the edge of your - seat....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Short Circuit

-

Restore power to a malfunctioning electrical grid in Short Circuit! - Solve puzzles, connect circuits, and overcome obstacles to bring light back to the - city. With its clever level design and challenging gameplay, Short Circuit offers a - electrifying puzzle-solving experience...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Shuttle Deck

-

"ShuttleDeck" is a thrilling space adventure game that will launch - you into an interstellar journey like never before. Take control of a - state-of-the-art space shuttle and navigate through treacherous asteroid fields, - cosmic debris, and alien encounters.....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Slide Puzzle Master

-

Test your problem-solving skills and patience in the classic game - of Slide Puzzle! Rearrange scrambled tiles to recreate a complete image. With its - simple yet challenging gameplay, Slide Puzzle offers a brain-teasing experience that - can be enjoyed by players of all ages....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Snake and Ladder

-

Roll the dice, climb ladders, and watch out for sneaky snakes in - Snakes and Ladders! Race against other players to reach the finish line first in - this timeless board game. With its family-friendly fun and unpredictable twists, - Snakes and Ladders guarantees a memorable gaming experience....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Space Explorer

-

Embark on a thrilling cosmic adventure in "Space Explorer"! Strap - into your futuristic spacecraft and soar through the depths of space, uncovering - secrets and encountering breathtaking wonders. Traverse vast star systems, navigate - asteroid fields, and discover alien civilizations as you push the boundaries of - exploration...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Space Menace

-

Prepare for an epic cosmic showdown in "Space Menace"! In this - fast-paced arcade shooter, you'll pilot a powerful spaceship, battling against waves - of relentless alien enemies. Brace yourself for intense dogfights, electrifying - power-ups, and explosive boss encounters as you defend the galaxy from the imminent - threat....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Space Gum

-

Prepare for a delightful cosmic journey in "Space Gum"! Step into - the shoes of a fearless space explorer armed with a special gum gun and embark on a - mission to restore peace in the galaxy....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Space Invaders

-

Get ready to rev up your engines and experience the future of - high-speed racing in "Space Invaders"! This funky and exhilarating game will take - you on a mind-bending journey through futuristic tracks filled with neon lights and - pulsating beats...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Space Huggers

-

Beyond the Stars, They Embrace. Space Huggers: Alien Affection - Awaits....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Space War

-

Blast off into epic battles. Command your starship, defy gravity, - world of Space-War!...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Spaceship Escort

-

Prepare for a thrilling cosmic adventure in "Space Escort"! Take on - the role of a skilled pilot tasked with escorting precious cargo through treacherous - space routes. ...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Squarred Lines

-

est your spatial reasoning and puzzle-solving skills in Squared - Lines! Fit various shapes into a grid, clearing rows to score points and create - space for new pieces. With its addictive gameplay and minimalist design, Squared - Lines offers a refreshing take on the classic puzzle genre....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Strata

-

Immerse yourself in a zen-like experience as you weave intricate - patterns in Strata! Unravel the mystery of each puzzle by layering colored ribbons - in the correct sequence. With its soothing soundtrack and elegant design, Strata - offers a relaxing and meditative gameplay experience....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Sudoku

-

Put your logical thinking and problem-solving skills to the test - with the classic puzzle game, SUDOKU! Fill in the grid with numbers, ensuring that - each row, column, and box contains all digits from 1 to 9. With its infinite number - of puzzles and varying difficulty levels, SUDOKU offers a challenging and addictive - brain-teasing experience....

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Swimming With Sharks

-

Dive into an exhilarating aquatic adventure with "Swimming with - Sharks"! In this unique underwater game, you'll become a skilled swimmer tasked with - escorting and protecting majestic marine creatures through a vibrant oceanic world. - ...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Tenacity

-

Experience the timeless puzzle sensation of "Tenacity"! Arrange - falling blocks of different shapes and sizes to create solid lines and clear them - from the board...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Tetris

-

Experience the timeless puzzle sensation of "Tetris"! Arrange - falling blocks of different shapes and sizes to create solid lines and clear them - from the board...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Rock paper scissors

-

Experience the timeless puzzle sensation of "rock papaer scissors"

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

The Mole Game

-

Get ready to dig into the addictive fun of "The Mole" game! Take on - the role of a mischievous mole as you navigate underground tunnels and hunt for - treasures...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Theos Escape

-

Experience the timeless puzzle sensation of "Theo's Escape"! - Arrange falling blocks of different shapes and sizes to create solid lines and clear - them from the board...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

The Tin Death

-

Prepare for a thrilling battle of survival in "Tin Death"! Step - into the shoes of a brave tin soldier and navigate through treacherous toy-filled - environments. ...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
-
- - - - - -
-
- -
- 291 - -
-
-
- -
-
-

Tower Build

-

Reach for the sky of dreams! Build your towering empire in the - captivating world of Tower Build...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

30.05.2023

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- Play now -
-
-
-
- - - - - - - -
-
- -
- 241 - -
-
-
- -
-
-

Tower Defens

-

Prepare for an epic battle of strategy and defense in the thrilling - world of "Tower Defense"! As the commander of a mighty fortress, it's your mission - to protect your kingdom from waves of relentless enemies. ...

-
-
- - - - - -
-
-
-
-
-

Release Date:  

-

07.12.2015

-
-
-

Updated:  

-

Action | Desktop

-
-
-
- play now -
-
-
+
diff --git a/assets/images/snake-ladder.jpg b/assets/images/snake-ladder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1dd1239bbccfa97d52f47a4927801e0b031e4340 GIT binary patch literal 58849 zcmdqJcT`i|*De~RH$i%jN|mYtg0!ee7ZIelh=`O>1f@xdsPrZvAVrYgK?I}|r6Wo& z3Q`h!PpAP>?)JO)oc9&Z8OM9?7~dbi?byiPBzvtj*PLt3`OIf-;t%2sh(SwDQw?VTJZ(+}A~|&dbo%Tm zlC!6XZ6GiRbczhE#V>2oFZdQC@(H}tbOFeLZK}F5V#?HYhASfh!QAAqis;t~K zd6iqLYU&!ATK5bLjf_o9&1@dpKC-iSaD4LA!_&*#=h@3wLBS!RVc~J{ZxRxd-X^DH zW#{DPBx-hUeqnKGc?Gkzy|cTw zk3Bg2J+4#0IRD4-e-G@~xXuFOI!y|Ql;ZcePM!7wPLi{vWalrFGv3gnuy$j*a3zqE z`DScp#TP0*DSb4{1NQ-HR(@%u0Ot45{%d4^H?SA~pGNjS2lmgn#zC|sr+~>LISYb- z@N`+>q8D1ih2Nk4Z#wCd6v-Tp)Ns%dMc)z!XjRj6ur!{&lXE&`t!fD;lxJCDv{xhW z06!NSBBxLBJ$`F0PR9i{O&=0@*f^a@nf3!SDo79ul zQ+TmEQ0gAZ64j`P%&o1BTJXKEMUZ&2+Tp!tLVmVYnPmAsO73CZ> zOa>U???B4#9D%bE!PG>M{dc251-#_mNL|CHw=U84icHz{a=Wx_iwz&|-P-dlr?b>5 z_IdO@mR*iq`FTOqgD#+e90FI=| zfn#JghK*l1dh6mYBF15a7{0qeFWEGRAQVih4N3=hC?(OcR3UI4-OZ3S`qThHQVz1= zJ=)w{dRvFS^(xGA+sW+cJb|8t%$e&RQ7=Oep=5%TTbtN>@TxI9uUaM%^hzR@2x=Q3 zf~Z~hQi!1Ju3-o|Xb^%;*>}7ch=lxI7w=N^CS}k8gDKW!bVvsiLBY+#;3Kv1mDygP z1wIX4Xxsz#iORHtCilxV&E6wKP>}4A4t!wF5sbaL494j^bEzPL1i-D3J-QLdj;Pj( z!#PEv1^t(m`K~bAW94?3*3xns|<^O*qQ*@Zr;yMn~9oi@- zf{+z5RLb9JzSj^KoX@$8=gca|EnDGD2^WZD2G($u{C0if$p<@*j>n=Z$E6{&GJS>!n#;i25kBuh56_Ff&v}l{ z_}l((Cxt0<6NapKYd+Qj?KTceDE}-NU&j8|bXlf9E#@VHYM(^??DX?sDG4|eFr-Bz zyB=ErlFz{2_%G3mqSSFOcXW@~tIF{rS_eIQ@3GqjlPhD;Gm3nEdwWK&S_^fVtn=fs z*`!Ymm;CSelUZ9eKE}AmuGn&@@yWN9NPq*%vn+pVckoJJgJv2ErH>F3@dm>ZSqfI- z3ZFS|P3Y#Wk@n$ecFP>6XC>RH7EI>w<%%{gC66D*BYQ&)0~$;+x{MD@?svIPxp)GhN?F?nf$ z-pH0om~U_~<#VzdKKtwJ7mCs5Usy0k0vw*wz8Iz$NH+XTJfU<=d*8?-eePY|n#x5S zY@o#^QE2j+6tXrcNM!D6DbL(Y5$%6OvX*gN*BCy1fHLZ8zWHvHg_jGQqw1UyE9OxRl6S9AsK#kmbdR{f+_yesH z(9?t)<9+x@`Eo*nrll=E?f(m{3W-$a4H&XwLic8(AXwPGy+RhCUNP%s3wFS;=wE z?G8@mkNeAR`Q6AU`F8WK)tq^B50n)y{GWP~Y{#JBVP#cBP)Pa}^e@IMokh3@n5ToYwc*I?M9@G+ske@=UAr^u z%IX*8i(?ON-mk!ZnPsmdPAwmJx>At1_E`*%eanlHe+K4t8&3?g=# zsh43X*f3xp8HfKc)*^xiu_9KVYvj$c%icY#^KY`nkK}w3zpn)mz(dSN>v0(c2 z*zQ3r^XQ^@3A|e!-G_hap^K*;tWTM*jyVt}a1cQsTndSxOf%zqcf;-IF*YbME0TfI z^^!6%W2-TKn2w-AccR>_KyAgXM818!a}vMiqldv#rILWzu|ToYNQ##@(_+V1N6zT{ zY_nfhztqmE{E~KjcyO2OUcedYicDen|b^! z;AWvW)0bzmtq2Nx0wwye8=sLiu5L%7UHQ#JmBjarq5dKV|EV}#=GlB19OACO_=3wA z4|)*~k3g*1)&t7xW^7~O)ta$O0DP{B#8o0lwOuocC(0Yz5yR+rd(h9?!#8KO`EtJ> z4-(HheRo(=+LG;dLs)WdTJNCD(o~CZrkbb=5Bgvtu5MrJ_u}Bk*6-(5s#{{|9nmK5 zWR{TSa5xhD&V$=?yuFB3l%>o5Cz>=);(`5-;spLk>r(!=H99;y?&{Jo={r0;Dxw#= z&h1<%z(x>M@%IRg3q(*q9n{d^Zqa*@NRR?`CQ9;vZCCejJCz8!E`3=I?Efh_p!>d(c!q?2{UxbI_)7>|BWyN?(Vka$Y*)v<=LV)` zVoYnur3xmwMg;xZu%CUga4}%`V<^hgMxHs|DfRU8>K#>|#oz!+Z@ZRe{+Cu2qt!px zrI%go2Bpm-a^wRN#5*=+)@Kdq<9M%=Mk7fh8HDA^Rq_YmP;Z4N3cNm;34?eQ^tsV2 z4u6P#Wxd`ecV@^|d7pM_n9GJh{ksTFsia3r-PdFe>5i^DY&%Y$nI9}gj9E>aO>`2r zyO;y=5K41VS+Uu%S|2YPQB<&?9*s5nf{VNzGo4h9tTrbL#)Y#QpX^>Q_s2*1sXWQY zY1H>K$GaArG|#W`LXyq5enDmoXACzG6;m-D{usSo4TA%D&kQN8$!5QEV2h0YF(bhL zH;IZ#Ma@&hjqSZda1{p#O;pc9tJtCyZIP4OEd(C4XK9J4a{1m-L|*?>?`kD&+eVR| zj~s^C3`vj6=3IKzieLOJw=GlYgwi=RI{W0Wps`6-=!J?r{(ke7XJQz2NUX$=n3zDc z#!vQ6j(I9F=0fu3%#6OUAE`*YuyREQ^mMDT$Z+1r#C^lT^$nMlK4smsF4{m9_gd%A zh4UKcwnPg{GN`cTs%YI1F-1}2gwe}8L)Hu}k@FKA{FRsI-^Q85ck`!=7N_3P>3nc5 zC0zGO{O|4Q+`1j1gU6T%(#k3OSO*Cvg0{|#!q==v;5$WHt0JuJfKG7vK{0kg%7W9K z{-}r}6Q}BRQSFcDdT;M;*8+!qozqIojaxmU6e;&9WA)5f)bx9$c2pmm#eDfraSs#k z{c#pLHaZSl_19li(azy?{=P#ULH8~6-nXe{10nm@=P#cZ(dgcEO!}Mz#kyi4=&RaR zj}GC`vE3)p*j6Hlzo!kdyG#UCQm?^|-*9}E(7&BAPSXx%XyiiYxAF30U151wbMqbc zz2YXJT{lftSgJlI$6duXfAHS1K)3ZOa|@Ii0^Ht`&=@ zN;`8gi&4^&a5GZ&%E@$MTW55G{2rhc4||*P?6fQ?^abI3-Jq) z9kbsavy*7`nfo;_2YiB$gf~7#^lip0KlMy!AB7_?phx3T^g`W)p^6vVJ*$=9qM)wG zG-H8T*8`E?VbSWRVj?K#QA2~dxi6QAlM~Y9eNEJZa2a;W@Jr0TAhO5lSBapwLcsBA za6}xcIW7#jCfUg4#WgR!*HdK${imLOooG0ckc3e{_H{rh948DVl`nd~Z@p~U z!J*neKD*pMTfx`lXO1C30@1ND7dCFS)k7XqMqP?uFGS{Fe#X(^pT z-$paRPKCO*miPd|uxjL|Km?Hj`@etG=cKmutHU1booMq3esH1W;Y(;fgu&fV_nnsU z`qxbYG^~ABD@oZDD~X1;LD?EDowJq`2L;0Gn|6QR`$+kuhw0ZL?Ur}>06g%}i4)Sw zBdS^5mtZHeMyadMx?vq3jWdMO_%ROpG37>qTbd;?g2|8A5ecM;?^%_)x31`do-Bz% zkmWC3T^rB4J^{xlYTM_n9QYOcl(x{-xRpj8;H-&7fO;IoezL@8OSocOz1`S-Ia=M z7wm|+{eN!oU7JUhu>gRPoB;p}Rnhk8eZm+K6sdRe&SU;j$XqrM5`U@BCj>cI>i7f~ z&NM9HJl>mu!QRQ^Fgn$?bs0o5@93wmg$%QF4QVg;joBBK*l_3ML-5SyZ1CwLDB-f^ z<#*03-S8HY0{DOy#tTmb0YK3#^NAZ9e5GZ8<{lD3Z15jF9z;+Ust|Hq5c7>RGZPba zjklRP(*-_l$*hK&w93?OYee%cC|h5%Np}nUjEc8WFV?e2`m-16e_q}}$&dG8*l-bt z`FNl2M9_QA79d)u01%<91OUPyf?z~Yhe&kYj5+qH&P^k17^?2H+1CkPm~-hXMeZAE zoW>kA=uLtq5a`0!=xu?oG1gOW!%47$hpS(#!1d5jUf~+kss>HcOW$4iBH0brEn4mj z^goOb9Q|~1dYMQ{|7POAjF35S7W_whE__+vxEoP5_60Ugij9M_*?WqOlNXgSJTF@hpSrZ2h7VSp?J=FU*v0$L4K|5n%4t9HFh2H}tH z)zRv;gxtjtLE#e4`S-X#^avF56|PWTx*xvKW<47gBNhYW>xDh^&JE2i`dPMm_%kC- z+W4o{IebJTlV3v>n8`8457G8WV?jS4oQWmG`RL4e$=9)rvjX0g+hWh`jre{fQ{qM2 z6U{^KbX(vb#eg5~UfjN;AF+m-o`33BVPoS{XxVO)KcVU7ra&4kH(V*j3j!Gfs$Ut? zYQ7oFHg>37(t4zJq*;lmzwzRNXA1J>LywmCeRVRWNbt|3FU?eSI_lRk})s|b8bJy&(M{}4M zb&3~<4U35-SmleTv2<1I56c~KW0rF`T$0VuQkgb^fk%Z9ZXAKw!~=j7d-k#Ga;?QS zp1)Fa3$hb_M`O+BblRqdiV;&qUlhz$(qj05DDCLXHS-X%UTcVyjS%<4v{Qri&|^zS zoQ<8isyh_@d*6nUb1V3<4I7Az zPZ+a@^XXX?Y$+Q1%R9+&$`j)32~AgFwNf-5t8`EI#8kn%tS`_vR)$n0X9IKSVm zQLBAZw13b@^-dTQkL35}VOHsy(DFo9X#08WbeX;5 zrq^ZTlI`9KmV0LAJlTI680T*vz7Qk3+w=mKF!4P=WUnXKSOFiJ%SdGQuL+k-GddWLFNFByIMnYhM7Vi@6H|gxI)*0ZBC7%(e01r! zE}+5Ddq#B8Qhoxti}(yCo4~2pjqEmfdpO@5@4Rtz*AqiGJ?>&8mw!h6T@Cq7%LL}K zeL1sY-^QtonB8p_{00>I`Ov+tJTzlVJRcwQv>Y$_qOzIB8*YR~v?{Twj>*Vvy3A;r zHa5I;V&@|-KR)I*$Q+qF})KV2b5kW;ItjlG*bSQ5j|KnujZ}I6kE`R<* zR-?0wZ#=Dc3oS(imYULO@2mo+K!7HS|x!uerO;+ zc*~V1WDk1Ku_32B>8Vz%lwo0Ieo&iSi`9U04jh&)B~@*y-;U({!dr}0sae?EU+CSq z@9OK4fcMberEy+Z$I2dpjf~)-h&kv8WVP27K&KK2y?gSy!LEv~Gdz4Z&?6~WxIvAn zt0IK5EH!6P{jkW{H9>to4R&dFuQo+5^y&(JdZ(;?pb#J) z5ZNoWP?LgZ!fOWb!@D520B9xRHxQOn_Nh)X47^1@09ktgKxKuZr6u)A{levf*xAhK zUyf7cnA6w{gPN)e%$<1pJ&QAi&Tjlk8j9T?WSd923@57?HA$bVUqfZQ1TZhlBh_Ul zl^Oh1(I!?>%%hruqMC6D7uqP6NYg%=`ir?P*S7e0*cYIcTa+6jEa zemdoj#j-CYs+ntOb4*pai6F776~fe%pm&{O-+bh#Prs@2+6MIT{jf{b7S0S>xc=1m z8=~?|j6V{>u9`Omw^qkD%}nSR1_u><_h9+9e2H<=GWnT>=3*X?JGWTlyR7DvQUPA* zY9(yv!j%O=Lop#==orTC4hN#dIi3<=`df>Lpk;%Eei*A)eQ>P5P2NhJLygzfEfrT^ zZWy1r#@Cx)S-u#FXxwMNKbsOAv@4+p73|Kk=tP%IwAQ4&>kJh?kIgOo2{myXf2l?| zALb(Q#=OTZDlmdHiP1SK@`l{6tS0E5Es*eOq$pBx<5aP=K`CkV+xYdxOE~Z7rrHAhzTKRCWXRRhlrp@EI-D0 z{=6O-mM3GGhg6-$DL6~s0yAVbjWTMFh1^EBF%@-|SykCRbkDXnwK$RTU0XUG*0Fvp#O2;y|9bx;i)pED*wytxZ5O`Ez=!jnvUa9!aA`^C z<{!xJFW01yu?fbl9#%E4dntF9LohYC1YH0U*_{AFl0hj;^_MQyqMMXUUiE_?SJ*h6 zt7@!+DU-AG4|tj%z>ySM@WqaAuW{2TZj7;}&C zwI&?0Q(#pQODlDzH?rQeBn%o|e99e7sRULb z0OdL4ZB!zHUdlnRMaCqiPfI0~^mUx2Ck%%l1&TjxWGF~Rsy))^nRQdOb7xLFy{3Lo zEj4HPnRtWg(xG#1B)xPE9ZQucqx8qRI8DmCr|di**$h`Q`p5vQAPo}`?BnUJfE47H zG%(H(jIK}ya?1U?$W0u_7b2)#?{P){u|2;ZNGXS*i6BBqIX!%)m!2R}ryI;GhqlU? znea8=WLruc5}({=Ul_iicB*W_R!%&PpSgDslT$Y7=aNK=>_3lD>yajc^-p{rm?DkQv zP`AJA^<37P&Nzl9)^50TBXEVSQl0y%^Il9=NX zE;!NHyERdZCDA{94)qfQo>wH9g_HgKj(X{XT4z1whN4N%+?JtC`WD&AaHh`1;I$9; zV~4BKG1?^y=;;tM@jK-GPiI-H+IRV{R;)MKaCY2oWqw<=c!eI)D3Bflg3iz5H2asSE z1J`i$$O&x(hy7h$@^}aC3eAF+vgq@74FjECP<|n=fge|goRkl{JcZsQpHn(QY?1Gv zU*zfbV)7{46EmLVwTf34M0w^XF$2`rx_Du5=Z6PPlogNssKRQ&Y_M-`(5;W1 z91p@b$QKMHu%t6CP98F`e_?X>YD=E7^Z>X)_uXM4XpICQC*-mj+MF2i!g`~}OaeBl zU|Kd(`m)oZz#Hw$!{>kWR{l!7JMlq-HYa)_q*SmYb}7MP`Ov4CFnsmu!hZJ=WLzHIQ<%vh$KEKLLub5tYI(MrN^$kmP|1Z)vh;o5g%Y!U z=C<5@WGXF)Ae@+P2obcSQ{Ipk`QUh;_l~@* zgAz}h)a+^-Kc;jDy+9fJZ)~Xs^Q>yLI>Ub9vBZ69Bb6zPX%~kHQb5x_5tiIAbY(h8V<)U2sUsdUOV0{wpY$Wku_m zOs0l+tJHW;j;}L?P`!y8Q({>741`ypDnJf>ClJN|@e#~+r0R!D8`%f;_X*|> zavYr&)PVu)I2m&uQEg~QGY9K4<~)CqUk+CZhOdHZ*aAHt2#RmpUca`Gd&0C&t{B@U zMs@wh8Q2MeR(>n|aQ(M;$x-(5gm%s1ZlEOTSAoe2;H9Im9NOh0t^j6aIA^Fm2z%zQ)JTBe|(-$nZ#kVf~MQC~=-A#$44eA3d} z&a`@X=3`@Gi;r{0Gl8~SRD8eW1T?>Ns>BX+0>C_%)XT`=2RZy9(W2q`)76k?KF35R1L^M|+T# zLTr3n3iy?@0)o*yUO&85=i~M5Uz%yc`~V|2@j)BtJ)pEg??0{gf zqOPrka|3>cS>xUjt@Up>gH!$46Q@wDU*&gjl;>X1pL=nJvg8jSB}~-*ivo}x|F>Y3 zTLBbX`7wODg1{o;UR2rqDk1eOFyc5#Ffafr6EjPptH7mYR&K z`agM;lN3(HktpkONtW4(b}>fF0s6rF(>y@l_@BB6D8iX_aWgpUMs?^qMxdYL#^)_m z*?8?{2xJupK(IFAV}ywC_=`NyemD&eXiPnrQm)ej%rDj}+5q z&}mJXc6%a-TbUI$&RdBRmu&Cvv3_q(GkH_3Cgp1Qui`7;&h{(DelQwe;xH$@C>Y3- z@lOktjjFbfn!&?eRjJ)(zhv%xfiN@*VVHC?4A9Y;N|V)9Q@2WGqS_1TtFE5@ z7OG3?PA;n52Hlce$=F?#B|LYizJF&yw{=3{Dw;kxxzw6}Y42e?`{MpZONxKmsR-ct zH;=-AAdZO%ZluZn)PyS46BBz?c)CI@b}pfpQTi6yoclA87rKi2*B$Wx%#HBB&7Q*_ z(~7jpKsG6~Cs|#pA@q)<7*yILQ#5lg+x7C^JpabWS2sC<>+-g9S*Ol$72Zbo(@0h7 zlBAfcwRQw7l%Jk^K#sO7QqK0=3(D0LPnxvyHkg9p(2nJ&3R-N4HU*`;f1zl}zgxVF z;UnBQ6v9WE850r&JgVwrGU@*r-M{9^op1?Tjo$n$pHLQq+GP5YZ#mf^Xkb6*#;w{y zW&2S7Lx;)w^m)TBMKnyx0DFMWSH&0v(2OW*DsncCRX7Z^JZ)%+al3e0+Vqy1R9x%p zANzR;drY3cHVFUdEa0d79EZ2`4iBw;Sm&e*>-Z9h2SApUV<5|I`=#c8zVvTJ7jc|j zQ@-RUGook+d9mha=^$9{GNjg@;1QMc>XH4Rksfyp`_WRQ>0_@`FQ2O${qFxv{W#Wa6_DNTIbRo z^)hR5L($!Jf0;j?Q&#z}r}eeM4=7-ey-O>ILqmb5oE?=pSTD_nF_}rVsaD+&L1hwU zW&Bj!mkWBNF3*5OJXI#+|7E#$FKpmz38 z51FLouH9uw{=M>j^|J=p1GXse;SLe>GssiAKA}J4p8@`B zov-k7m<4jCIHjSPVVreI?km}Q{^^sq^mW9x*2O={WgB^&H+&m(?|Dx8DVc;)oCDSr zIibUMcT^FU{{>d|Sz^sje^702(SG~q>$A+)Jjm5Wp1-EbtNvlm1OG=QYb7~u&_Y<0 zxqU9>_@o;4j*vi>>;{|YOifiTlJef*S?$9)16=QWNCe&!psYj=-jBJS6@KwKz;pop zhn}a9h>tP2mjn^`Pa}*vA%S|IgTv_RBmL{7ui5wsB&FV7YuNy=2MC!n_6!^KfB@iT z)7N;CMMSWCPDV7NO;Llal2VXs6wj0 z&%3rmR!4&HQ&0s09o#DPctigjaT6hUYEFabya*|Nu1IhCu@AnfA_rwhsOCd+pl;@RT?0LV~J28S#pDtSG@zP zVxQ!iEWt_+xXJ_*b!>D~I<|b1h2pfsa$eXPM>dx71y<2sn%F{BDgQf*a)PmW@%y%A zxJakAl?-O0eLOg**kK$Tj02ax(>1F|pIU7<^9m~4RU35DmROp-imr2b7p#Bv{3*-z zG!ewd0nOqKea{~U`JHBBd@c2^&k0~GeTSKU`o&ivaM%ze}t0|4g>j54Y>B@A%Lxfqm~M1bB}?b%qtVe}|rd?&d&z z3mb~g%glm(Q>Z>1ETUlWCRoD!X=Gq>0vr7kB>nS%3s}gkTCP9po$T#e!XWzB6~~mx z!dg*(KbO1*UW(Q#AOp&Mzu3^vGsXx#V=8yka!9-R;f`fk%3^&0^d(|<LL(mkUa>vd@_pa<$TqC34d(uhn6%P?GO#Tz`q2vV&U! z)yoFCP3YCaW^5)B&g@;@&P#zAHk-t!r@D;uq(}JVG$-e@`f!&zyDELJH81S^wnfVE zxPfnCtKu*{90p80bYw5U%!AE!6`)o?RC)p^%R|Zf!pEUlEd-JkhJ_<}d4*)j0j}+9 z1mJer{2)XpdO|DxXpKo;o~xUca>_ts*5Qht7th2guGRNgz{2>6AfQ-<0`T$& zs4U4Op8LfLy?j_Rrg&{uyP#QUYS~y`xsJThKiB>+IJvO7`iTcA!Ny#z*o~IHqGiSh z-Vk|>FMbEwV($laM)$Pr5tI#~XFGGvCGv_G9?bS|efhbysN{)Bn+;zTF6G_?vIpe{ z_)$wLy|L88WdhW{SNo6hi&a=0HWpYx@JxgbaZ!L77*{{uS7=F3hMh-|*JETlTT|g= z*pxAyv8P?L7@@GL463OW#$Tqa9-MxR=ATzAinWtG+qBP*)5!Mx)Xbdpj+hlpb@Q?I z=M9{hq>`u_5R*vUc9hlOR}Hidj$=PB8m)ydSR@VK3BOn>j`zYLW;W=dt3%s0%O8v- zVZiFHau4u8>0$_PERFRnn#yqrbh?DkS0RUb9-1%Y!w=HM&1O3T#A>T5u&yY&(?hLv z#bBzXA*|YA@7E)J??)>BUhdW=e9^jB?uK$@NH1htS%kIq&aIx0k{pnO$a&o`py_^X- z!dt+il7LV-PNXbU7FtP^mwfI~YOasAT#T@;s@YZxbI8Ykf-TZgt9@8^?hF`85jlk)rYGNXJWnK?8Hl<$>AYdaVL=wBVQ`AdKTlUU zs*79H@AFuJo?(`A`Kl{HHK2y6K@+kH--c&)9^3u_gZBZyJRC4?iO2nf6j0BJr>&8Opk7^bVa#_Je$fE z3j57QZjsFXVwbPf_QIsB`V_5K>M3&{f#8)9&*6@0^_#>=be|5=<5m=f=d3kuI7}Hv&AS=`BNL zE`a{wY)k}ce81L{T&JAV?w-rk58w|f|H=4+@)LXtPTeO*1*0}T-C{OcP>RuR+wvLJ zKBX$S$)%et!i`CP`-OX~0^Z_Q2p^Ee7~?SxK!n2rP|A-v86wx+5$H5W=#CB!NQU{D z!M9Yw$F4mL^zL7SV(-XE9tsjfh@fV1$iam=cyNHkuvjD5)fF7*r|y}xanSgKal(4i zOO!$O_8GOu-YaLWTr1ZvgCHewp`+8gM+NX@r{U6qL#AV$0vL0Dc5+1TPRq&mfEW_n zdbhq`UkFVfCf>Q1n0B+k_i9!jV6wTQ z%8yV$E;3H|#2wM1taq>eN)U=Y2AF_Mp%_KTQ$GsSE&CD~7KV>z2XQVir;jK56T%STh|LIHf<~G7 z=Voz4b!uA&6{NY|hd6TXZ zoLmu@Mw_m&YAK5o;!MIb!CBzbtQol2+b8xzqhUK>XFMjBzZKM?GY(oH*(QE-o4_E+ z$mY-5D+SVqUcR0_w+TT^RBfEQzbN8P!Ljr8SR|}NNB6hm{0oiIyRX>#88A(8ClAAz z&jEaOjIfk9xtZEd=V3_#XO=_0)qUwuyYWQ{1}MWZySRt|I`Rj@U{qhj>4ZW+jw#4W zLB2JwDMq`!W`CM~w?|Wv1|=$!IN^|v6mP60Sob(5r-HA;02K6Cb0YMSkgeN|0Pbj& zadfGyBcU3s^4BwdLK5yNy>%X?euh{-2}RkWW#!xT$Pc@;7@gUo&Jo?O zqV1y2s$$K`dG+&w!Zgl`4@V_~130i#5H1H^am-@G(Q%!(Hi4s-*Z>2 zu5LwD^Fd=-4C=%?Sk#SYGN`^Iua12i3vEB_sXW1eZ{gGG?dUC9+`iOwD`>Iy_-4N49 zgQN`SZ9I5BhkQ%ms9>N0AAbI|&J~mC-Kv8TEPSsEL-Kg?@EI|xiZ`|GwRmf4vZP$I z=@REE5S}nKAs5g%XB-Q7z$64A$7g5q^Op(I=-sqtp|LZCC@zzyN1 z>YjzpW~#ZMlxvq1yMA<-a*?=yOru5R9wQMfz6790P4q}`QdwuVx)%%_XEU&#KJ}eX z{}znd<(mQN_~rEXvn1j97$$-$uoHYJ1B^2lZFpzQ^T%Dpz1;F^*lvu92^I=0B+h0_ z^|w#Tri4B5&saSqR7qStQWr(JMk}8~uaAXn zNGP&6*yY2@bH9+vM;Fem7(bc(7qm^=RDuSW?4L33GWeEZR}zgmkM-)jH#JFrf8aN9i;!!n)5Y7DynaMl|!vl)T&C~JkG zTscjDVINFbMp%3@_;A_r6Y6q8RrEYJSxmqkbn~N*i|Jkl%_R5?MJ4niiW1`$yc_k{ zq2FH5ey`qnwA%OS>$TX4K(Uf$6Qfi2*!8K{`A3H4hf;xjzvdv26`78ekt~-?A|#X} z@fN$!W}5+GTRBk55Lp8~lo0t{nDsA0Wf6z{@~(ML6hylbQ9ZQKoH9-&7(L2J8vn8I zf{fVpp0k1R(XbA#y~yT4KdISL^R{~4K$iU%>rOez(s<{xQvI#@^vgDiQ(6c2)Gxe$ zT!b}c*p(}PG%B_!LnpY`sXLrAR8}TF7tYl+V7WeLd;X!}eS-vk?z1nWVco_vn{CcF z_l+=*%4eHchuUR14bzkCJo4-(oXxvx+33W-U1>Nd<%_D-&pn%A{mYBIx}E?87SJI8 z9Vo&};!Rcq7;!f;P!bV7MHafq#kfICDX-FnJrrCZ!Qf4@-3yKj@oDQ9_qEby#`ONp z#gzHxr+~g%hitNGBZy&)%58j0uz4F)`IgEf??2UqQyK|p-~IM&{kiG8Xica4WGq8} z6mQaM^c}|mZe#XCtNUn|Z1nq|`YJ3p&YR9PH?w*s8X-;R>(YU@u1FgwF~?~|lWV|R z5eGv5Rbs1@L zMSyzGj$QikmeDa)^hleTRRj+K0V|yLN#abKwmwoyBj~1*#!fU=^5--1`Dl^ec=su= zuh!exEWRzBW6)1Upv3cg;ZGIM{!R~`uWApkPZ*hWYckt~+ ztX+EwbAWK1(gPk%7ij>XdpIl@{ooTuEE9EBQTV#p#MaRVbH3qbZmdKfvhVp0{iz>T z+8*RD^IIQOeg!#r3X^ql)25}JNp5%8*g9A~oZbc7_0O& zU-E;F5?H&E!jSLe7qty)3=_8vj-(Hxehq#UPl(j!O5V7d>6~wW@S0>lya6aDB=Ffo z7!)B$E(kUD(cW~MaU_uX#K_f}ca>z_9b?nKB_8R>M@s9HA*Be*NWB0JpFV^0nCv_4k_}q0GHhMRwud894vV4p#ce}ahQFIM?-W+QI=XGbbBj(fj z`<Pr6Y~~{8#Rjeh|}qj4L`l&nHC6ogeV-?MOYq zs>ZI%wwG#c>N?A+>AB{PujmTK7s;&rZ2Y$3v{9o9j(1PJGO!)}?7rO?tcSqqCyEgY z@>6j}(K9)Yla}V$iz1KYsw~AzMonIYE||7z9A)fluozRP=5%8heiQr%Mk_rWT+`o%NO%&*J+Z&g_)L{8`dE zig}b;3ghJ-mY$}=2JR^7duxq5(zwLq)2)g+WRYWhWZqpuq`bGDN*2y}W>gs!`_S(> zXM{WzT{nX>s{mB<1|^4_f%)Whs|B?q<2bI%B`%R!Qb*sz>4jXg{H|bT{jT?Kmb-}E zuS5)bm^X0}xO~g2Zc2#H33pucEPTiZqb-U}W1y7zY~e?RQ7aS*1t{;UR;;z7em6Yw zWO~!a*^|`L$G<;3eer%m^3Pvi*KBDyv~H5$WSAUlfrpf$r&|W?_t_GYWRq&fI1?s* zj?5~xx$|XFlEQC3jq^J#Kz9{ z{3eK`nq0NJJN!s+T6>7mFk1U4tE7iIzTet3xn6{?0;%IeD8}qV34KS#L5=jzg*tiI zD`Oog-=tQ=DH2@e>$JVuZ?$M@ym+$h1WoWcXttU_$+ncA!D(rmR>MlI29NI4)CYfE zyfd;^~or@22n6mxkNEREf(m$q-){V}t_SgM_#zM?$M{LpwYT;KC z5>b=smS0!*QiBZKyO=x3Pv8H#Fos^QsyP5)IAhUCV4s3CLjWJ6m=~G7l32eGZ&PY= z83vSFC=_VZGR6tp_RXleS^ZHQ3#%G{ zuae9Y|6+G!Dp145J`)(}xnF)C@S^I8Z}#d`p0^jXRiOv&JsNfuRp)3{^#W#!VQ~>G8jq-7Xg4>)|NmduRT)) zM@Qkb0Q4srz#Luxyb|pEeedb(7@Rz{rVoai<}FasFu&Ci!RfcK#Sj&H{;0&TVw!zZ z6LC&sms&LX_`rYT4}VHxy6bO6ajwF~1VEo+kQqnhD;b9@xgIj}DS0nv=P{#!v>6QN ze3L4MIWGd`60a$TWj^grAm|!Id%Y(%E!qAYr{<-K9|M0Si(_S{*@Ux*FzC)baRgcg z;7W6sK|hbP#R#UhAszsN?@)S%x)wGtfctsNZQ(`|mpdhwPlwX7?3{FrX;$qfR*fJ4 zAGi(dmtSb%IQN)i*Y9vaHWhz@L1n(j+AES@3<Y@3XjJk zSJXeMJPrh(@AXXMX~Kjr!;xHAAQ)1;G6AGfF9ROLSL3n!e>*8wV+5^W0D!yC1;z{4 z7fqkg&nKgY^f57QbT=mh&Rv&CQmgc;C3M`De&qYSurh$0(k5-Yfu~S*j#Wu3d=_z{ zCxCNvtZ!ahG(1r(oyUcA{2JONrhTmB#K$=BDVX=WO_5AY8>M)HN0Tc5y=?x}Ikq!A zTNXBM-4hdXW%0)*IVa<_^k1zF_Ykj5lrI7E{m(0%wp_yw*SNlN<)y$@+73_g8J zT+Pl=yHV@bcujP--2;3=SfZ;R)-(UY9Bx+p7(2#rECzU;$JYk;!@N|KB?MK|3ak_w zjXJz#{7Lt=ZkmYKyirYkh%523i^&5Pzh~c>^$gBs{RhAHsTFPuKA^w>SoOzJR198( zWyA0|X0*3jTeKRm|L9h-I|(s_>-E2tEJ^B&}WFbXX1Ya z0a>1D37;j1`rYmiV8W_FnPD}Fmy!jezji3}v{i-s)?ML?%7Z7$%v4@O8k*L1h;}J+ z;ckyLI-tG1JKMlKRT1V;dTfZv%eH5u@hrv3;#qac;t!rP$H}!`tg-znRnPoIpp`XY z;|LBdP!eAxf+%n?*{jFj3YF2qHO=V=p?_Mu3GNhuG5M@b`H9l5yDmb0rq~aYX{OK% z*FOijx6<@m{0ZC$$IaI>Tkgu6373=M3!9aI*D|&4r?a8^qNK$s+AAIItyJh1THMUz z@;;=@dV_Mvb(_z667#N0;q-@UN2Lzm5fDQGwe zm#2G3j+?hu;vNs;6kr&ImP5PXor#`xzI&Cm&7atelVT?-IVc}(UkJa(e5;X!FR8;o zV!8PYq2Fkl8Gs%+onvAY6+GTsF1cCR1224(#e8}ZKc~~22=&!QH|O`W93vtCMQ4A!@5$g}?2iG{bYYA{)Xel5M=Mbb z3u=5hMW-Yw>7FcFE!-sINhe8Nc^VMZ%yvvE1GPeJyJ&d0^gFM%*y>kPyo1sTt2D_~ z6TWXzMyK|r-K)gUOKg}yE}N?N1gh?nab?^c{i6_+4sF+F*74p?6`8?efsLxhpWc(( zJU?n%@wUXht(@kIc-m#Yww{c}%vK7D_hpO!<}EgnMxJ<;lQHC2*~N!|D>#EeWmc@q z)WWvOpqLDg?$wB+s9} zapj@N?HgU}1)V8<4X_OY;{RgrJ)@f1yS-5q5tS;^t4fnD9cfXKCL$muKqx9wV~F&C zKoF#N*non7^bR5=H0f1Dr1ut(UJ|4P4B2<>^Wlz%u*duCbH=&vhjZ=+7-MB5Su6iO z=lqq60?LrQ0m~gi6a8y4=YytQ18LB2l5qh2t~%m&mTn9W{= zveblo&*>d|uD=+z=q@r(WnlP46Ra$bTkPayt7X+`7ZP!Q4QJzRto4}3!S)p*h13#< z`tHFgp#ljHaKU}z^%9{FQgYj3JQdcx3cW++uwq`@P?w@UwzHS-SO#MpT}IFHU*u2b zHN4E%rQ7DfUM83)C;&aQ1VXx{Bs72C9K0Xj#I65-j$Z*R`uQ;66H!cD41hSNHV#6a zM@T4qIN3hwo#^ziIut5y_)By#PKruAn1@@2{>^AZ-57c-!rLVe$imU?a6;wpVl4e3 zChkpD<#FpPMoh9lda34Vk8I@9TC$YyYESi09cs&Fo2B*QQ<~;4o9CA{6;(Br1`kWG z5KhOF#hBc3{*VT-ES$gH1F?c}$gC7{T0*T9jQK7UPec%XfJPr#-hY0SFz{DIN%}t- zhwwKF4@+N*b4>1$`_p(~<|fn$_W-g8XtM|bKo=hdzD^){I*H?IbGHyp>0+$&>L}F7 z>&mImJ@0v$ySqmBHuV}Ce@*k2Q6(3Zy)PSKP~Oa0?4UG5G{@yjuZ^e7Hn$S_SGkgh z0;Y3g9>{NO@Z-&rBeH+Ae&K3_WoN-7X^d_A^uD&g)4~IaiF1x|# zzur0jfGYZXxiV4YsriyTMf+KJgQfFNMy0H5*5AOL3hhgFAYKBRqDb5^d2q@G%ap zB(tL_sOt%bIS;%yOk%#X`-kn&s~vL&`ernq1{2>(I5*5@Ft{UKw2|}KTxM1qY>Hq;CVW6u z`fp}8%M-!4y02Q#D#AyUX>no(6uhv$?9*TE}S^8zOj* zJWApmduPt?JKkc$uJs};!frxrTIP55!rzt;=lQKO>fDIaaC{GOU04$R_RZs(aInYs ziM@4!kQcYxV3h6$SYf9J8QiMOhPt;&NI#yh5j&+XEWOG=v=iAY-LvxofC`WPZzc}^ zZ{Le1rOB4&JkGWqi`Q!!g*jTMfx?ve15JfCLevJ_HIA&@F8qv^>;Gv1oTsjYHzW6` zn}DoT2M}p-lqnNS7CiY(Q30g!0#)Zh$K;lOlFXxj0Y{2~GoLJ~<7#gTR^}UXY!F*$ z3gKiMsY#ls51B(-<1*dZ>?;_fSc~64S*={R^!Eq(@Ku zE~~X18K0-7Q4ACI-vmH2dI%cAn=v4bAP1mM7OTE_%iwJ1w;-)Dhhw9%(URsC8A1g! zYPXY~6yl4nbI`l56fBJugHNjz8G$**(=quC>yKo}0 zVmel(r6j9U5z*`9;VIunc}u>cKBiEqrsy5Ol2=Ri3J-Dy?eT$Dv_<37_Jl2GT=$>r!x$R?7`bZQoXfyoaLO5gyf#sT5|1O?N`#hvpd2k|+mNU5u@%Q{xp zWLBO8_YL3VR+!hGNO1bDdo^q(uXjn*s#h8mq)ZjuWlEjO5xMHW+@%|*DxWjJ8(UJn z5Rno*=Xj1}$ySbGfcSA8I?IV%3V4Fuo#u#J^h_r@@1WsruW9Jj=U?xHD6^ul?4_|? zS$##2oQ(>y zwvdy5xN3w~1th)*0QAhl1-W`Ln9Y@pI{>5JI!Ct7N%2E$yI9Qhb*kv7J&T)GC0Q~r z|CP^v7j^EEa1_DMj2jR&5W4)oJ_>?|Ar0CKO_$arHfDvf7gI9VVi-)|ZfrGMA0sNr zbO$x=M*un?OR<`~PwQ_JclDVO?l9%8hqL7hdWy|Xzp8k}SJ z`c+ula?JdEnmTv+ML=QCz=9MIgLDJ5PpHK}xGkcjcV%&@!arLi34*v-fIo<0tZtOS z9tJBaNw11PIg1MK*$w&K<-Jgx^GSof6h!Yr|jTG-Oobv zqkg~GBi_RuSQ|yehX}Xa%(U*uMr>yWSgF_CLUaHGeK8|fI&xGdB?|8{+Xw#`alqQfKSF?nH?K6YzEY|#GA->ap* zeYZE*(;ys?Ek}>3paWk6-GO|%FEdV7uY823zP!OE7%~hSax8Ft_n^j2Z?{|G6*+(W za2)h6U6a$h)$kc$=8&bOiG3oNH8IDNEGH*hTdAXc_tIjR^o5Fg@pA?wn*4rbLcqE+ z@s)Ua0`eBbUtZ_YG57YkGdv#=uZc@v5SroFm^#To!b>2UaNGLrqt8MK(MqVR$!k(4 z>N+EvuzhX5R+_47z zGW$uH6j-$UFWovV1a}XKV{Erx++7wWjY1Sb7Gv>8@}uOu@Jfi(ShhxGV$JZ)2+Mju z!>7V+eLS>xAFbR>jc1sYAfBsLz3XYTKY(-~WZ}1+`{7l#0ylB76i=xm3Y&JTKKH5N zy$-KFV3&$)S}OFG{gb40vWyU$tbJo94KRibnf0=5Uy_9?>d#$Io zCuH@mAX`43<{gZT6CJF~)qi}$9Vfp`r-Ub&Hh%du*s-0;d-5~qgNHWkWl~H-oT4*F zqp_jFc<`0LcUggg-YN#bj@H$3OzC?A%X<)yPLcE0=PmPdgWbKCH!;(YC>|dEKJC)r zOh#aK8c6B+^ZS8!`+I$?0fyoc0Mz`GM68{&TJdn6EInw`_u6VKLZ`z>nR{q@=CPX) zrB9;CQcdg%ZT`Yd6VnF|dL|2*_*qKk{#7Ef&h)g)L_wp?cxFk);MiL{vJO)c9i=Fn zj~nU&6X+^Y1N(9>#gLz2q9wNV30wUMjSIY-zT=-`FQMebs&=oWyJuzqr7sI30R^s` zxH+>=!-@(ST}5kHI}p7XAfuk=@p0PT@(Y%&ZK*r4`awC=EwVjq)|eCGC@S+aWux#` z(SL@f_!U*xp2mSIDUp3EUGzo2%PTK(A#t%aIWZD?HU80VMqsH`3iR729`RtUSi#(% zlUCCYQ=0-zkx_e1ljM*ZY=6)w72Fh4Rkd8=UY9wo#Fm8R5mf;JL&j@aD6Jo5D6Mn!}bNlS;;Igf}^kZ!P_)2uh{ zNT^AhFAwzF%@WR-1G#C5KE9}KdSp8LTQ#NGbR__Pd67!R5{I;3nBn8lfehh6c8Br? z1G5j}rYfDXZ;Wkbswceo#S>^y0sr3ln={OQl7Pe@za^D4G|eMpm(oexmPePc4y(t* z7S}O3)mi6Py_Vb=570-ZGnDJBvvTNEtE5{z4>*S7bd&d*{)LiQa;5(iW083vov0R2 z(=>S#M2!lp6lkz4Ghg-MEek2$E_1u}GP5RZSnabS9Q5IeI#cpZPAi@;=8r=DCa-mf zogz$4N)wTvef2@+qyl(%n0fSS`(309 z&da^@YuG^l%+I|OBoh*MVfXj+Y*XG5ds2J!5&3HRfw;Zpu|dM<7%x$6KK)4@mz=lv zh?Eaa*JN&i3;K5-cRLajuEG?!w+0AP*8A9CZEBDetu~q#CM=Wmh^(t}Pa@d2zq+AV zIie#8vUUf_x$)1gAV6v;EW@6_dB!BeI{TZbXmkVly9-| z_AMt26ZE0bJ_LRrTguE6U}lx^J{ou3yX2D0Q5en zfh8j63D`uhPV~S-`OZky6x;Zm@egmkybTLdOj(E&Ohp^ZyBzycsN8Z!Uc@>{i07)f@TYpX zE6>japxDmf^^*ZS(g*~7pdMt4SKPj)I}oxF;Kx4}8&87-h_BOfTook`B4vP_CC;T3 zmjn!mXaq#3VHjEI=1~!Z*evB77pbVwVUKAwKFa5DxOu894K5C z(od+9ZBI@BXAE%a86l+t2Xbzrcj*ybgUwZ0-*f{+vuT_yAT*Zy9uN{o9*^|mrE%}) zIrv){59E`=ibYl+MPuR(?`~ME8|mYUNO5CDL`MbFX{)9MM{h|$wQ%SWpv2R3;s7GL z-pJ3(j{>y+R@y+v98&$ifB#7`T1><4t&2nE+X=v}(S6GHYFT+&RWDYaTioCFePbAU zz_3=;=M9MC#==0GLV)nSH+^bn*c=9>%mT#0Yq`j|IYJfJ=}Wg^{bBWg^s|2+=e6$y z|3Yls9k#;Sq>YY_vPQT(Fmc!IgzxD#~=mI&B5-)& zDg=4@r&_RYzz%>R@2NWlF<+xoe&aquZ{F^oU@v61Z7{^rH^@xcX_@!uqurH7EG z$K!C*Df0t}79?T``Cn*_QujHuN83JN2;cxi_bHn8W|=g{9ikw#X=T8#TXrk-7^;^R< z!WgmkIg+(e`C^Y*p-+Liqx)`ue_QE1GTPGtA{>OY-u{}LrpYSvrbRl(z-CO zkTbpTvkJ}xa2_lf8oA1X-HKp$CwmJjXSHmfLS;xnW?WytSe#`S@;m*nj02M%{!MWB zcHpR7(X(@3DE-l3yuHGCIXH#)^B>-Zo^A&|H8zIRIA{7{ z>7}RE#)qXQvbT5~yp?dV3-B;jrT!2_E;s4XRQPL=uxUj;>C~(%T3z*t5!-AK(pO6_ zXmz5z8E^_{n#)jMwoeT>5BS0ql5*8UUItZIGV`SsQS>VE=JWhcqkBIq)0+$h>Yw}P zM0%mxK-3O@@t@unxM^K|Sr;7&hi{R%K0VmxzBDJG;8KZsr6#ZM^|05__Hah5!-2OL zKDx18fqXwnv|XGv7RXwCiKy=|we`n?T+kvWqSisA?DkZ}d?wp`v7>Ssq2#k3?uL5n zZ9LS_=o;KY?xfu)ILU$(`@!^k7LqRoPz4;)b7RSg0!e>e*16uvee^BO@%zNg?r;-F z1BEA$&+f`yJAUpEzcyK&UWByik!Vl$hfMRtL73ow!0)chde?HhU)1(Yu}88tFfC}` zpISh+vX!vX&?7?nPZF&1?bDFKt_#pB4>8&CB4w#k1KsQS-$SfLTT%oyW@drVwGBUW za`6~)JVzj(eVylzf0l*#)#jdd>xU`wvpEa5c>mQXW9uljDC2CELvtQ=HO|6U8q0|$XiPUm1vsfAIEbA>@?gK$#Rv4?GMY!UYfOHj5B!__aJtOr~4aw+zZ~umtpBd z817`v`fC*RW^2%B>|FbdZ1b3rsVUCG0!v-wLyr<)tK%)yc~y;t(LHXNp}(1=`g`i# zrz_0M^;a-Ekz5pxRsA7e9?{Wl%*xjRY)>o5V2-s^I9%D>-(TlA&GQx z=NuK65Lgk?oNMF76U{v2hUM zi3U&2jYZ)Ut5*yDpY#(!YNK(Q7Bh3x_u&|IVocpxy9K~#k%FsZi*BX!2|`5&vlA+Y zMl}$=)s4bj7e!NHuTf5@xVs+y=gxh&5vfIHs~;mJl^&YLFs6JR3ZinYFA$aXIscua z_dxX`v-jxJa;E;{W|HSM^Af+l3$;P!Eh9GZPOmw`7c^e(I5xZ_+(KceJzgX74pq|us4aq-jFDWU1xU33CAR+}VzHEi%GRt21`Io2p=zKPkMF_|}cF54?A@kYFE z;4U`+=DG7^yZKhs{kZeJwFb1%EL_6E>vT4}0u~hTa@%Nj(QIHxYBl%eR^-pXSmVVH z=i71+B26uG%nqy;_0oAQU&QWzPSPBLiQ>gQ3%OOwW+4_lyJqiU)?BiQfpnT7wzizk zn->@pc1oJ^fM{{&sK5(yyx!DzGKc(v;Odn1l^WU>E5*~Gbtt8-dET5e^JmWa14iz3 zDJO-@{ViC!#U$25oxH#HXTLx6T~QbWKoEDg>J^t1v zYFt1oh^j$y0m@5jpCWjjQbqP#8#h}tKa1jMiF)FR>xt`;{o%Ii zoOB)Z7})~UjzFgkD@utam6UV#b37JO(6?2L%0U&#o;MGB zGZCE>li$S-zKl(p-$s?<7Tc2vNtk6C1}$_G&E%SwV+QXgEh<=S!M=6IcR!#oTK*1c zGwa=ftEd?0pfLVM@vOI5KnLr7L2_H$EL&KYW}Q84sF)+K%j@fRJ%lbTRO_}=b2Rhw zec+s)ncE;(M(d^}{UlTaT&w0i;&bA6C1QRtWL3v_}3p;`aqv~fEWnNetS^2$QKe7T!$mbM27kW2D zXxh@~Du3*2vjTkfIwU(=zL`TJN^gb&>KF{D%lGWpXEx z{1ZTniAp0IQRcx5jN#cbd+03ZRM@6GE2K1bRRtgBoBO_?)OTFy{{GrPBz)br7rUrl zF@UU;);W(GdOW<`6t4aG$982EWaH>(WcIytbj)U+_T1tUk^VAspXNE6T6`r2z1=dY zpqgRZB=K5M7pUjuAoL(wMuu1)|!qQ)H3J}K6E)FAoXO`Gpf z2h*8e1i6Q_7ij=rot~Z4qHlT;=6L~|%ki~`-I0f+rmGlFj!~|fw(hB6egJ6>KrMU~wxPsAQ^Zgk zX{Cp&&P}w6p0a+$B|BLdvCsxh_8j~`W}D;kgu!_WOL;s0g8d77cRHMee(NA430G&t z+T#%5j)4xJoK*MSx!>|K=?@1RI#nC%9{jNtS}iG-_`=nrDHmk(?A1lEBBsu>liHkdUpH;KU2edGVXPEgy z1Fx<{HK4+FN39cC23|y|-k~m*xTO4+b^f%VL)9cyD8srbFynV%(xW z)Sc#_(co6#u6V$QLq(_l&q#;A5-J(8z`vHgbbR>31*_c5+Vm}*kn}yi)pVS4Jdkd& z15%-(036a0_!qDSI${hDj7qKn&i(%?6Jl6)`a{q}oOM0|4I+o+rZ2$w&@@$ZS9$8% z+S^lV!>KZ7>SXTTSt3DvKi`;DzP1OJJShNxpl@fc0a%7XjueOF=qP}V0pdwx7-U>{DSegR%EY-ervybeXZtlau({>C z4mbNA^7MlbK600L5PDDC#?hyn(|+1W-hl`{iXv(>=SI?DMJM)I{@+}ImG8q5{y%en zNeAnQ>WB&#qNle>tdH<3b6az%xr4ZJoO#})xA^OM&$7_9@-y~;d z1wutlqc1z-y;~1+{iQcv?MC+{q z8ZDda;z| z;TmwHP`-)$k&=m=Kh`0r0`@ikWE!M)Smlpahk%HCdK`nUHnowqBZ~h#QW=x|NdR!fg!#CK%`s21YpJn8v=$+ zfcSNpB!)3-@!h7|Gus7oK5O~q?C&o|EhIj(B~5>%aEYP5>nIs9?^>GjTOZATa=DJ5 zK$8u?cT6=Sv;M&yQ#+pLb#fi?Spey=GM$rmU@Hqttd1_Wy@|%Hd!LKKUgn?=_Pgi# zC@1({jWg|3K0J5998A=KW%*kfLwaWYL@yJ!=wo#G5V7+@3Gw0+HzwMk>VgFW)Z_Z7BC8@He-kNAKV%js~3PUOI}EG?d}SWx&5s3obSP4sD>4 zF|KD!5Vd5M3BHXH>5QZ z8n*NeYqZQw5)m(-4nEiajGecCG{}-llgKdq($)R?E7cNwQ`yEcjh1KH+-atPVIv)G z@;92l?L@3&GAe~3p=0Gk#HR`=i6ec*`v?<1K9>8JY18sI#!5_1lM4lUoM&!_*Z$=w z8Qdkt=&g%U_9yUTglFlY5W7*niV>KoO>IL%oNCmir@J|-z4d}rGgEiYC$tEqrK=*6 zA{vG81{kuHpp*_)@Y|A-vfRPFsdo)W5tFI=y_t`NLwHo!`R=;hR=}u%gOsNX;k*BU zR``buJvbVgb{jX5i?{fJziQ<)5BVZ%oCfXkGqs?Y(!L335NQzLNevZUtoRyR-*-lx zW&XaRGl)5KRPBNS6$dxwAT_7W^I3uT(LT8>U7K*MpVLxML}9f=he_~PgX9R$Ek_hy zmOfo%XK*emWbZ4{)6%Ff-IfAH;Ek{q7LtGn zbOSko$+Dx5R23IqipcS1d2KuYCkg+<&$UCsa4W4y8*t=<2Z|Ac>TKF{jo-v=tl0~) zni8AF_UrFgZLMVNDcPP95^`#~=~niRG;NIJ?g3vonzstTiO&dRTQb`AKvB z%gOE?sv0^H!LMpwW7hvFVI(#ADZZ8%EKql4mppz_RJ`>#Q*3mk^4Py(`?#nj> z_r6~W1oMceLpKqlw4*VeNt`eJ?`~?5h2EQq_w#*&iK+!u+GGPOqpv!ChHoj{a{OiG zc97!oh17T5yl9zUQD&sOrFqR%PP%OW#EyWbkC#v;c5EWHk<4EQ-_2}@U$hNxl*GwE z+0p?|pIl9Cd|BOGsZxcFL*t*im7f`g4e^F!TYJ$p7{`x|5P98F;B3h>}pvkn`)iqrQY0*qCdE-VGr+cj?1Wd6u&H1ll&3o z^rTu~+g{I7ZXEB5`$8SfyIlq-da%bjqzUO$qV4_Gn6T2e8Ux**c2?x2##M-0wCOX~takiHwSyuMGX}bZYckIYG^v zN}Bq7&|dHpI6-Hd9|x3sd3xJH`@q4a;>urh?eq)wZd^d`wk@W2h=3Pz%7SkUS`P@P zx65bQZxw7Rqx1fW!s1|o>@!=9?OfX&X{uo5J27A|I0-J4h2b;y|2zs zc;B48p0;5`7^oZD?@fJf(hz+svzy^&Fk6a85~Y)RJ-347o536m{4H|fn*18!$8Ye# zXq5{9LMfP7I?7N_I*i(c{hqc}B6F28$j^bg8XegaG+-#CEHbTW`HajX_?a29)$-_S zNz=xmE^uU=DA;FG(eJY0Y{Yu_SM6L`s~fUAH0?}rddB#%+%wW)u(O-@a;*o$OpGjb zs;ZMET_g2IqZr0AxPg2D#A<>=stY-qjtOU`D*a> z<4AgBGhPM{WVp%}o0eW6bhJk+ku)Z2zBh*VPVOI1Jc28y=drOlXGC>q0A52^QowBA zozf)VsGqKMlqQ~bhW?Pcf2oK=#CcW%H|$zP4a!Jy3QgXcPKQ|D&>zxi=dZ?8H^lH2WcTJB?VjV5r7-yx zCUO{PJ`wfUxwrDeSoVM_(_qW8^CYoGaVasWP%37kS7n|}auH68=+do)RFvAgC(BR0 zb5D7Vc=T{HABbzR!^N?VM#FK9#2KN@Hgj+B&(;h>XkyEe`V-@QbV4O3B%Dk0V}vS z^QrnRpEk%JnVZnfzK-Vp-q-Xl*Y053>?k%k`p%;7E2jXl)1O-vFkSVis9gal;Z{Y^ z*;_-3PV;k&Dhpd4kB1y9jS?5NnSN+nE2wSeib+UtSkPNP9p}0&*o+-OP_)!pw)K;( zrjZZ4NY)ae?i6AMX#cSz^i<#OlJXZclP1q*7H*IJrG=QnH-jwOQ28hP!@T@s_R`vU z_|^^=&Z;wswZK?WlI*zS+0v4h)2s52>ApLEWJ3ktRIcpTJyDYPCcTb8hmGPrARh4Hg$JW{Y362inBi@`_a7-Js0M(61 zvxq{va-OATMSqQ(9C$f8^AtSo60qFOM*3cd{l&qa?#Ph&-i6H}a~gRJkoJAuCclpg zQPf)$GI#WmR3kJG84YPLQZVG=rr+O9)RDRWEIPJajqQ>w>z?VYLf97ow4JFb5~XvR zg!sBLTxW0#29RVKYm4tIDYJNvKS{#%7ycv( zs#E?#R{rB=rKSAJV!4F04g><^9)w;Rh7d0{!=4*3~D8xzxPa)Pbw)z!)kO_SR=f?!)*Ib)z%F#Lf zc?c~u&*Y2b*=Xf(v{0z)NNU-${i7mDjc_^}mdy@1K}y zY3qT3vY3>)XutZWh@7gx2KOIjW;bsca>X#TpH^BcyL-lX`9bRb^M{k%e`Pf<0#tdD z|EYi8E5D^z>t=IkI#~ARnCI5S#efWEM$qi!q^iwt3lAIPi3S4HFhGA&;OMD&Hw z{l@~6U4*{`EU;ngcA0miF) z((JrQ=9Sexf^Uxh6`u+vCBj$9J2X7jwK)PlMI@g5FyZwJR_*E|rCY zR`Z}-xW7DMJB11|Qv=VA4hD5|Oj8*5kNwL$xcH*4MNokkP`2yLFBR!-^ec}{ozkos zcs7m3Q!SKTGehvV{hGo*7=dNRYgM`i3U5w4*S`|;v6450G$KxiJ$Z_F5Hi^Qjfg+R z2Ndxj0d(k24-b7+g)1xX5QlAPJgD+P(?#^f0#`2cAuGez3ew|!uilu!LS7Usk+yVQ z4_j*@8V%~FG2)da`Pl~EnljncwR^zNaY_q1#RPxu8j@?u2m!_3aDLi8_d2vG-H0L!g zM`r8S8usWyu6S3d$IU&&%vR-j>x_A;yqM*}x|Vk=q;i?neTmy&`5dMNy(H=((%0Rd z3CrtkOQgJDpL{H2@k7dz-tN$X3(J`REwD!w{G2wO?&OIw?3NQm$X&m>dRO}E44w*i z&nJ6w6`W4Jr}Oh8$6ES}KR>zujieTddJMgMA6=E7BFAf~`0 zKZk_zAdg~gz6#!w&i8f~o+y;2U-Q)Ob1wazXry?xvYMo<0Gil@Gr`OmjBHA8skE?4 z9S6OO>9SQYCO!tL~&N-3o+#|B!5KMbSDG=qCNk1ssiG!Id?F;w6#M}-vln9kp0>!8JN0{6I>l}!-q?r~+Xt;^Y041d;zjoXdQSHe~_ajsKOtFBEz5amuU)a~SL@M%^Rnz}g=wB4Sl#uBNT5 zF#I6V^J(Hb_wxN9IkWA%?Vk&`p0o03UF{u3>2oR;Yt@G#K-F&VaTjYXXspJ_b;=mW>*8%d-c(QDk+2 zqv*9~K?_$o#-Gw{*T-Bxww!MYN$P02?9GKXkblD(6>jg8djFYp&o}6|IKlkbX!8ZN z?HZN>F<)A5(P38w8Y)W!#e)>B!H7ufm!sjIr+d;RZCTh3Ip$`2zC(+us!*S+!@hr? zl@pndd>(ddSWqqOcHzfYfN?jO{kK|A9}t89ZJdhzdQ`S?Y<~jriGutC<3Jyp_kWVu zg_ki~BAVKr5k~8W-I(;ZCHrhWNoF-efNZFina+)RRFKT&*8)-G7w=T_Z^wEp%s}%- z8@O{3WsA1Kusz5Z=LwkbP)G95RwxQUj6r%Usu|I60V7R1@T+SV?t+dKUT#5h>T5jC^?tBCZf@xc>c||(I!bDW(Ii)LPch zqsJtkq15`G{S9GYKaac@E<|X;C~s$oc>%0Ukk-iwMMCc+pg^lT{3prgUkB(MCc|N3 zbHXQ2qcR%-aVK-MHh%}>+%;(txN&eBYiSiaBO#@o(sg7GQMfpZ<4bQUM|vuD_RiTT#GIoLFLgVW%3 z7PmV`HFi(i1&}d?&vTvYbpZuR$=b&eNPX9^*Q5skIN7;#I z(+0l!ra;M`BqdkR!rLsnPM&Y5;H1&Lzd0-pwd&Mnv~?rRE~WSS2YrG;30Uua@g@jm|CLd7Jel#`9?Jzef2J6 z5@hQGF&f5mmq6Ad-JcKQwF}k`ggkr>dNQh`EEAd1MV6&rT1a@v$XK~pIjxBhuHwZj zemHuI!{%X}N}{`nZAX!g&s%ZE2S?7=hCgqa=iM>SVlFu$zc-*LmOW*s%svQnossWz zzXyfVM#;7Ce7Ln3r>UGBZ+gcZb>fr0i}!j7BwqlxhF^I34?Cy90cIYjul0sYgX8gV z)QFh$+=Yp$mI4PaZ&Xq`^vB*8PpSI8dx5p$pCz?ul4GB}&!Q8%Aj9TJ~f!T?qx`LH~l*SMR)HPwQmj9*58|Z zv52{Hjv3+J2CnwEl)tr|LG!bxvh*i^f`Unq`g3&^1L^cYBo$r-o@=@RWC`I<2c9t= zd+VEI@iuTf-Zbny?;X19Gnars7u0tp!9nrheK3HFs)`$!L*iVwR{O-r9hi<$Z(WtZ z2GQ1A%PBA?=bBDlM8XFv6wg^(M$){$F=o8x-BI{YOA7*u897sWW2D*^Wk;!0TOr5`|4k~wO~NU9*4vw zn+ClF*s_TTFd+yg1c1)D|0F@@6MwrdvXx>!8o(cc@Jwxhn(Y7(q>A|iV6-2=XDw*} z!n0b|k8}cE{}q6B*q4Kxe}TjsIwL6*H5aBV$);4?%Itr1i;0bAC+QWC%sv8q<66kE zrAY)@%L@R)C)G0FiAmU_zNago_RLh(tVU7g_q6#p}{cLi1Dr z`f9Mt8b~VH1|nB&2AePvAc7!Z44?=+x{3?{aC#F9q^%6e@z)zK{e|IE0Wf^tAiOpg z#vjKGVCjHIB?AIetkgc$WgsIYj43;zoCFgts{cvS0lu@ia}D9R*jB*N6e2aj^;_o= ztiXds4zhY#j{GA@{3ewnQ8SDwE%sl;-5+aPlP(K%MOXp=JMDq-_B^OXbFlxR+-4vXg)0P|zO})b=Oen)(6AJM`8(a^XTLRos6nHNJ6oEH zk_ys3%MK5*V6U;HwJ)Lf^35%~UKj0<2sJzJ;`f+ZIj9bPra61o8>ul7NLob&C|97X zn?DTn#FLv*oXp**dQxM`Uv0V5>&5Yy)|o+}Y4+dp)LwrxM2q5ZNVE?1R3AFasmy*L z)LYes=k<0L+m9|r<`=tiioe0yXCB8a-Ou~Rf_^wJRNurs6UAlPueRSW z1^Y=L*q!YaB8@kR2ZkQec>4(S1XBwa00u?k#DIAennl#^X_;pxgDwyXH;D5E6sU8B z>{Z)Tyf-x3mCzhVu#cSSq>M5ge~XiyX+$|fT~%F6^Sy~H?#+c8E#z?eDyl1lb68N& z7XI==H$Rs8J$w0@jNR&?Q;-qu$Ls#im!yF@#HqPa+jI^m*>Y%c5wkTi_IA%RH$}5D zPLroR^!<2ib~&%JrsC4*4)JWcvXBA#?-;Uo`a>*uFwXgRNP64)PBYnV5L;?{wbfj&_2~5iKp!eNza9RuL?h zUIqNh>hgsF;cVl^Hpb@V*D=OaH5USPbw2H7Z(r#GHpo*w_20CL{ig?Oq>4%^?lszy zdTQ;sZW?<0Qgwgpu_}!l^Vh1Om^S_x_3LB$M2}j_6$~uYkt0FHV-}2qe0IPGcqEM5 zJMz{GG9qEw?Rs`xjNMT^z$Nzj;vmu_tdJPp_Nsd;<|jC1D++-}_(c8pgBxYEc+gtt7`Go#8KPl#PRXlCQyJMtt}C z7gH&c5nKE$9d2g^QztI^-j6-YuqGPn$SmV=mfVpG>DDL>6uPgx-j1bH$I{d^C^%0~ zmEr#XGKJ`$7H9lOo!q7)8g?(C<4Gy*Vh`Wo4fDD4irR}Z=U6`lM zh6`JOsF09$71j{QV zXQj`dD+g|vf6s3@5Mns;D`T+a1O;qKmxUxJ22B#m%W&nu7RfZshdG(a$*C884~HuK zx_=?QgM9nvBYeLY26J@5t!aM>|0fAe4ZvXB_5tOr*I59fg6qek88D=k2Xo@=@+6@7 zrn_ft&2x2I=-O%gN^zOLyk+nnGAP+RFQ^I{`D9?JzBcaQ^&JsY^fL6lbq$j5E~~Vp zVhWgDl!V9G&G#m|8BO`a;F#VttSY`a*&5gCocFIUprj-%qfH?qc?RHsSuJn>0=BEW#I zbymLLlJ%-T%`W%`a9E@?10dvOptZD&eDAv$(S%|X1X3TH7!EC1e;8?NE4`;F z-Ryjy{{F<%c3SZ_xDCba7a-Zuk?gEqq*26B)AT=)<<6l0#)IAQ=fQF#WI#-IePse|_WlQw z&eStF@fCM>{CL-6FQW*r(P+_f+2F+y5iWfcN~_@IsI{azMTKB@Pil*%5lO7S!7;ek zS8%}l(X3Q@^DO!6!v=WBC&WAZV77;5+Ab%#Q3Gs7y4_9uDYXraPStf>{scB$ z9*{naX6*p}DRO12dKM!bS*m=V_nRcIIr9HD=#U|=j<}^4GAc4xA4$9ItZgn=Ftze0 zN%k*aFYm^+{39{A*ooj=V$*1oI+5E3*os(yOSf0uTmd_ew%&uBnVC<8A78}j zker*Xosk4I8NWc)hZXN-;WqAl8IpR3-}v3@bDuwGR4E6gvG6Ip@>+c7xdP>z_O~|( zBv{d4C#t;x2UhKwqORwKj^-AOPs%Ue(E6}&Pwu;<CH=!R>@VyvrY2kfiwUh-W60^%4x$f*}w=Q?s$rIZQvk(jrwZpePqarCp>(L_jTd^+z-baZ#ewON6t7o$v#>8?6v2bbFK~O{B-ADS~Jj_H!1=p(g?Jy zE$?;0(J8!n@V*9u1%sAF=s;imqrA)hNw$?;fF9er;6#~i12!u#=e_;_l>61pHA;H% zjjku+uUU%OEwTJ2M*26jT7*~cXx(wf!Ve2~C5|e04OdTlB3l~H44In{G^(w$J{K0j zo;-i_zMU_U{n=$|;Wb+C%p>4rwQFSBH*dKh_>Ia+Bk6Cx=PK($*A>rhX~Ev4Cmq}2 zAk=7KVQ&KG?&-Y&uN3NADyagqZs+gYFQ;Bg5KW&&otVBkT(&JgCVMiGC*ob=`UHjt z#5-rW2_Kkp#<~EbACYe6IG{-=Tb1tCGNLR2@pJz zXX>4#*!per9B?uNH{&cU#=BTwGd}KqSQea}z)}qtueRwyZGoFS;VQ0c$fh+xHRpJib9DUj886u8Kp+$^Yn1Fh9POiMSXU{OJXMMA8yTI~Ia~m) z==!&C#(uaVkhy+#m6{0EufUQZvrIfU8yctpe!5gB9BU&%|+!hbmY3mQD zaj8>~$b+k`eZ`cH(mjwA9Zom*myc#u45)Oq`9RZtTitVEnTcjAvKqgn!@Q&)2~^%w zPeo~JLx~!8!v=cMialWr^&8!M%(^+&;3W;Ls$ znw2hMw{prla2(Cs*LqAlc`#?fm#_9)a8II>fh=kK4;0Co!EDKFC-?%4#OIvb|D@1i z&~ZV-Gl$ zHtA90sDfNpvN;*ijGW)l+x^`AWIN0*SSB1obr+t;%tl?#?A%_V4p`>U-oVz$&+s|n z5hsXLo6{_xuf(`9lwBA}vTD-K*zN1Ke-@zgA)KW(^kx=08=Xs1K+b%ubzwIy8@Fr} zYitLQp)JiolKBkctVu)ej53QOt~cv3m(_Eg_!RaJ$MeOsXc?ImPi_?(A7NqJkN_h@ zHuxRFPE`5TRn8Xgl$;1#XOXtIm_~=%N^O7nf|~`c$CD=IY>&4a6K`Lsg8{zX1~ZLh zk57or@K3#uDaX|({x)QbQ2}_|RKMtpHt=8GYK046Kkoxjuo914tL2~OMDy8X|9p}f zff?m2n-gvJ2P~&X$vodfzsYaq_%Zrum1}4K9Si7^BC|q+8;PR26nU*vY8iE_6i(sB zO^B}`0200dJg32H)gk~@Oq;+7IOcT$#_kSPCYv{BDXf6FF9Nvt(3&7hVy`LU=xNTh zO<)#Tpz!yYkAHs#8kL~QUd(ei|$WnVTTY`l)mpz-5D@EufJNizM3n#&wM@REwh8ICJJly3~-x@ zh3*LhUY%>V0N?T`qDAZh2rEJi17OXx36gp-KwLi5@+$eF~C?xEqcmGAb>tTre)5&HfPR0Lc!_kL_zLajDlFcc zSxjYj&YsntcYxONNS;$ezmA|M-L4yeU(RxP2Br5s2T@9~c6AnN%gonsm^BoEMDwy< z?WDz3D9;>@f`J#CHzoRjz0l#q*dzBbEFc1L*Z>3#CfK*aR9iV};2df6bv`_1P8j1A zJM0GhwN6XSfq z;Zh1})AVp(*ow@!vq-qZ(mZXX>DyR^9+;qE$F)ucX6e`1rSkt4273P`jwK($<&G5n zOs!OAl!Hh2Xi(((>1H%oYt%b?d7Z2L(O-}pM>gJ0rF&e|k$(=PRsh+|p&`85dtYiN>?vilyGIXL@Zu5;BPPwJALlDNhYRdqbK%a*foYOlKV4zVm255RSaBQEl?++}0MiuP7eS+0-+uaAC zJrEQz{Rlz$s5Az&NBN6kb${g)<(k>B-VZ#dwC_KUX^u+){*P2X2Oys&VBwZ93sro3 zV_x_0QL%ly0}vS`)wo)vO#JGsr&$(k(Q!RaRoK}l*V0U~SO_A#{&7W-N~||L^~Ccp z?y??bB-;bfIZwn7kzB<0`#|5WK80E)Krko%ORE8X*1Ta?ZBkwrbpUTOQ~(Kww((++ zA7bv-fbtJcXCTc=#AKI=BpVWZ!w6CxxU`P^I>mI)o%Utaso+rzt@bbss~~sfrOVxk z4z^M?h3;UyNP<927E^iY@`NUiy>*(zNp#J3L|)ff2nthiM+1+*J3Yv_tdhm#Pi;N= zg+U>eV*3FabX-m6mT0?`T$el>yOb?!Ce=n|yo>>dNVs2QN0-`m8Wsjv!vdgz|9s%<=~4M^~2`< zvAWkCmhl*kmJ){GcOj3eXkB!LWAmrPEhhCz9ePi0UX&LFQp2b>bE8T^M5!56+-W_&{W?-K_l zx}R1Jxz{fJk;GFNSe1G{_H4pjM2?3~_)S00W2M=2Dk_j4DU`3SZBPpDNLJ=W7sFbk z{jH&)JuE+BZGStSfQV`kGW~{8W|ry?s9-YJ8${mG;WRdI!ekhl=euN;n~O%wy^M3Z zWqK=Sy~7(lkkAHXGqi9908KoNXx7X$cN&TF!T6||X`-eg6fAmpdgD!Z8|@j}CPUUK z`(-|O9gm74myGyI>3!Xjpjq%PH9%0XRs>QEZEF;FA0dkL61dd+Q~*oJem@dnXPmAD z2!%S|W&FBbw?RK^Y(=OO&MBN~@3HfPD|62o9F}jz?Ak$X0w$zCe3?~<+$vPR`v5Om ztU@k1Po@GUw-`Wes8PlU13iLd4?tf5UJ9oH)^ORx#DCvLcaIuM0dgS1Q^Z3EuucF^ zmygPni@6z5PR*_0aaP0tfUvAb0m8S;f1K>D$oAZb;~eF49OcF60Vp0pvOIKd{%Vf06=0XC#-EHY(DKUCcA{J9FhP_cZjUzj%ZH+ASI zy}VpQmBisU$_d-3FKJXHz`RrXTar%#`D<&cfHvm=2;$f*>{chqbpXn26d8Ve-97tJ z$>LpOq@!~Ad4E}{(nZd2nG``+X60bfs$t>v+={WM7gFg2=ry+D#2(EddH%X~0$sUG zwHER8DhWtB=vDq1rMNsblIMrP2lLuO&dakK|v-_J2okRZPma zzxOrxyX8U#E7SrHi?Bkxc8C1RLev93NLR&9k&N!bb8lGBE^z@&O3KmWQI@b zuHRVs{!$^s5{i4OeS2iev2Jr%z$;djTf_8N##4oqmR#9yNyspgd=Amskl^eTZQ+EW2^3 zHjvKowf)@+Bc~(LdHSTQEO?9p_20hqEpdnSI{_!-MmP8YENi8%C!{T=xx2h^-yN~u_<-R6VX1!SA*TkGdf|qyyB5oW??R!FHa|87v%j1m-U9d(yqF; zv5VylgYvu67jZOmW|+)p;$!2J6PhwQd|e^gwGMtT zQA3TmYmyS*#Km`0P)o!@$#T3g9g~64J9&VIUKDM}9{9bospg;`nYYbe-2&=(Zv&RHWqV0fy&4EZJYKC+k-O9>$dmQ>y~^!?u?IIa}m0S=5kA^ z?nugtOt?@lDeID3=%93Itv{4oeQl)zmKTg#Ug;jk5PSa2cd)d87Znv~olE+RM%L-A zt%Iq|ocI}r;M6GRR1SX%%kmZJk)2A&oC?f+f6S&FDorp_Iqf+Nn-omM(LCO>N}HXg zA#$pZqMlBg-~QxM;p6McX&4}ZC zfpK1q=4)S5ije{lF&FLk*+0S}`q+aX+muzWbh3kLf=0V+Q7b<2)lN~{^ z3t?lsFLoLx_%YX;)DWby)?)WGsVwmcv=#XGp`5+p8?RhTFk=wgr#-&V` z^+Ib~r@h1n+_8wl>UzxE%x-J-sTp;)yYWA3QTx@e!yc6nIO=;h2A8AR7tPEpoRYZW z9XDz#_mq=rEffB%bhC(PWu-dD5|{FOZ}`*pkUwiL`ujR!zyFip^YV8L{EmU&G4TH* J2B;6l{s)tm#s2^R literal 0 HcmV?d00001 From f446c2ed2de1aa173250d3910ee54f2ebaef623d Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Sat, 3 Aug 2024 19:31:00 +0530 Subject: [PATCH 10/14] Create index.html --- .../Catch_and_avoid_game/index.html | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 SinglePlayer - Games/Catch_and_avoid_game/index.html diff --git a/SinglePlayer - Games/Catch_and_avoid_game/index.html b/SinglePlayer - Games/Catch_and_avoid_game/index.html new file mode 100644 index 00000000..3fbf8027 --- /dev/null +++ b/SinglePlayer - Games/Catch_and_avoid_game/index.html @@ -0,0 +1,27 @@ + + + + + + 2D Multi-Level Game + + + +
+
+

Welcome to the Game

+ + + + +
+
+ + + + From 3ca895eaa83c3786bf7d5805ab77d400a29ec363 Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Sat, 3 Aug 2024 19:31:27 +0530 Subject: [PATCH 11/14] Create styles.css --- .../Catch_and_avoid_game/styles.css | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 SinglePlayer - Games/Catch_and_avoid_game/styles.css diff --git a/SinglePlayer - Games/Catch_and_avoid_game/styles.css b/SinglePlayer - Games/Catch_and_avoid_game/styles.css new file mode 100644 index 00000000..5eecdab4 --- /dev/null +++ b/SinglePlayer - Games/Catch_and_avoid_game/styles.css @@ -0,0 +1,107 @@ +/* styles.css */ +body { + margin: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background: linear-gradient(135deg, #1f1c2c, #928dab); + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + overflow: hidden; +} + +#login-container { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + background: rgba(0, 0, 0, 0.8); + padding: 40px; + border-radius: 10px; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); + animation: fadeIn 1s ease-in-out; +} + +#login-form { + display: flex; + flex-direction: column; + gap: 10px; + text-align: center; +} + +#login-form h2 { + color: #61dafb; + margin-bottom: 20px; +} + +#login-form input { + padding: 10px; + border: none; + border-radius: 5px; + font-size: 16px; +} + +#login-form button { + padding: 10px; + border: none; + border-radius: 5px; + background-color: #61dafb; + color: #20232a; + font-size: 16px; + cursor: pointer; + transition: background-color 0.3s ease; +} + +#login-form button:hover { + background-color: #21a1f1; +} + +#game-container { + position: relative; + border: 5px solid #61dafb; + background-color: #20232a; + width: 800px; + height: 600px; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); + animation: glow 2s infinite; +} + +#gameCanvas { + display: block; + width: 100%; + height: 100%; +} + +#score-board, #level-board, #missed-board { + position: absolute; + top: 10px; + color: #61dafb; + font-size: 24px; + background: rgba(0, 0, 0, 0.5); + padding: 10px; + border-radius: 8px; +} + +#score-board { + left: 10px; +} + +#level-board { + right: 10px; +} + +#missed-board { + right: 10px; + top: 50px; +} + +@keyframes glow { + 0% { box-shadow: 0 0 5px #61dafb; } + 50% { box-shadow: 0 0 20px #61dafb; } + 100% { box-shadow: 0 0 5px #61dafb; } +} + +@keyframes fadeIn { + 0% { opacity: 0; } + 100% { opacity: 1; } +} From 6f53d2203524abb32d651db574e8ce1e620ff387 Mon Sep 17 00:00:00 2001 From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com> Date: Sat, 3 Aug 2024 19:31:49 +0530 Subject: [PATCH 12/14] Create script.js --- .../Catch_and_avoid_game/script.js | 153 ++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 SinglePlayer - Games/Catch_and_avoid_game/script.js diff --git a/SinglePlayer - Games/Catch_and_avoid_game/script.js b/SinglePlayer - Games/Catch_and_avoid_game/script.js new file mode 100644 index 00000000..3713ef42 --- /dev/null +++ b/SinglePlayer - Games/Catch_and_avoid_game/script.js @@ -0,0 +1,153 @@ +// script.js +const canvas = document.getElementById('gameCanvas'); +const ctx = canvas.getContext('2d'); +canvas.width = 800; +canvas.height = 600; + +let player = { x: 375, y: 550, width: 50, height: 50, speed: 5, color: '#61dafb' }; +let items = []; +let obstacles = []; +let score = 0; +let level = 1; +let missed = 0; +let gameOver = false; +let gameStarted = false; + +document.getElementById('login-form').addEventListener('submit', function(e) { + e.preventDefault(); + document.getElementById('login-container').style.display = 'none'; + document.getElementById('game-container').style.display = 'block'; + gameStarted = true; + update(); +}); + +function drawPlayer() { + ctx.fillStyle = player.color; + ctx.fillRect(player.x, player.y, player.width, player.height); +} + +function createItem() { + const x = Math.random() * (canvas.width - 20); + items.push({ x, y: 0, width: 20, height: 20, color: '#4caf50' }); +} + +function createObstacle() { + const x = Math.random() * (canvas.width - 20); + obstacles.push({ x, y: 0, width: 20, height: 20, color: '#f44336' }); +} + +function createSpeedItem() { + const x = Math.random() * (canvas.width - 20); + items.push({ x, y: 0, width: 20, height: 20, color: '#ffeb3b', type: 'speed' }); +} + +function drawItems() { + items.forEach(item => { + ctx.fillStyle = item.color; + ctx.fillRect(item.x, item.y, item.width, item.height); + item.y += 3; + }); +} + +function drawObstacles() { + obstacles.forEach(obstacle => { + ctx.fillStyle = obstacle.color; + ctx.fillRect(obstacle.x, obstacle.y, obstacle.width, obstacle.height); + obstacle.y += 5; + }); +} + +function update() { + if (!gameStarted || gameOver) return; + ctx.clearRect(0, 0, canvas.width, canvas.height); + drawPlayer(); + drawItems(); + drawObstacles(); + checkCollisions(); + requestAnimationFrame(update); +} + +function checkCollisions() { + items = items.filter(item => { + if (item.y > canvas.height) { + missed++; + document.getElementById('missed').textContent = missed; + if (missed > 3) { + gameOver = true; + alert(`Game Over! You missed more than 3 blocks. Your score: ${score}`); + } + return false; + } + if (isColliding(player, item)) { + if (item.type === 'speed') { + player.speed += 2; + setTimeout(() => player.speed -= 2, 5000); + } else { + score++; + document.getElementById('score').textContent = score; + player.color = '#' + Math.floor(Math.random() * 16777215).toString(16); + } + return false; + } + return true; + }); + + obstacles = obstacles.filter(obstacle => { + if (obstacle.y > canvas.height) return false; + if (isColliding(player, obstacle)) { + gameOver = true; + alert(`Game Over! Your score: ${score}`); + return false; + } + return true; + }); + + if (score >= 10 && level === 1) { + nextLevel(); + } else if (score >= 20 && level === 2) { + nextLevel(); + } +} + +function isColliding(rect1, rect2) { + return rect1.x < rect2.x + rect2.width && + rect1.x + rect1.width > rect2.x && + rect1.y < rect2.y + rect2.height && + rect1.height + rect1.y > rect2.y; +} + +function nextLevel() { + level++; + document.getElementById('level').textContent = level; + if (level === 2) { + items = []; + obstacles = []; + player.speed = 5; + createNewChallenge(); + } else if (level === 3) { + items = []; + obstacles = []; + startMiniGame(); + } +} + +function createNewChallenge() { + setInterval(createItem, 800); + setInterval(createObstacle, 1500); + setInterval(createSpeedItem, 8000); +} + +function startMiniGame() { + alert("Welcome to Level 3! Survive the incoming obstacles!"); + player.color = '#ff6347'; + setInterval(createObstacle, 1000); +} + +document.addEventListener('keydown', e => { + if (e.key === 'ArrowLeft' && player.x > 0) player.x -= player.speed; + if (e.key === 'ArrowRight' && player.x < canvas.width - player.width) player.x += player.speed; +}); + +setInterval(createItem, 1000); +setInterval(createObstacle, 2000); +setInterval(createSpeedItem, 10000); From 1f987c6978865142a6d8659312c860d9ed5c96c7 Mon Sep 17 00:00:00 2001 From: Meet Jain Date: Tue, 6 Aug 2024 00:52:02 +0530 Subject: [PATCH 13/14] Feat : Added Zoombie survival game --- .../Zoombie survival/index.html | 17 +++ .../Zoombie survival/script.js | 115 ++++++++++++++++++ .../Zoombie survival/styles.css | 53 ++++++++ 3 files changed, 185 insertions(+) create mode 100644 SinglePlayer - Games/Zoombie survival/index.html create mode 100644 SinglePlayer - Games/Zoombie survival/script.js create mode 100644 SinglePlayer - Games/Zoombie survival/styles.css diff --git a/SinglePlayer - Games/Zoombie survival/index.html b/SinglePlayer - Games/Zoombie survival/index.html new file mode 100644 index 00000000..fe3744d1 --- /dev/null +++ b/SinglePlayer - Games/Zoombie survival/index.html @@ -0,0 +1,17 @@ + + + + + + Zombie Survival + + + +
+
+
Score: 0
+ +
+ + + diff --git a/SinglePlayer - Games/Zoombie survival/script.js b/SinglePlayer - Games/Zoombie survival/script.js new file mode 100644 index 00000000..a5e71259 --- /dev/null +++ b/SinglePlayer - Games/Zoombie survival/script.js @@ -0,0 +1,115 @@ +const gameContainer = document.getElementById('game-container'); +const player = document.getElementById('player'); +const scoreDisplay = document.getElementById('score'); +const gameOverDisplay = document.getElementById('game-over'); +const finalScoreDisplay = document.getElementById('final-score'); +let score = 0; +let playerSpeed = 5; +let bulletSpeed = 10; +let zombieSpeed = 2; +let zombies = []; +let bullets = []; +let gameRunning = true; + +document.addEventListener('keydown', movePlayer); +document.addEventListener('click', shootBullet); + +function movePlayer(e) { + if (!gameRunning) return; + const playerRect = player.getBoundingClientRect(); + switch(e.key) { + case 'ArrowUp': + if (playerRect.top > 0) player.style.top = playerRect.top - playerSpeed + 'px'; + break; + case 'ArrowDown': + if (playerRect.bottom < window.innerHeight) player.style.top = playerRect.top + playerSpeed + 'px'; + break; + case 'ArrowLeft': + if (playerRect.left > 0) player.style.left = playerRect.left - playerSpeed + 'px'; + break; + case 'ArrowRight': + if (playerRect.right < window.innerWidth) player.style.left = playerRect.left + playerSpeed + 'px'; + break; + } +} + +function shootBullet(e) { + if (!gameRunning) return; + const bullet = document.createElement('div'); + bullet.classList.add('bullet'); + const playerRect = player.getBoundingClientRect(); + bullet.style.left = playerRect.left + playerRect.width / 2 - 10 + 'px'; + bullet.style.top = playerRect.top + 'px'; + gameContainer.appendChild(bullet); + bullets.push(bullet); +} + +function spawnZombie() { + if (!gameRunning) return; + const zombie = document.createElement('div'); + zombie.classList.add('zombie'); + zombie.style.left = Math.random() * window.innerWidth + 'px'; + zombie.style.top = 0; + gameContainer.appendChild(zombie); + zombies.push(zombie); +} + +function updateGame() { + if (!gameRunning) return; + bullets.forEach((bullet, index) => { + const bulletRect = bullet.getBoundingClientRect(); + bullet.style.top = bulletRect.top - bulletSpeed + 'px'; + if (bulletRect.top < 0) { + bullet.remove(); + bullets.splice(index, 1); + } + }); + + zombies.forEach((zombie, zIndex) => { + const zombieRect = zombie.getBoundingClientRect(); + zombie.style.top = zombieRect.top + zombieSpeed + 'px'; + + // Check for collision with bullets + bullets.forEach((bullet, bIndex) => { + const bulletRect = bullet.getBoundingClientRect(); + if ( + bulletRect.top < zombieRect.bottom && + bulletRect.bottom > zombieRect.top && + bulletRect.left < zombieRect.right && + bulletRect.right > zombieRect.left + ) { + bullet.remove(); + zombie.remove(); + bullets.splice(bIndex, 1); + zombies.splice(zIndex, 1); + score++; + scoreDisplay.textContent = 'Score: ' + score; + } + }); + + // Check for collision with player + const playerRect = player.getBoundingClientRect(); + if ( + playerRect.top < zombieRect.bottom && + playerRect.bottom > zombieRect.top && + playerRect.left < zombieRect.right && + playerRect.right > zombieRect.left + ) { + endGame(); + } + + if (zombieRect.top > window.innerHeight) { + zombie.remove(); + zombies.splice(zIndex, 1); + } + }); +} + +function endGame() { + gameRunning = false; + finalScoreDisplay.textContent = score; + gameOverDisplay.classList.remove('hidden'); +} + +setInterval(spawnZombie, 2000); +setInterval(updateGame, 50); diff --git a/SinglePlayer - Games/Zoombie survival/styles.css b/SinglePlayer - Games/Zoombie survival/styles.css new file mode 100644 index 00000000..13a057ba --- /dev/null +++ b/SinglePlayer - Games/Zoombie survival/styles.css @@ -0,0 +1,53 @@ +body, html { + margin: 0; + padding: 0; + overflow: hidden; + height: 100%; + background-color: #000; +} + +#game-container { + position: relative; + width: 100%; + height: 100vh; +} + +#player { + position: absolute; + width: 50px; + height: 50px; + background-color: blue; + border-radius: 50%; + bottom: 50px; + left: calc(50% - 25px); +} + +.bullet, .zombie { + position: absolute; + width: 20px; + height: 20px; + background-color: red; + border-radius: 50%; +} + +#score { + position: absolute; + top: 10px; + left: 10px; + color: white; + font-size: 24px; +} + +#game-over { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: red; + font-size: 36px; + text-align: center; +} + +.hidden { + display: none; +} From b17e1e68af8d24f1a29bdf1c39c8dc899ab9c1fa Mon Sep 17 00:00:00 2001 From: Meet Jain Date: Tue, 6 Aug 2024 01:37:46 +0530 Subject: [PATCH 14/14] Feat : Added Trading Card Game --- .../Trading Card Game/index.html | 20 ++++++ .../Trading Card Game/script.js | 69 +++++++++++++++++++ .../Trading Card Game/styles.css | 54 +++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 SinglePlayer - Games/Trading Card Game/index.html create mode 100644 SinglePlayer - Games/Trading Card Game/script.js create mode 100644 SinglePlayer - Games/Trading Card Game/styles.css diff --git a/SinglePlayer - Games/Trading Card Game/index.html b/SinglePlayer - Games/Trading Card Game/index.html new file mode 100644 index 00000000..552d2aab --- /dev/null +++ b/SinglePlayer - Games/Trading Card Game/index.html @@ -0,0 +1,20 @@ + + + + + + Trading Card Game + + + +
+
+
+ +
+
Player Score: 0 | Opponent Score: 0
+ +
+ + + diff --git a/SinglePlayer - Games/Trading Card Game/script.js b/SinglePlayer - Games/Trading Card Game/script.js new file mode 100644 index 00000000..32bef6bd --- /dev/null +++ b/SinglePlayer - Games/Trading Card Game/script.js @@ -0,0 +1,69 @@ +const gameContainer = document.getElementById('game-container'); +const playerHand = document.getElementById('player-hand'); +const opponentHand = document.getElementById('opponent-hand'); +const drawCardButton = document.getElementById('draw-card'); +const message = document.getElementById('message'); +const scoreDisplay = document.getElementById('score'); +const gameOverDisplay = document.getElementById('game-over'); +const resultMessage = document.getElementById('result-message'); + +let playerScore = 0; +let opponentScore = 0; +let gameRunning = true; + +const cardValues = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + +drawCardButton.addEventListener('click', drawCard); + +function drawCard() { + if (!gameRunning) return; + + const playerCardValue = getRandomCardValue(); + const opponentCardValue = getRandomCardValue(); + + const playerCard = createCard(playerCardValue); + const opponentCard = createCard(opponentCardValue); + + playerHand.appendChild(playerCard); + opponentHand.appendChild(opponentCard); + + if (playerCardValue > opponentCardValue) { + playerScore++; + message.textContent = 'You win this round!'; + } else if (playerCardValue < opponentCardValue) { + opponentScore++; + message.textContent = 'You lose this round!'; + } else { + message.textContent = 'It\'s a draw!'; + } + + scoreDisplay.textContent = `Player Score: ${playerScore} | Opponent Score: ${opponentScore}`; + + checkGameOver(); +} + +function getRandomCardValue() { + return cardValues[Math.floor(Math.random() * cardValues.length)]; +} + +function createCard(value) { + const card = document.createElement('div'); + card.classList.add('card'); + card.textContent = value; + return card; +} + +function checkGameOver() { + if (playerHand.childElementCount >= 10 || opponentHand.childElementCount >= 10) { + gameRunning = false; + drawCardButton.disabled = true; + if (playerScore > opponentScore) { + resultMessage.textContent = 'You win!'; + } else if (playerScore < opponentScore) { + resultMessage.textContent = 'You lose!'; + } else { + resultMessage.textContent = 'It\'s a draw!'; + } + gameOverDisplay.classList.remove('hidden'); + } +} diff --git a/SinglePlayer - Games/Trading Card Game/styles.css b/SinglePlayer - Games/Trading Card Game/styles.css new file mode 100644 index 00000000..1a6e59af --- /dev/null +++ b/SinglePlayer - Games/Trading Card Game/styles.css @@ -0,0 +1,54 @@ +body, html { + margin: 0; + padding: 0; + overflow: hidden; + height: 100%; + background-color: #444; + display: flex; + justify-content: center; + align-items: center; +} + +#game-container { + text-align: center; + color: white; +} + +.hand { + display: flex; + justify-content: center; + margin: 20px; +} + +.card { + width: 50px; + height: 70px; + background-color: #eee; + border: 1px solid #000; + margin: 5px; + display: flex; + justify-content: center; + align-items: center; + font-size: 24px; + color: #000; +} + +#draw-card { + margin: 20px; + padding: 10px 20px; + font-size: 16px; +} + +#score { + font-size: 20px; + margin: 10px; +} + +#game-over { + font-size: 24px; + color: red; +} + +.hidden { + display: none; +}