From fca34bd7a80e7f9c3ecdab53398e7f85557d0f17 Mon Sep 17 00:00:00 2001
From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com>
Date: Fri, 31 May 2024 12:48:02 +0530
Subject: [PATCH 1/7] Create index.html
---
Games/Forest_Guardian/index.html | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 Games/Forest_Guardian/index.html
diff --git a/Games/Forest_Guardian/index.html b/Games/Forest_Guardian/index.html
new file mode 100644
index 0000000000..8c0c674a8e
--- /dev/null
+++ b/Games/Forest_Guardian/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+ Forest Guardian
+
+
+
+
+
+
+
+
+ Score: 0
+ Level: 1
+
+
+
+
+
From b0ea5338c098acf6c99fe424a8e5d89619e37f02 Mon Sep 17 00:00:00 2001
From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com>
Date: Fri, 31 May 2024 12:48:26 +0530
Subject: [PATCH 2/7] Create script.js
---
Games/Forest_Guardian/script.js | 142 ++++++++++++++++++++++++++++++++
1 file changed, 142 insertions(+)
create mode 100644 Games/Forest_Guardian/script.js
diff --git a/Games/Forest_Guardian/script.js b/Games/Forest_Guardian/script.js
new file mode 100644
index 0000000000..198c8d364d
--- /dev/null
+++ b/Games/Forest_Guardian/script.js
@@ -0,0 +1,142 @@
+// script.js
+const guardian = document.getElementById('guardian');
+const orb = document.getElementById('orb');
+const creatures = document.getElementById('creatures');
+const scoreBoard = document.getElementById('score');
+const levelBoard = document.getElementById('level');
+
+let score = 0;
+let level = 1;
+let gameInterval;
+let moveLeft = false;
+let moveRight = false;
+let moveUp = false;
+let moveDown = false;
+
+// Function to start the game
+function startGame() {
+ placeOrb();
+ placeCreatures();
+ gameInterval = setInterval(updateGame, 20);
+}
+
+// Function to update game elements
+function updateGame() {
+ moveGuardian();
+ moveCreatures();
+ checkCollisions();
+}
+
+// Function to move the guardian
+function moveGuardian() {
+ let left = parseInt(window.getComputedStyle(guardian).left);
+ let top = parseInt(window.getComputedStyle(guardian).top);
+ if (moveLeft && left > 0) {
+ guardian.style.left = left - 5 + 'px';
+ }
+ if (moveRight && left < window.innerWidth - 50) {
+ guardian.style.left = left + 5 + 'px';
+ }
+ if (moveUp && top > 0) {
+ guardian.style.top = top - 5 + 'px';
+ }
+ if (moveDown && top < window.innerHeight - 50) {
+ guardian.style.top = top + 5 + 'px';
+ }
+}
+
+// Event listeners for key presses
+document.addEventListener('keydown', (e) => {
+ if (e.key === 'ArrowLeft') moveLeft = true;
+ if (e.key === 'ArrowRight') moveRight = true;
+ if (e.key === 'ArrowUp') moveUp = true;
+ if (e.key === 'ArrowDown') moveDown = true;
+});
+
+document.addEventListener('keyup', (e) => {
+ if (e.key === 'ArrowLeft') moveLeft = false;
+ if (e.key === 'ArrowRight') moveRight = false;
+ if (e.key === 'ArrowUp') moveUp = false;
+ if (e.key === 'ArrowDown') moveDown = false;
+});
+
+// Function to place the orb at a random position
+function placeOrb() {
+ orb.style.top = Math.random() * (window.innerHeight - 100) + 'px';
+ orb.style.left = Math.random() * (window.innerWidth - 30) + 'px';
+}
+
+// Function to place creatures at random positions
+function placeCreatures() {
+ creatures.innerHTML = '';
+ for (let i = 0; i < level; i++) {
+ let creature = document.createElement('div');
+ creature.className = 'creature';
+ creature.style.top = Math.random() * (window.innerHeight - 40) + 'px';
+ creature.style.left = Math.random() * (window.innerWidth - 40) + 'px';
+ creatures.appendChild(creature);
+ }
+}
+
+// Function to move creatures
+function moveCreatures() {
+ let creatureElements = document.querySelectorAll('.creature');
+ creatureElements.forEach(creature => {
+ let top = parseInt(window.getComputedStyle(creature).top);
+ creature.style.top = top + 2 + 'px';
+ if (top > window.innerHeight) {
+ creature.style.top = '-40px';
+ creature.style.left = Math.random() * (window.innerWidth - 40) + 'px';
+ }
+ });
+}
+
+// Function to check collisions
+function checkCollisions() {
+ // Check collision with orb
+ let guardianRect = guardian.getBoundingClientRect();
+ let orbRect = orb.getBoundingClientRect();
+ if (
+ guardianRect.x < orbRect.x + orbRect.width &&
+ guardianRect.x + guardianRect.width > orbRect.x &&
+ guardianRect.y < orbRect.y + orbRect.height &&
+ guardianRect.y + guardianRect.height > orbRect.y
+ ) {
+ score += 10;
+ scoreBoard.textContent = 'Score: ' + score;
+ placeOrb();
+ if (score % 50 === 0) {
+ level++;
+ levelBoard.textContent = 'Level: ' + level;
+ placeCreatures();
+ }
+ }
+
+ // Check collision with creatures
+ let creatureElements = document.querySelectorAll('.creature');
+ creatureElements.forEach(creature => {
+ let creatureRect = creature.getBoundingClientRect();
+ if (
+ guardianRect.x < creatureRect.x + creatureRect.width &&
+ guardianRect.x + guardianRect.width > creatureRect.x &&
+ guardianRect.y < creatureRect.y + creatureRect.height &&
+ guardianRect.y + guardianRect.height > creatureRect.y
+ ) {
+ clearInterval(gameInterval);
+ alert('Game Over! Your score: ' + score);
+ resetGame();
+ }
+ });
+}
+
+// Function to reset the game
+function resetGame() {
+ score = 0;
+ level = 1;
+ scoreBoard.textContent = 'Score: ' + score;
+ levelBoard.textContent = 'Level: ' + level;
+ startGame();
+}
+
+// Start the game initially
+startGame();
From 68aaf17811e9eb5ac7eb4d5aee367db1507dfd7d Mon Sep 17 00:00:00 2001
From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com>
Date: Fri, 31 May 2024 12:48:45 +0530
Subject: [PATCH 3/7] Create styles.css
---
Games/Forest_Guardian/styles.css | 55 ++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 Games/Forest_Guardian/styles.css
diff --git a/Games/Forest_Guardian/styles.css b/Games/Forest_Guardian/styles.css
new file mode 100644
index 0000000000..df4703b599
--- /dev/null
+++ b/Games/Forest_Guardian/styles.css
@@ -0,0 +1,55 @@
+/* styles.css */
+body {
+ margin: 0;
+ overflow: hidden;
+ font-family: Arial, sans-serif;
+ background-color: #e0f7fa;
+}
+
+#game-container {
+ position: relative;
+ width: 100vw;
+ height: 100vh;
+ background: #2e8b57; /* Simulating forest background with a solid color */
+}
+
+#guardian {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ width: 50px;
+ height: 50px;
+ background-color: blue; /* Placeholder for guardian */
+ transform: translateX(-50%);
+}
+
+#orb {
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ background-color: #ffeb3b;
+ border-radius: 50%;
+}
+
+#creatures {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+
+.creature {
+ position: absolute;
+ width: 40px;
+ height: 40px;
+ background-color: red; /* Placeholder for creatures */
+}
+
+#score-board {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ color: #ffffff;
+ background: rgba(0, 0, 0, 0.5);
+ padding: 10px;
+ border-radius: 5px;
+}
From 455bdb2cea348850bf4d6dd938154b7065bc1c9f Mon Sep 17 00:00:00 2001
From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com>
Date: Fri, 31 May 2024 12:52:33 +0530
Subject: [PATCH 4/7] Create README.md
---
Games/Forest_Guardian/README.md | 59 +++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
create mode 100644 Games/Forest_Guardian/README.md
diff --git a/Games/Forest_Guardian/README.md b/Games/Forest_Guardian/README.md
new file mode 100644
index 0000000000..4bad8e8a5b
--- /dev/null
+++ b/Games/Forest_Guardian/README.md
@@ -0,0 +1,59 @@
+# Forest Guardian
+
+Forest Guardian is a simple browser-based game where players control a guardian spirit navigating through a magical forest, collecting orbs while avoiding harmful creatures.
+
+## How to Play
+
+### Objective:
+The goal of the game is to collect magical orbs while avoiding harmful creatures. As you collect orbs, you gain points and advance to higher levels, where the game becomes more challenging.
+
+### Controls:
+- **Move Left:** Press the left arrow key (`←`) to move the guardian left.
+- **Move Right:** Press the right arrow key (`→`) to move the guardian right.
+- **Move Up:** Press the up arrow key (`↑`) to move the guardian up.
+- **Move Down:** Press the down arrow key (`↓`) to move the guardian down.
+
+### Gameplay:
+1. **Starting the Game:**
+ - The game starts automatically when you open the HTML file in a web browser.
+ - The guardian spirit appears at the bottom center of the screen.
+ - Orbs and creatures will start appearing randomly in the forest.
+
+2. **Collecting Orbs:**
+ - Move the guardian to collect the magical orbs. Each orb collected increases your score by 10 points.
+ - As you collect orbs, they will reappear at new random positions.
+
+3. **Avoiding Creatures:**
+ - Harmful creatures appear and move down the screen. Avoid touching them.
+ - If the guardian collides with a creature, the game ends.
+
+4. **Advancing Levels:**
+ - Every 50 points, you advance to a new level.
+ - More creatures appear, and they move faster, making it more challenging.
+
+5. **Game Over:**
+ - If the guardian collides with a creature, the game will display a "Game Over" alert with your final score.
+ - You can restart the game by clicking the "OK" button on the alert.
+
+## Functionalities
+
+- **Guardian Movement:** Use arrow keys to move the guardian in four directions: left, right, up, and down.
+- **Orb Collection:** Collect magical orbs to increase your score.
+- **Creature Avoidance:** Avoid harmful creatures to stay alive and continue playing.
+- **Progressive Difficulty:** The game becomes more challenging as you advance levels, with more creatures and faster movement.
+- **Score Tracking:** Track your score and current level on the scoreboard.
+
+## Screenshots (if available)
+
+Adding screenshots of the game in action to showcase its visuals and gameplay.
+![image](https://github.com/Aditi22Bansal/GameZone/assets/142652964/26166445-f8e8-4eb6-81d9-b08d95725592)
+
+## Technologies Used
+
+- HTML
+- CSS
+- JavaScript
+
+## Credits
+
+This game was created by Aditi Bansal.
From ab34f13d6b77d38e07051d3ad4c5f57273056acf Mon Sep 17 00:00:00 2001
From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com>
Date: Fri, 31 May 2024 12:53:39 +0530
Subject: [PATCH 5/7] Add files via upload
---
assets/Forest_guardian.png | Bin 0 -> 12980 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/Forest_guardian.png
diff --git a/assets/Forest_guardian.png b/assets/Forest_guardian.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b27b27ef991a76dfdbe6f796561ce079d55cc64
GIT binary patch
literal 12980
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
NKi#r{wtn~5{{wgZu>Al4
literal 0
HcmV?d00001
From f8b5a936b9de1365e964bf03095113ff18a3a0d4 Mon Sep 17 00:00:00 2001
From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com>
Date: Fri, 31 May 2024 12:54:32 +0530
Subject: [PATCH 6/7] Update README.md
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 66e4d1ef90..b8755b65c0 100644
--- a/README.md
+++ b/README.md
@@ -296,6 +296,8 @@ This repository also provides one such platforms where contributers come over an
| [NewsJunction](https://github.com/kunjgit/GameZone/tree/main/Games/NewsJunction) |
| [Recognizing_Figures](https://github.com/kunjgit/GameZone/tree/main/Games/Recognizing_Figures) |
+| [Forest_Guardian](https://github.com/kunjgit/GameZone/tree/main/Games/Forst_Guardian) |
+
From 30ffd9f0b732677626ef82b8fc59fcae28d81822 Mon Sep 17 00:00:00 2001
From: Aditi Bansal <142652964+Aditi22Bansal@users.noreply.github.com>
Date: Fri, 31 May 2024 12:57:57 +0530
Subject: [PATCH 7/7] Add files via upload
---
assets/images/Forest_guardian.png | Bin 0 -> 12980 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/images/Forest_guardian.png
diff --git a/assets/images/Forest_guardian.png b/assets/images/Forest_guardian.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b27b27ef991a76dfdbe6f796561ce079d55cc64
GIT binary patch
literal 12980
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
NKi#r{wtn~5{{wgZu>Al4
literal 0
HcmV?d00001