diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 9e26dfeeb6..0000000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/Games/Audio_Wordle/README.md b/Games/Audio_Wordle/README.md
new file mode 100644
index 0000000000..418c2e51b6
--- /dev/null
+++ b/Games/Audio_Wordle/README.md
@@ -0,0 +1,37 @@
+# **Auddle: Audio Wordle**
+
+---
+
+
+
+## **Description 📃**
+Auddle is a fun and challenging word-guessing game where players must identify the correct word based on an audio clue. Each round provides a new audio clip, and players have six guesses to find the correct answer. The game combines the classic Wordle mechanics with an audio twist, offering a unique and engaging experience.
+-
+
+## **functionalities 🎮**
+1. Randomized Audio Clues: Each game round starts with a random audio clip from a pre-defined list.
+2. Multiple Attempts: Players have six attempts to guess the correct word.
+3. Feedback System: The game provides color-coded feedback to indicate correct letters, correct positions, and incorrect letters.
+4. Audio Playback: Players can replay the audio clue as many times as needed.
+-
+
+
+## **How to play? 🕹️**
+1. Start the Game: Click the start button to begin a new game round.
+2. Listen to the Audio Clue: An audio clip will play. You can replay the clip by clicking the replay button.
+3. Make a Guess: Type in your guess and submit it.
+4. Receive Feedback: The game will provide feedback with colored tiles:
+ - Green: Correct letter in the correct position.
+ - Yellow: Correct letter in the wrong position.
+ - Gray: Incorrect letter.
+5. Repeat: Use the feedback to make a better guess. You have six attempts to find the correct word.
+6. Win or Lose: If you guess the word correctly within six attempts, you win! Otherwise, the game will reveal the correct answer.
+-
+
+
+
+## **Screenshots 📸**
+
+![Screenshot](image.png)
+
+
diff --git a/Games/Audio_Wordle/images/backspace-outline.svg b/Games/Audio_Wordle/images/backspace-outline.svg
new file mode 100644
index 0000000000..7e3d5aac55
--- /dev/null
+++ b/Games/Audio_Wordle/images/backspace-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Games/Audio_Wordle/images/d.svg b/Games/Audio_Wordle/images/d.svg
new file mode 100644
index 0000000000..ab0af87f63
--- /dev/null
+++ b/Games/Audio_Wordle/images/d.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/Games/Audio_Wordle/images/github.svg b/Games/Audio_Wordle/images/github.svg
new file mode 100644
index 0000000000..a1cb51389c
--- /dev/null
+++ b/Games/Audio_Wordle/images/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Games/Audio_Wordle/images/return.svg b/Games/Audio_Wordle/images/return.svg
new file mode 100644
index 0000000000..3c6451e679
--- /dev/null
+++ b/Games/Audio_Wordle/images/return.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Games/Audio_Wordle/index.html b/Games/Audio_Wordle/index.html
new file mode 100644
index 0000000000..b59819d35a
--- /dev/null
+++ b/Games/Audio_Wordle/index.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Games/Audio_Wordle/script.js b/Games/Audio_Wordle/script.js
new file mode 100644
index 0000000000..1a8d011dd5
--- /dev/null
+++ b/Games/Audio_Wordle/script.js
@@ -0,0 +1,231 @@
+var era = null;
+const tunes = [
+ { answer: "MOHIT", link: "https://www.youtube.com/watch?v=Cb6wuzOurPc", audio: "testAudio/Tum_Se_Hi_Mohit.mp3" },
+ { answer: "NITIN", link: "https://www.youtube.com/watch?v=BG8w0DNIYWw", audio: "testAudio/Zindagi_Ka_Naam_Dosti_Nitin.mp3"},
+ { answer: "JAVED", link: "https://www.youtube.com/watch?v=PukqEK_CPaQ", audio: "testAudio/Maula_Javed.mp3"},
+ { answer: "SHAAN", link: "https://www.youtube.com/watch?v=7PzwOiW8-n0", audio: "testAudio/All_Iz_Well_Shaan.mp3"},
+ { answer: "REKHA", link: "https://www.youtube.com/watch?v=7jZwAl0ArQw", audio: "testAudio/Kabira_Rekha"},
+ { answer: "VINOD", link: "https://www.youtube.com/watch?v=UCsW7nea7sI", audio: "testAudio/Ae_Mere_Humsafar_Vinod.mp3"}
+];
+
+let selectedTune = tunes[Math.floor(Math.random() * tunes.length)];
+const answer = selectedTune.answer;
+const link = selectedTune.link;
+const audio = selectedTune.audio;
+
+const num_guesses = 6;
+var guess = [];
+var guess_;
+var currentLevel = 1;
+var currentBox = 1;
+
+const colors = ["#54514a","#e0c40b","rgb(125,183,0)"];
+const textColor = ["#21241f","#f0f8ff"];
+const finished = ["brilliant!","magnificent!","great work!","well done!","spot on!","correct!","no attempts left!","hard luck!"];
+const delay = 100;
+
+
+window.addEventListener('DOMContentLoaded', (event) => {
+ var aud = document.getElementsByClassName("clue1")[0];
+ aud.src = audio;
+
+ for (let i=1; i<=num_guesses; i++) {
+ let row = document.querySelector(".row-"+i);
+ let boxes = row.children;
+ for (let j = 1; j<=answer.length; j++) {
+ boxes[j-1].style.display = "flex";
+ boxes[j-1].style.width = Math.min(85/answer.length, 17)+"%";
+ }
+ }
+
+ activateKeyboard();
+
+ cluebox.addEventListener("click", async function() {
+ clueNeeded(cluebox);
+ });
+});
+
+function activateKeyboard() {
+ document.documentElement.addEventListener('keydown',handleKeys,false);
+
+ let keyb_rows = document.querySelector(".keyboard").children;
+ for (let i=0;inum_guesses) {
+ let messageBox = document.querySelector(".message-box");
+ let message = messageBox.firstChild;
+ message.innerHTML = finished[num_guesses];
+ messageBox.style.display = "flex";
+ document.documentElement.removeEventListener('keydown',handleKeys,false);
+ displayAnswer();
+ }
+ else {
+ document.querySelector(".clue2").style.display = "flex";
+ await sleep(100);
+ document.querySelector(".clue2").style.opacity = "1";
+ document.querySelector("#guess-instructions").innerText = "guess the movie in 6 attempts!";
+ }
+}
+
+async function setEra(input_era) {
+ era = input_era;
+ document.querySelector(".era").style.opacity = "0";
+ await sleep(500);
+ document.querySelector(".era").style.display = "none";
+ document.querySelector(".container").style.display = "flex";
+ await sleep(200);
+ document.querySelector(".container").style.opacity = "1";
+}
+
+function handleKeys(e) {
+ let messageBox = document.querySelector(".message-box");
+ let message = messageBox.firstChild;
+ let inp ="";
+
+ if (typeof e === 'string') {
+ inp = e;
+ }
+ else{
+ inp = e.key;
+ }
+
+ if (guess_!==answer && currentLevel<=num_guesses){
+ messageBox.style.display = "none";
+
+ if (isLetter(inp)) {
+ if (currentBox<=answer.length) {
+ let key = inp.toUpperCase();
+ guess.push(key);
+ updateLevel(key)
+ }
+ }
+ else if (inp === 'Backspace' && currentBox>1) {
+ let row = document.getElementsByClassName("row-"+(currentLevel))[0];
+ let box = row.children[currentBox-2];
+ guess.pop(box.innerHTML);
+ box.innerHTML = "";
+ box.style.border = "3px solid #a9a9a9";
+ currentBox -=1;
+ }
+ else if (inp === 'Enter') {
+ if (guess.length===answer.length) {
+ submit();
+ }
+ else {
+ message.innerHTML = "not enough letters!";
+ messageBox.style.display = "flex";
+ }
+ }
+ }
+ else {
+ document.documentElement.removeEventListener('keydown',handleKeys,false);
+ }
+
+ if (currentLevel>num_guesses) {
+ message.innerHTML = finished[num_guesses];
+ messageBox.style.display = "flex";
+ displayAnswer();
+ }
+}
+
+function sleep(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+function isLetter(str) {
+ return str.length === 1 && str.match(/[a-z]/i);
+}
+
+function updateLevel(letter) {
+ let row = document.getElementsByClassName("row-"+currentLevel)[0];
+ let box = row.children[currentBox-1];
+ box.innerHTML = letter;
+ box.style.border = "3px solid #666666";
+ currentBox += 1;
+}
+
+async function submit() {
+ let row = document.getElementsByClassName("row-"+currentLevel)[0];
+ let boxes = row.children;
+ let correct = 0;
+
+ guess_ = guess.join("");
+
+ for (let i=0; i div {
+ height: 31%;
+ display: flex;
+ justify-content: space-around;
+}
+
+#bksp, #enter {
+ width: max(8.5%,20px);
+}
+
+.keyboard > div > div {
+ cursor: pointer;
+ background:rgb(223, 221, 221);
+ border: 1px solid #707072;
+ border-radius: 5%;
+ padding: 2px;
+ width: 9%;
+}
+
+.Backspace, .Enter {
+ display: flex;
+ padding: 0;
+ justify-content: center;
+}
+
+.credits {
+ display: flex;
+ justify-content: center;
+ font-size: min(max(10px,1vh),3vh);
+ font-family: "Fredoka", sans-serif;
+ font-weight: 400;
+}
+
+#github-logo {
+ width: 13px;
+}
+
+@keyframes green {
+ 0% {background: rgb(65, 179, 4, 0);}
+ 100% {background: rgb(125,183,0); color: #f0f8ff;}
+}
+
+@keyframes yellow {
+
+ 0% {background: rgba(224, 196, 11,0);}
+ 100% {background: rgba(224, 196, 11,1);color: #f0f8ff;}
+}
+
+@keyframes grey {
+ 0% {background: rgba(84, 81, 74,0);}
+ 100% {background: rgba(84, 81, 74,1);color: #f0f8ff;}
+}
+
+@keyframes zoom-in-out {
+ 0% {}
+ 100% {transform: scale(1.1);}
+}
\ No newline at end of file
diff --git a/Games/Audio_Wordle/testAudio/Ae_Mere_Humsafar_Vinod.mp3 b/Games/Audio_Wordle/testAudio/Ae_Mere_Humsafar_Vinod.mp3
new file mode 100644
index 0000000000..0ebf7bfc08
Binary files /dev/null and b/Games/Audio_Wordle/testAudio/Ae_Mere_Humsafar_Vinod.mp3 differ
diff --git a/Games/Audio_Wordle/testAudio/All_Iz_Well_Shaan.mp3 b/Games/Audio_Wordle/testAudio/All_Iz_Well_Shaan.mp3
new file mode 100644
index 0000000000..ac25ae4239
Binary files /dev/null and b/Games/Audio_Wordle/testAudio/All_Iz_Well_Shaan.mp3 differ
diff --git a/Games/Audio_Wordle/testAudio/Kabira_Rekha.mp3 b/Games/Audio_Wordle/testAudio/Kabira_Rekha.mp3
new file mode 100644
index 0000000000..33a4eb44a8
Binary files /dev/null and b/Games/Audio_Wordle/testAudio/Kabira_Rekha.mp3 differ
diff --git a/Games/Audio_Wordle/testAudio/Maula_Javed.mp3 b/Games/Audio_Wordle/testAudio/Maula_Javed.mp3
new file mode 100644
index 0000000000..58051915f5
Binary files /dev/null and b/Games/Audio_Wordle/testAudio/Maula_Javed.mp3 differ
diff --git a/Games/Audio_Wordle/testAudio/Tum_Se_Hi_Mohit.mp3 b/Games/Audio_Wordle/testAudio/Tum_Se_Hi_Mohit.mp3
new file mode 100644
index 0000000000..93691a2822
Binary files /dev/null and b/Games/Audio_Wordle/testAudio/Tum_Se_Hi_Mohit.mp3 differ
diff --git a/Games/Audio_Wordle/testAudio/Zindagi_Ka_Naam_Dosti_Nitin.mp3 b/Games/Audio_Wordle/testAudio/Zindagi_Ka_Naam_Dosti_Nitin.mp3
new file mode 100644
index 0000000000..07ed304454
Binary files /dev/null and b/Games/Audio_Wordle/testAudio/Zindagi_Ka_Naam_Dosti_Nitin.mp3 differ
diff --git a/Games/Bunny_is_Lost/Bunny Game - Made with Clipchamp.mp4 b/Games/Bunny_is_Lost/Bunny Game - Made with Clipchamp.mp4
new file mode 100644
index 0000000000..0cebe80f78
Binary files /dev/null and b/Games/Bunny_is_Lost/Bunny Game - Made with Clipchamp.mp4 differ
diff --git a/Games/Bunny_is_Lost/README.md b/Games/Bunny_is_Lost/README.md
new file mode 100644
index 0000000000..d4d640f6e7
--- /dev/null
+++ b/Games/Bunny_is_Lost/README.md
@@ -0,0 +1,70 @@
+### Demo Video
+
+
+### Game Logic
+
+The game "Bunny is Lost!" is a 2D side-scrolling survival game where the player controls a bunny that must run away from a forest fire while avoiding and surviving various obstacles. The main objective is to keep the bunny alive for as long as possible by jumping over obstacles and collecting carrots to maintain its health. Here is a detailed breakdown of the game logic:
+
+1. **Initialization and Setup:**
+ - The game initializes the HTML and CSS elements required for the game interface and player interaction.
+ - The `resizeGame` function adjusts the game canvas based on the window size to ensure the game is displayed correctly on different devices.
+ - Background music is generated and played in a loop using the Web Audio API.
+
+2. **Game Start:**
+ - When the player clicks the "Run!" button, the game starts by hiding the intro screen and initiating the main game loop (`gameTic`).
+
+3. **Main Game Loop:**
+ - The main game loop updates the world’s rotation (`worldDeg`) to create the illusion of the bunny running.
+ - Background elements, like mountains and fire, are updated to match the world's rotation.
+ - The player’s status and position are updated based on user input and game events.
+
+4. **Player Interaction:**
+ - The player can prepare to jump by pressing the up arrow key or the spacebar, which increases the `jumpPrepare` value.
+ - Releasing the key triggers the bunny’s jump, calculated based on the `jumpPrepare` value.
+ - The bunny’s status transitions between "stopped", "prepare", "jump", and "landing" based on its vertical position and jump force.
+
+5. **Obstacles and Enemies:**
+ - Carrots appear at regular intervals and can be collected to increase the bunny’s life.
+ - Birds are spawned as enemies that attempt to capture the bunny. If a bird catches the bunny, it results in the bunny’s death.
+
+6. **Health and Status Updates:**
+ - The bunny’s health decreases over time and when it prepares to jump.
+ - If the bunny’s health drops to zero or if it gets caught by a bird, the game ends.
+ - The game displays the distance traveled by the bunny.
+
+7. **Collision Detection:**
+ - The game checks for collisions between the bunny and carrots or birds.
+ - Collecting a carrot increases the bunny’s health, while a collision with a bird ends the game.
+
+8. **Game Over Conditions:**
+ - The game ends when the bunny's health reaches zero, the bunny gets caught by a bird, or if the bunny is overtaken by the fire.
+ - On game over, a message is displayed, and the screen transitions to a sepia tone.
+
+### Game Features
+
+1. **Dynamic Scaling:**
+ - The game dynamically adjusts its size and layout based on the device’s screen size, ensuring an optimal viewing experience on both desktops and mobile devices.
+
+2. **Background Music:**
+ - A procedurally generated background score plays throughout the game, creating an engaging and immersive atmosphere.
+
+3. **Interactive Controls:**
+ - Players can control the bunny’s jumps through keyboard inputs (up arrow or spacebar) or touch inputs on mobile devices.
+
+4. **Collectibles:**
+ - Carrots are scattered throughout the game, which players can collect to replenish the bunny’s health.
+
+5. **Obstacles and Enemies:**
+ - Birds serve as enemies that add challenge by trying to catch the bunny.
+ - The fire serves as a constant threat that moves towards the bunny, adding urgency to the gameplay.
+
+6. **Visual Effects:**
+ - The game features various visual effects, including a rotating world, animated fire, and dynamically generated mountains and backgrounds.
+
+7. **Health and Jump Indicators:**
+ - The game provides visual indicators for the bunny’s health and jump preparation, helping players manage their actions effectively.
+
+8. **Endgame Feedback:**
+ - Upon the bunny’s death, the game provides feedback on how the bunny died, adding narrative depth to the game.
+
+The combination of these features creates an engaging and challenging game that requires players to balance their actions to keep the bunny alive while navigating through an ever-changing environment.
\ No newline at end of file
diff --git a/Games/Bunny_is_Lost/game.js b/Games/Bunny_is_Lost/game.js
new file mode 100644
index 0000000000..a6a54ae70b
--- /dev/null
+++ b/Games/Bunny_is_Lost/game.js
@@ -0,0 +1,473 @@
+"use strict";
+
+var d = document;
+var rnd = Math.random;
+var round = Math.round;
+var find = d.querySelector.bind(d);
+var worldDeg = 0;
+var life = 100;
+var jumpPrepare = 0;
+var jumpForce = 0;
+var unblockKeys = ['F5','F11','F12'];
+var timeout = (secs, fn)=> setTimeout(fn, secs*1000);
+var distM = 0;
+var gameTic = null;
+
+function resizeGame() {
+ var w = window.innerWidth;
+ var h = window.innerHeight;
+ canvas.style.transform = `scale(${w/1400})`;
+ if (w < h) {
+ d.body.className = 'vertical'
+ e.style.top = `-${h*.8}px`;
+ } else {
+ d.body.className = 'horizontal'
+ e.style.top = `-${h/5}px`;
+ }
+}
+resizeGame();
+window.onresize = resizeGame;
+
+var offAudioCtx = new OfflineAudioContext(2,44100*21,44100);
+
+var AudioContext = window.AudioContext || window.webkitAudioContext;
+var audioCtx = new AudioContext();
+
+// Cc Eb Fc Gc Bb
+// C D E F G A B
+var notes = [{
+ C:16.35, Cc:17.32, D:18.35, Eb:19.45, E:20.60, F:21.83,
+ Fc:23.12, G:24.50, Gc:25.96, A:27.50, Bb:29.14, B:30.87
+}];
+for (var i=1; i<=8; i++) {
+ notes[i] = { };
+ for (var n in notes[0]) notes[i][n] = notes[0][n] * Math.pow(2, i+1);
+}
+
+function playTone(freq, length, attack) {
+ if (!attack) attack = 2;
+ var o = audioCtx.createOscillator();
+ o.frequency.value = freq;
+ var g = audioCtx.createGain();
+ g.connect(audioCtx.destination);
+ g.gain.value = 0;
+ g.gain.setValueAtTime(attack, audioCtx.currentTime);
+ g.gain.linearRampToValueAtTime(0, audioCtx.currentTime + length);
+ o.connect(g);
+ o.start(0);
+}
+
+function playOffMusicNote(freq, start, end, attack) {
+ if (!attack) attack = 2;
+ var o = offAudioCtx.createOscillator();
+ o.frequency.value = freq;
+ var g = offAudioCtx.createGain();
+ g.connect(offAudioCtx.destination);
+ g.gain.value = 0;
+ g.gain.setValueAtTime(attack, offAudioCtx.currentTime + start);
+ g.gain.linearRampToValueAtTime(0, offAudioCtx.currentTime + end);
+ o.connect(g);
+ o.start(0);
+}
+
+// Parse and play ABC notation
+function playABC(opts) {
+ var callback = arguments[arguments.length-1] || function(){};
+ if (!opts.time) opts.time = 1;
+ if (!opts.attack) opts.attack = 1;
+ var timePos = 0;
+ var music = '';
+ for (var i=1; i{
+ var octave = ( 'abcdefg'.indexOf(n[0]) > -1 ) ? 4 : 3;
+ if (n[1] === ',') {
+ octave--;
+ n = n[0] + n.substring(2);
+ }
+ if (n[1] === "'") {
+ octave++;
+ n = n[0] + n.substring(2);
+ }
+ var length = (n[1] ? n.substring(1) : '1');
+ length = (length[0]==='/') ? (length.length===1) ? .5 : 1/parseInt(length[1]) : parseInt(length);
+ length *= opts.time;
+ n = n[0].toUpperCase();
+ if (n !== 'Z') {
+ playOffMusicNote(notes[octave][n], timePos, timePos+length, opts.attack);
+ }
+ timePos += length;
+ });
+ timeout(timePos+.1, callback);
+}
+
+// Create Song
+playABC(
+ {time:1/6, attack:1},
+ 'a2ed cAce eaae cAce a2ed cAce d2B2 B2ef',
+ 'a2ed cAce eaae cAce defg afed c2A2 A2',
+ 'ce',
+ 'f2cB AFce f2cB ABce f2cB AFGA G2E2 E2ce',
+ 'f2cB AFce fecB ABce fefg afed c2A2 A2',
+ null
+);
+
+// Render and loop play
+offAudioCtx.startRendering()
+.then((renderedBuffer)=> {
+ var song = audioCtx.createBufferSource();
+ song.buffer = renderedBuffer;
+ song.connect(audioCtx.destination);
+ song.loop = true;
+ song.start();
+})
+.catch((err)=> console.error('Music Fail', err) );
+
+
+HTMLElement.prototype.mkEl = function mkEl(tag, css, attrs) {
+ var att, el = d.createElement(tag);
+ for (att in css) el.style[att] = css[att];
+ if (attrs) for (att in attrs) el[att] = attrs[att];
+ this.appendChild(el);
+ el.del = ()=> this.removeChild(el);
+ return el;
+}
+
+var bloodList = [];
+function mkBlood(x, y, vx, vy) {
+ var b = e.mkEl('blood', {border:round((1+rnd())*5)+'px solid #B00', top:'50%', left:'50%', zIndex:2});
+ b.x = x;
+ b.y = y;
+ b.vx = vx;
+ b.vy = vy;
+ bloodList.push(b);
+ return b;
+}
+function updateBlood() {
+ bloodList.forEach((b)=> {
+ b.x += b.vx;
+ b.y += b.vy;
+ b.vy -= 3;
+ if (b.y <= 0) b.y = b.vx = b.vy = 0;
+ b.style.transform = `rotate(${b.x}deg) translate(0,-${1500+b.y}px)`;
+ });
+}
+
+function Bunny() {
+ // wrapper
+ // body
+ // back leg
+ // head
+ //
+ //
+ this.x = 0;
+ this.y = 33;
+ this.radius = 33;
+ this.wrap = e.mkEl('bw',{},{className:'stopped'});
+ var b = this.wrap.mkEl('b');
+ this.wrap.body = b;
+ b.mkEl('bl');
+ b.mkEl('bh');
+ //this.wrap.mkEl('div', {border:'1px solid red', outline:this.radius+'px solid rgba(0,255,0,.4)'});
+ this.update();
+}
+Bunny.prototype.status = function(s) {
+ if (s) this.wrap.className = s;
+ return this.wrap.className;
+}
+Bunny.prototype.statusIs = function(s) {
+ return this.status().indexOf(s) > -1;
+}
+Bunny.prototype.statusIsnt = function(s) {
+ return this.status().indexOf(s) === -1;
+}
+Bunny.prototype.update = function() {
+ this.wrap.style.transform = `rotate(${this.x+1.5}deg) translate(0,-${1460+this.y}px)`;
+}
+
+var player = new Bunny();
+
+function Carrot(x, y) {
+ Carrot.list.push(this);
+ this.x = x;
+ this.y = y;
+ this.radius = 17;
+ this.el = e.mkEl('carrot-wrap', {transform:`rotate(${x}deg)`, zIndex:2});
+ this.el.mkEl('leaves', {transform:`translate(-20px, ${-1503-y}px)`} );
+ this.el.mkEl('carrot', {transform:`translate(-20px, ${-1503-y}px)`} );
+ //this.el.mkEl('div', {transform:`translate(0, ${-1503-y}px)`, border:'1px solid red', outline:this.radius+'px solid rgba(0,255,0,.4)'});
+}
+Carrot.list = [];
+
+Carrot.prototype.remove = function() {
+ Carrot.list = Carrot.list.filter((c)=> c!==this );
+ this.el.del();
+}
+
+function updateCarrots() {
+ // Create carrots
+ if ( round(worldDeg*10) % 80 === 0 ) {
+ if (rnd()<.7) {
+ new Carrot(-worldDeg+30, 35+rnd()*200);
+ } else {
+ var y = 100 + rnd()*200
+ new Carrot(-worldDeg+28, y);
+ new Carrot(-worldDeg+30.5, y+40);
+ new Carrot(-worldDeg+32, y);
+ }
+ }
+ // Remove ast carrots
+ Carrot.list.forEach((c)=> {
+ if (c.x < -worldDeg-90) c.remove();
+ });
+ // Eat carrots
+ Carrot.list.forEach((c)=> {
+ if (touch(player, c, 20)) {
+ life += 10;
+ if (life>100) life=100;
+ timeout(.0, ()=> playTone(1900, .3) );
+ timeout(.1, ()=> playTone(1100, .3) );
+ c.remove();
+ }
+ });
+}
+
+new Carrot( 6, 40);
+new Carrot( 8, 40);
+new Carrot(10, 40);
+new Carrot(12, 40);
+new Carrot(15, 40);
+new Carrot(19, 40);
+new Carrot(24, 40);
+new Carrot(30, 40);
+
+function Bird(x, y) {
+ Bird.list.push(this);
+ this.velocity = 0.1 + rnd()/2;
+ this.x = x;
+ this.y = y;
+ this.radius = 75;
+ this.wrap = e.mkEl('bird-wrap', {transform:`rotate(${x}deg)`, zIndex:2});
+ //this.wrap.mkEl('test', {transform:`translate(0, ${-1500-y}px)`, zIndex:99, border:'1px solid red', outline:this.radius+'px solid rgba(0,255,0,.5)'}); // test mark
+ this.el = this.wrap.mkEl('div', {transform:`translate(0, ${-1500-y}px)`})
+ var bird = this.el.mkEl('bird');
+ this.el.mkEl('wing-right', {}, {className:'wing'});
+ this.el.mkEl('wing-left', {}, {className:'wing'});
+ bird.mkEl('head');
+}
+
+Bird.list = [];
+
+Bird.prototype.update = function() {
+ this.x -= this.velocity;
+ if (this.x-5 > -worldDeg) this.y -= this.velocity*4;
+ if (this.x+5 < -worldDeg) this.y += this.velocity*8;
+ if (this.y < 200) this.y = 200;
+ this.wrap.style.transform = `rotate(${this.x}deg)`;
+ this.el.style.transform = `translate(0, ${-1500-this.y}px)`;
+ if (this.x < -worldDeg-90) this.die();
+ this.testGetBunny();
+ if (this.hunted) {
+ this.hunted.x = (this.hunted.x*2 + (this.x-2)) / 3;
+ this.hunted.y = (this.hunted.y*2 + (this.y-100)) / 3;
+ mkBlood(this.hunted.x+rnd()*2, this.hunted.y, 0, 0);
+ }
+}
+Bird.update = function() {
+ Bird.list.forEach((b)=> b.update() );
+ if ( round(worldDeg*10) % 80 === 0 && rnd() < .4 )
+ new Bird(-worldDeg+25, 200+rnd()*300);
+};
+
+Bird.prototype.testGetBunny = function() {
+ if (player.y < this.y && player.statusIsnt('hunted')) {
+ if (touch(player, this)) {
+ die('hunted');
+ this.hunted = player;
+ }
+ }
+}
+
+Bird.prototype.die = function() {
+ Bird.list = Bird.list.filter((b)=> b!==this );
+ this.wrap.del();
+}
+
+var sin = (deg)=> Math.sin((deg%180)*Math.PI/180);
+var cos = (deg)=> Math.cos((deg%180)*Math.PI/180);
+
+function dist(obj1, obj2) {
+ var x1 = sin(obj1.x) * (obj1.y+1500);
+ var y1 = cos(obj1.y) * (obj1.y+1500);
+ var x2 = sin(obj2.x) * (obj2.y+1500);
+ var y2 = cos(obj2.y) * (obj2.y+1500);
+ var dX = x1 - x2;
+ var dY = y1 - y2;
+ return Math.sqrt(dX*dX + dY*dY);
+}
+
+function touch(obj1, obj2, inc) {
+ if (!inc) inc = 0;
+ return dist(obj1, obj2) <= (obj1.radius + obj2.radius + inc);
+}
+
+//new Bird(30, 300);
+//var bird = new Bird(20, 200);
+
+//player.status('dead');
+//player.status('hunted');
+//bird.hunted = player;
+//e.mkEl('qqqqq', {left:'50%',top:'50%',transform:'translate(0,-1500px)',border:'1px solid #00f', zIndex:99});
+
+for (var x=0; x<360; x++) { // grass (capim)
+ //e.mkEl('k', {transform:'rotate('+(x+rnd()*.4-.2)+'deg) translate(0,-'+(1511-rnd()*10)+'px)'});
+ if (rnd()<0.3) e.mkEl('f', {transform:'rotate('+(x+rnd()-.5)+'deg) translate(0,-'+(1498-rnd()*20)+'px)'});
+}
+
+jumpPF.update = function() {
+ if (player.status() == 'prepare') {
+ jumpPrepare += 1.5;
+ if (jumpPrepare > 50) jumpPrepare = 50;
+ this.style.height = jumpPrepare*2+'%';
+ }
+};
+
+var montains = { bg1:[], bg2:[] };
+function updateMontains(bg, prob) {
+ if (rnd()0; worldDeg-=0.1) {
+ if ( round(worldDeg*10) % 80 === 0 ) updateMontains(bg1, 0.6);
+ if ( round(worldDeg*10) % 60 === 0 ) updateMontains(bg2, 0.6);
+}
+
+function burnTest() {
+ if ( player.statusIs('stopped') ) {
+ if ( player.x < (-worldDeg-15) ) {
+ die('burned');
+ for (var i=0; i<15; i++) mkBlood(player.x, player.y, rnd(), 15+rnd()*5);
+ }
+ }
+}
+
+function die(status) {
+ player.status('dead '+status);
+ timeout(2, ()=> {
+ timeout(0, ()=> playTone(300, 1, 4) );
+ timeout(1, ()=> playTone(200, 2, 4) );
+ timeout(2, ()=> playTone(100, 4, 6) );
+ distEl.mkEl('div').innerText = `The bunny die ${status}, lost and alone.`;
+ timeout(3, ()=> {
+ d.body.style.transition = '2s';
+ d.body.style.filter = 'sepia(90%)';
+ });
+ timeout(4, ()=> clearInterval(gameTic) );
+ });
+}
+
+function start() {
+
+ intro.style.display = 'none';
+
+ // Make Fire
+ timeout(0.3, ()=> fire.mkEl('w', {left:'40%'}, {className:'fireBack fireBig'}) );
+ timeout(0.6, ()=> fire.mkEl('w', {left:'50%'}, {className:'fireMid fireBig'}) );
+ timeout(0.9, ()=> fire.mkEl('w', {left:'60%', zIndex:1}, {className:'fireBack fireBig'}) );
+ timeout(1.2, ()=> fire.mkEl('w', {left:'70%'}, {className:'fireMid fireBig'}) );
+ timeout(1.5, ()=> fire.mkEl('w', {right:'112px', zIndex:1}, {className:'fireBackEdge'}) );
+ timeout(1.8, ()=> fire.mkEl('w', {right:'60px'}, {className:'fireEdge'}) );
+
+ gameTic = setInterval(()=>{ // Tic
+ worldDeg -= 0.1;
+ if ( round(worldDeg*10) % 80 === 0 ) updateMontains(bg1, 0.6);
+ if ( round(worldDeg*10) % 60 === 0 ) updateMontains(bg2, 0.6);
+
+ // Roll the world
+ e.style.transform = 'rotate('+(worldDeg)+'deg)'
+ bg1.style.transform = 'rotate('+(-worldDeg/2)+'deg)'
+ bg2.style.transform = 'rotate('+(-worldDeg/4)+'deg)'
+
+ // Move fire
+ fireWrap.style.transform = 'rotate('+(-worldDeg-26)+'deg)'
+
+ // Update pitfals
+ burnTest();
+ Bird.update();
+ updateBlood();
+
+ // Update life;
+ life -= 0.05;
+ if (player.statusIs('prepare')) life -= 0.2;
+ if (life < 0) life = 0;
+ if (player.statusIs('stopped') && life === 0) die('hungry');
+ updateCarrots();
+
+ // Update Ctrl
+ lifePF.style.height = life + '%';
+ jumpPF.update();
+ if (round(player.x/6) !== distM) {
+ distM = round(player.x/6);
+ distEl.innerText = `Distance: ${distM}m`
+ }
+
+ var pStatus = player.status();
+ if ((jumpForce > 0 || player.y > player.radius) && ['jump','landing'].indexOf(pStatus)>-1) {
+ player.x += 0.5;
+ player.y += jumpForce;
+ jumpForce -= 4;
+ if (jumpForce < 0 && player.y < player.radius*3) player.status('landing');
+ if (player.y <= player.radius) { player.status('stopped'); player.y = player.radius; }
+ }
+ player.update();
+ }, 40);
+}
+
+function doJumpPrepare() {
+ if (player.statusIs('stopped')) {
+ player.status('prepare');
+ jumpPrepare = 5;
+ jumpPF.update();
+ }
+}
+
+function doJump() {
+ if (player.statusIs('prepare')) {
+ playTone(400, jumpPrepare/22);
+ playTone(300, jumpPrepare/20);
+ player.status('jump');
+ jumpForce = jumpPrepare;
+ jumpPrepare = 0;
+ jumpPF.style.height = 0;
+ }
+}
+
+d.addEventListener('keydown', function(ev) {
+ if (unblockKeys.indexOf(ev.key)==-1) ev.preventDefault();
+ if (ev.key==='ArrowUp' || ev.key===' ') doJumpPrepare();
+});
+
+d.addEventListener('keyup', function(ev) {
+ if (unblockKeys.indexOf(ev.key)==-1) ev.preventDefault();
+ if (ev.key==='ArrowUp' || ev.key===' ') doJump();
+});
+
+d.addEventListener('touchstart', doJumpPrepare);
+d.addEventListener('touchend', doJump);
\ No newline at end of file
diff --git a/Games/Bunny_is_Lost/index.html b/Games/Bunny_is_Lost/index.html
new file mode 100644
index 0000000000..0bda4ee400
--- /dev/null
+++ b/Games/Bunny_is_Lost/index.html
@@ -0,0 +1,39 @@
+
+
+ Bunny
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Distance: 0m
+
+
JUMP!
+
+
+
+
Bunny is Lost!
+
+ Your home was burned in the forest fire.
+ You must run and don't look behind.
+ You must protect yourself from birds of prey.
+ You are look, there are many carrots on the way!
+
+
+
+
+
\ No newline at end of file
diff --git a/Games/Currency_Converter/style.css b/Games/Currency_Converter/style.css
new file mode 100644
index 0000000000..bc835f79f6
--- /dev/null
+++ b/Games/Currency_Converter/style.css
@@ -0,0 +1,82 @@
+* {
+ margin: 0;
+ padding: 0;
+ }
+
+ body {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ min-height: 100vh;
+ background-color: #f4e4ba;
+ }
+
+ .container {
+ background-color: #fff;
+ padding: 2rem;
+ border-radius: 1rem;
+ min-height: 45vh;
+ width: 40vh;
+ }
+
+ form {
+ margin: 2rem 0 1rem 0;
+ }
+
+ form select,
+ button,
+ input {
+ width: 100%;
+ border: none;
+ outline: none;
+ border-radius: 0.75rem;
+ }
+
+ form input {
+ border: 1px solid lightgray;
+ font-size: 1rem;
+ height: 3rem;
+ padding-left: 0.5rem;
+ }
+
+ .dropdown {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 2rem;
+ }
+
+ .dropdown i {
+ font-size: 1.5rem;
+ margin-top: 1rem;
+ }
+
+ .select-container img {
+ max-width: 2rem;
+ }
+
+ .select-container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 6rem;
+ border-radius: 0.5rem;
+ border: 1px solid lightgray;
+ }
+
+ .select-container select {
+ font-size: 1rem;
+ width: auto;
+ }
+
+ .msg {
+ margin: 2rem 0 2rem 0;
+ }
+
+ form button {
+ height: 3rem;
+ background-color: #af4d98;
+ color: #fff;
+ font-size: 1.15rem;
+ cursor: pointer;
+ }
\ No newline at end of file
diff --git a/Games/Dice_Game/README.md b/Games/Dice_Game/README.md
new file mode 100644
index 0000000000..df27957b66
--- /dev/null
+++ b/Games/Dice_Game/README.md
@@ -0,0 +1,43 @@
+# Dice Game
+
+
+## Description
+
+An engaging two-player dice game where the objective is to be the first to reach a total score of 100 points. Players take turns rolling a die and accumulate points during their turn. The twist is that if a player rolls a 1, their current turn's score is reset to 0, and their turn ends. Players must strategize when to roll and when to hold to avoid losing points and give themselves the best chance to win.
+
+## Functionalities
+
+- **Two Players**: The game is played with two players.
+- **Turn-Based Play**: Players alternate turns rolling a single die.
+- **Scoring**: On their turn, a player can roll the die as many times as they wish. Each roll adds the die's value to the player's temporary score for that turn.
+- **Rolling a 1**: If a player rolls a 1, their temporary score for that turn is reset to 0, and their turn ends immediately.
+- **Holding**: A player can choose to hold at any time during their turn, adding their temporary score to their total score and ending their turn.
+- **Winning the Game**: The first player to reach a total score of 100 points wins the game.
+
+## How to play?
+
+1. **Two Players**: The game is played with two players taking turns.
+2. **Turn-Based Play**: Players take turns to roll a single die. The current player's actions during their turn determine their score and turn duration.
+3. **Scoring**: On their turn, a player can roll the die as many times as they choose. Each roll adds the die's value to the player's temporary score for that turn.
+4. **Rolling a 1**: If the player rolls a 1:
+ - Their temporary score for that turn is reset to 0.
+ - Their turn ends immediately.
+5. **Holding**: A player can choose to hold at any time during their turn.
+ - When a player holds:
+ - Their temporary score for that turn is added to their total score.
+ - Their turn ends.
+6. **Winning the Game**: The game continues with players taking turns until one player reaches or exceeds a total score of 100 points.
+ - The first player to reach or exceed 100 points wins the game.
+
+## How to Run
+
+1. Clone the repository.
+2. Ensure you have the dice images in an `images` folder.
+3. Open the `index.html` file in a web browser.
+4. Refresh the page to roll the dice and see the results.
+
+## Screenshots
+![Dice_Game](https://github.com/shivan2004/GameZone/assets/112183968/89db2e39-04f4-4d07-afe8-5dd2b650d73e)
+
+
+## Working video
diff --git a/Games/Dice_Game/images/dice1.png b/Games/Dice_Game/images/dice1.png
new file mode 100644
index 0000000000..a12129f779
Binary files /dev/null and b/Games/Dice_Game/images/dice1.png differ
diff --git a/Games/Dice_Game/images/dice2.png b/Games/Dice_Game/images/dice2.png
new file mode 100644
index 0000000000..370b4d66f3
Binary files /dev/null and b/Games/Dice_Game/images/dice2.png differ
diff --git a/Games/Dice_Game/images/dice3.png b/Games/Dice_Game/images/dice3.png
new file mode 100644
index 0000000000..f2476a492a
Binary files /dev/null and b/Games/Dice_Game/images/dice3.png differ
diff --git a/Games/Dice_Game/images/dice4.png b/Games/Dice_Game/images/dice4.png
new file mode 100644
index 0000000000..30279567f6
Binary files /dev/null and b/Games/Dice_Game/images/dice4.png differ
diff --git a/Games/Dice_Game/images/dice5.png b/Games/Dice_Game/images/dice5.png
new file mode 100644
index 0000000000..e8ef8b0452
Binary files /dev/null and b/Games/Dice_Game/images/dice5.png differ
diff --git a/Games/Dice_Game/images/dice6.png b/Games/Dice_Game/images/dice6.png
new file mode 100644
index 0000000000..bfcabce7f7
Binary files /dev/null and b/Games/Dice_Game/images/dice6.png differ
diff --git a/Games/Dice_Game/index.html b/Games/Dice_Game/index.html
new file mode 100644
index 0000000000..3a0dfd2294
--- /dev/null
+++ b/Games/Dice_Game/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ Dice Game
+
+
+
+
+
Dice Game
+
+
+
Player 1
+
Total Score: 0
+
Current Score: 0
+
+
+
Player 2
+
Total Score: 0
+
Current Score: 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Games/Dice_Game/script.js b/Games/Dice_Game/script.js
new file mode 100644
index 0000000000..fed5c34ad8
--- /dev/null
+++ b/Games/Dice_Game/script.js
@@ -0,0 +1,39 @@
+let currentPlayer = 1;
+let totalScores = [0, 0];
+let currentScores = [0, 0];
+
+const rollDice = () => Math.floor(Math.random() * 6) + 1;
+
+const switchPlayer = () => {
+ currentScores[currentPlayer - 1] = 0;
+ document.getElementById(`current-score-${currentPlayer}`).textContent = currentScores[currentPlayer - 1];
+ currentPlayer = currentPlayer === 1 ? 2 : 1;
+};
+
+const checkWinner = () => {
+ if (totalScores[currentPlayer - 1] >= 100) {
+ document.getElementById('winner').textContent = `Player ${currentPlayer} wins!`;
+ document.getElementById('roll-button').disabled = true;
+ document.getElementById('hold-button').disabled = true;
+ }
+};
+
+document.getElementById('roll-button').addEventListener('click', () => {
+ const diceValue = rollDice();
+ document.getElementById('dice').src = `images/dice${diceValue}.png`;
+ if (diceValue === 1) {
+ switchPlayer();
+ } else {
+ currentScores[currentPlayer - 1] += diceValue;
+ document.getElementById(`current-score-${currentPlayer}`).textContent = currentScores[currentPlayer - 1];
+ }
+});
+
+document.getElementById('hold-button').addEventListener('click', () => {
+ totalScores[currentPlayer - 1] += currentScores[currentPlayer - 1];
+ document.getElementById(`total-score-${currentPlayer}`).textContent = totalScores[currentPlayer - 1];
+ checkWinner();
+ if (totalScores[currentPlayer - 1] < 100) {
+ switchPlayer();
+ }
+});
diff --git a/Games/Dice_Game/styles.css b/Games/Dice_Game/styles.css
new file mode 100644
index 0000000000..eaa75ded51
--- /dev/null
+++ b/Games/Dice_Game/styles.css
@@ -0,0 +1,32 @@
+body {
+ font-family: Arial, sans-serif;
+ text-align: center;
+ background-color: #f0f0f0;
+ margin: 0;
+ padding: 0;
+}
+
+.container {
+ margin-top: 50px;
+}
+
+.scores {
+ display: flex;
+ justify-content: space-around;
+ margin-bottom: 20px;
+}
+
+.dice-container {
+ margin: 20px;
+}
+
+img {
+ width: 100px;
+ height: 100px;
+}
+
+.controls {
+ display: flex;
+ justify-content: center;
+ gap: 20px;
+}
diff --git a/Games/Dot_Box_Game/Readme.md b/Games/Dot_Box_Game/Readme.md
new file mode 100644
index 0000000000..c734c970ef
--- /dev/null
+++ b/Games/Dot_Box_Game/Readme.md
@@ -0,0 +1,41 @@
+## Welcome to Dot and Boxes Game
+
+## **Description 📃**
+
+Dot and Boxes is an exciting game built with HTML, CSS, and JavaScript, offering players an immersive gaming experience. This README provides an overview of the game and instructions on how to play.
+
+## **Functionalities 🎮**
+
+- **Engaging Gameplay**: Enjoy hours of fun with addictive gameplay mechanics.
+- **Sleek Design**: Experience a visually stunning game interface designed with CSS.
+- **Interactive Elements**: Dive into interactive elements crafted with JavaScript for dynamic gaming experiences.
+
+## **How to play? 🕹️**
+
+1. **Click alternaltely for each player's chance**: By clicking alternately on the screen, it allows 2 players to play at the same time.
+5. **Who is the winner**: The one who creates most boxes by connecting the dots.
+
+## **Screenshots 📸**
+
+
+**How it appears:**
+
+
+
+**How it appears while playing:**
+
+
+
+
+
+
+
+### Tech Stack:
+
+- Built with HTML, CSS, and JavaScript
+
+### Feedback and Support:
+
+We appreciate any feedback or suggestions you have to improve the game. Feel free to open an issue on GitHub.
+
+Enjoy playing Dot and Boxes! 🎮
diff --git a/Games/Dot_Box_Game/assets/dot_box_game.png b/Games/Dot_Box_Game/assets/dot_box_game.png
new file mode 100644
index 0000000000..5186f21db6
Binary files /dev/null and b/Games/Dot_Box_Game/assets/dot_box_game.png differ
diff --git a/Games/Dot_Box_Game/assets/initial_state.png b/Games/Dot_Box_Game/assets/initial_state.png
new file mode 100644
index 0000000000..481756efb0
Binary files /dev/null and b/Games/Dot_Box_Game/assets/initial_state.png differ
diff --git a/Games/Dot_Box_Game/index.html b/Games/Dot_Box_Game/index.html
new file mode 100644
index 0000000000..6ce6e3ce0e
--- /dev/null
+++ b/Games/Dot_Box_Game/index.html
@@ -0,0 +1,33 @@
+
+Dots and Boxes
+
+
+
+
+
+
+
+
+
+
+
+
+