From ff9a6ee995d44a74f84cc82e4e7b4f4eb5db4736 Mon Sep 17 00:00:00 2001
From: Drotum <1abhyudayasingh@gmail.com>
Date: Thu, 16 Jan 2025 22:34:07 +0530
Subject: [PATCH 1/2] Added Fibonacci Game to the repository
---
FibonacciGame/Readme.md | 47 +++++
FibonacciGame/game.js | 275 +++++++++++++++++++++++++++++
FibonacciGame/index.html | 57 ++++++
FibonacciGame/sounds/correct.mp3 | Bin 0 -> 18720 bytes
FibonacciGame/sounds/incorrect.mp3 | Bin 0 -> 7929 bytes
FibonacciGame/sounds/levelup.mp3 | Bin 0 -> 34560 bytes
FibonacciGame/style.css | 190 ++++++++++++++++++++
7 files changed, 569 insertions(+)
create mode 100644 FibonacciGame/Readme.md
create mode 100644 FibonacciGame/game.js
create mode 100644 FibonacciGame/index.html
create mode 100644 FibonacciGame/sounds/correct.mp3
create mode 100644 FibonacciGame/sounds/incorrect.mp3
create mode 100644 FibonacciGame/sounds/levelup.mp3
create mode 100644 FibonacciGame/style.css
diff --git a/FibonacciGame/Readme.md b/FibonacciGame/Readme.md
new file mode 100644
index 000000000..e279323ec
--- /dev/null
+++ b/FibonacciGame/Readme.md
@@ -0,0 +1,47 @@
+# Fibonacci Game
+
+Welcome to the **Fibonacci Game**, an interactive and fun way to learn about the Fibonacci sequence! This game is designed to teach players the fundamentals of the Fibonacci sequence through engaging gameplay, suitable for all ages.
+
+## Table of Contents
+- [About the Game](#about-the-game)
+- [How to Play](#how-to-play)
+- [Features](#features)
+- [Installation](#installation)
+- [Technologies Used](#technologies-used)
+- [Contributing](#contributing)
+- [License](#license)
+
+## About the Game
+The Fibonacci sequence is a series of numbers where each number is the sum of the two preceding ones, starting from 0 and 1. This game introduces players to the sequence through:
+- Interactive puzzles
+- Challenges that involve identifying or calculating Fibonacci numbers
+- Levels that progressively increase in difficulty
+
+The goal is to make learning math concepts both fun and intuitive!
+
+## How to Play
+1. **Start the Game**: Launch the game and choose a difficulty level to begin.
+2. **Understand the Task**: Click on the Fibonacci numbers in the correct order as they appear on the screen to advance to the next level.
+3. **Solve the Challenge**: Use your knowledge of the Fibonacci sequence to select the correct numbers before time runs out.
+4. **Progress**: Advance to higher levels as you successfully complete each challenge.
+5. **Restart Anytime**: Use the "Restart Game" button to reset and start over.
+
+## Features
+- **Educational Gameplay**: Learn the Fibonacci sequence through practical and engaging challenges.
+- **Levels and Rewards**: Progress through levels with increasing complexity.
+- **User-Friendly Interface**: Simple and intuitive design for players of all ages.
+- **Difficulty Settings**: Choose from Easy, Medium, or Hard difficulty levels.
+- **Timer and Score Tracking**: Track your performance with a timer and score system.
+
+## Technologies Used
+- **Frontend**: HTML, CSS, JavaScript
+- **Framework**: React
+- **Other Tools**: Node.js
+
+
+
+---
+
+Enjoy learning and mastering the Fibonacci sequence with our game! If you have any questions or feedback, feel free to reach out.
+
+Happy Gaming! 🎮
diff --git a/FibonacciGame/game.js b/FibonacciGame/game.js
new file mode 100644
index 000000000..f497b9de2
--- /dev/null
+++ b/FibonacciGame/game.js
@@ -0,0 +1,275 @@
+// Memoization for Fibonacci calculation
+const fibCache = {};
+function fibonacci(n) {
+ if (n <= 1) return n;
+ if (fibCache[n]) return fibCache[n];
+ fibCache[n] = fibonacci(n - 1) + fibonacci(n - 2);
+ return fibCache[n];
+}
+
+let level = 1;
+let currentSequence = [];
+let clickedNumbers = [];
+let correctFibIndex = 0;
+let gameActive = true;
+let timerInterval;
+let timeLeft = 60; // Default time in seconds
+let gamePaused = false;
+const numbers = [];
+let startFromIndex = 5; // Will be randomized per level
+
+// Difficulty settings
+const difficultySettings = {
+ easy: { distractors: 5, time: 90 },
+ medium: { distractors: 10, time: 60 },
+ hard: { distractors: 20, time: 30 }
+};
+
+// HTML Elements
+const gameBoard = document.getElementById('gameBoard');
+const levelDisplay = document.getElementById('levelDisplay');
+const messageDisplay = document.getElementById('message');
+const correctSequenceDisplay = document.getElementById('correctSequence');
+const timerDisplay = document.getElementById('timerDisplay');
+const pauseButton = document.getElementById('pauseButton');
+const difficultySelect = document.getElementById('difficulty');
+const leaderboardList = document.getElementById('leaderboardList');
+const restartButton = document.getElementById('restartButton');
+
+// Sound Elements
+const correctSound = document.getElementById('correctSound');
+const incorrectSound = document.getElementById('incorrectSound');
+const levelUpSound = document.getElementById('levelUpSound');
+
+// Leaderboard
+let leaderboard = JSON.parse(localStorage.getItem('fibLeaderboard')) || [];
+
+// Function to update the leaderboard display
+function updateLeaderboard() {
+ leaderboardList.innerHTML = '';
+ leaderboard.forEach(entry => {
+ const li = document.createElement('li');
+ li.textContent = `Level ${entry.level} - Time: ${entry.time}s`;
+ leaderboardList.appendChild(li);
+ });
+}
+
+// Function to add a new score to the leaderboard
+function addToLeaderboard(levelAchieved, timeTaken) {
+ leaderboard.push({ level: levelAchieved, time: timeTaken });
+ leaderboard.sort((a, b) => {
+ if (b.level === a.level) return a.time - b.time;
+ return b.level - a.level;
+ });
+ leaderboard = leaderboard.slice(0, 10);
+ localStorage.setItem('fibLeaderboard', JSON.stringify(leaderboard));
+ updateLeaderboard();
+}
+
+// Function to generate a Fibonacci sequence for the level, starting from a specified number
+function generateFibonacciSequence(level, startFromIndex) {
+ const sequence = [];
+ for (let i = startFromIndex; i < startFromIndex + level + 5; i++) {
+ sequence.push(fibonacci(i));
+ }
+ return sequence;
+}
+
+// Function to generate non-Fibonacci numbers close to the Fibonacci sequence
+function generateNonFibonacciNumbers(count, fibNumbers) {
+ const nonFib = [];
+ while (nonFib.length < count) {
+ const randomFib = fibNumbers[Math.floor(Math.random() * fibNumbers.length)];
+ const offset = Math.floor(Math.random() * 10) - 5; // Random offset close to Fibonacci numbers
+ const candidate = randomFib + offset;
+ if (!fibNumbers.includes(candidate) && candidate > 0 && !nonFib.includes(candidate)) {
+ nonFib.push(candidate);
+ }
+ }
+ return nonFib;
+}
+
+// Function to create number elements (static and non-overlapping)
+function createNumberElement(number, isFib = true, usedPositions) {
+ const numberElement = document.createElement('div');
+ numberElement.classList.add('number');
+ numberElement.textContent = number;
+
+ const size = isFib ? (50 + Math.random() * 50) : (30 + Math.random() * 30);
+ numberElement.style.width = `${size}px`;
+ numberElement.style.height = numberElement.style.width;
+
+ let validPosition = false;
+ let x, y;
+
+ // Find a position that doesn't overlap with others
+ while (!validPosition) {
+ x = Math.random() * 80; // 80% width of the game board
+ y = Math.random() * 80; // 80% height of the game board
+ validPosition = !usedPositions.some(pos => {
+ const dx = pos.x - x;
+ const dy = pos.y - y;
+ return Math.sqrt(dx * dx + dy * dy) < 10; // Minimum distance of 10% to avoid overlap
+ });
+ }
+
+ numberElement.style.position = 'absolute';
+ numberElement.style.left = `${x}%`;
+ numberElement.style.top = `${y}%`;
+ usedPositions.push({ x, y }); // Save the position
+
+ return numberElement;
+}
+
+// Function to display Fibonacci and distractor numbers
+function displayNumbers() {
+ const fibNumbers = currentSequence;
+ const difficulty = difficultySelect.value;
+ const distractors = generateNonFibonacciNumbers(difficultySettings[difficulty].distractors, fibNumbers);
+ const usedPositions = [];
+
+ // Clear any existing numbers
+ gameBoard.innerHTML = '';
+
+ // Generate Fibonacci numbers
+ fibNumbers.forEach((number) => {
+ const element = createNumberElement(number, true, usedPositions);
+ element.addEventListener('click', () => handleNumberClick(number, element));
+ gameBoard.appendChild(element);
+ });
+
+ // Generate distractor numbers
+ distractors.forEach((number) => {
+ const element = createNumberElement(number, false, usedPositions);
+ gameBoard.appendChild(element);
+ });
+}
+
+// Handle click on numbers
+function handleNumberClick(number, element) {
+ if (!gameActive) return;
+
+ if (number === currentSequence[correctFibIndex]) {
+ clickedNumbers.push(number);
+ correctFibIndex++;
+ correctSound.currentTime = 0;
+ correctSound.play();
+ correctSequenceDisplay.textContent = `Correct Sequence: ${clickedNumbers.join(', ')}`;
+ gameBoard.removeChild(element);
+
+ if (clickedNumbers.length === currentSequence.length) {
+ gameActive = false;
+ clearInterval(timerInterval);
+ levelUpSound.play();
+ setTimeout(() => nextLevel(), 1000);
+ }
+ } else {
+ incorrectSound.currentTime = 0;
+ incorrectSound.play();
+ messageDisplay.textContent = "Incorrect, try again!";
+ }
+}
+
+// Move to the next level
+function nextLevel() {
+ addToLeaderboard(level, timeLeft);
+ level++;
+ levelDisplay.textContent = `Level: ${level}`;
+ clickedNumbers = [];
+ correctFibIndex = 0;
+ const difficulty = difficultySelect.value;
+ timeLeft = difficultySettings[difficulty].time;
+
+ // Randomize starting Fibonacci numbers for the sequence
+ startFromIndex = Math.floor(Math.random() * 10) + 3; // Randomize between index 3 and 12
+ currentSequence = generateFibonacciSequence(level, startFromIndex);
+
+ gameActive = true;
+ correctSequenceDisplay.textContent = `Correct Sequence: ${currentSequence[0]}, ${currentSequence[1]}`;
+ displayNumbers();
+ resetTimer();
+}
+
+// Timer functions
+function startTimer() {
+ timerDisplay.textContent = `Time: ${timeLeft}s`;
+ timerInterval = setInterval(() => {
+ if (!gameActive || gamePaused) return;
+ timeLeft--;
+ timerDisplay.textContent = `Time: ${timeLeft}s`;
+ if (timeLeft <= 0) {
+ clearInterval(timerInterval);
+ endGame();
+ }
+ }, 1000);
+}
+
+function resetTimer() {
+ clearInterval(timerInterval);
+ startTimer();
+}
+
+// Handle Pause/Resume Button
+pauseButton.addEventListener('click', () => {
+ if (!gameActive) return;
+ if (gamePaused) {
+ gamePaused = false;
+ pauseButton.textContent = "Pause";
+ resetTimer();
+ } else {
+ gamePaused = true;
+ pauseButton.textContent = "Resume";
+ clearInterval(timerInterval);
+ }
+});
+
+// Handle Difficulty Change
+difficultySelect.addEventListener('change', () => {
+ const difficulty = difficultySelect.value;
+ timeLeft = difficultySettings[difficulty].time;
+ if (gameActive && !gamePaused) {
+ resetTimer();
+ }
+});
+
+// Handle game end
+function endGame() {
+ gameActive = false;
+ messageDisplay.textContent = "Time's up! Game Over.";
+ restartButton.style.display = "block"; // Show the restart button
+}
+
+// Handle restart button click
+restartButton.addEventListener('click', () => {
+ restartButton.style.display = "none";
+ startGame(true);
+ updateLeaderboard();
+});
+
+// Start the game
+function startGame(isRestart = false) {
+ // Reset level and other state variables
+ level = 1;
+ const difficulty = difficultySelect.value;
+ timeLeft = difficultySettings[difficulty].time;
+ clickedNumbers = [];
+ correctFibIndex = 0;
+ gameActive = true;
+
+ // Randomize the Fibonacci sequence's start index and generate a new sequence
+ startFromIndex = Math.floor(Math.random() * 10) + 3; // Randomize starting point
+ currentSequence = generateFibonacciSequence(level, startFromIndex);
+
+ correctSequenceDisplay.textContent = `Correct Sequence: ${currentSequence[0]}, ${currentSequence[1]}`;
+ displayNumbers();
+
+ if (isRestart) {
+ resetTimer();
+ }
+
+ if (!isRestart) {
+ addToLeaderboard(level, timeLeft);
+ }
+}
+
+startGame();
diff --git a/FibonacciGame/index.html b/FibonacciGame/index.html
new file mode 100644
index 000000000..6af7fc1c4
--- /dev/null
+++ b/FibonacciGame/index.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+ Fibonacci Click Challenge
+
+
+
+
+
+
Fibonacci Click Challenge
+
Click the Fibonacci numbers in the correct order to advance to the next stage!
+
+
+
Level: 1
+
Time: 60s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Correct Sequence:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FibonacciGame/sounds/correct.mp3 b/FibonacciGame/sounds/correct.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5c82f39bd84f9b28cddf12f573982ee63a2ac1a5
GIT binary patch
literal 18720
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
UY&E(3|Nj@v_0O<%&?AEe0Ah_dy8r+H
literal 0
HcmV?d00001
diff --git a/FibonacciGame/sounds/incorrect.mp3 b/FibonacciGame/sounds/incorrect.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5ece8fd768d1d56ff27fa43b0af811ad1febea54
GIT binary patch
literal 7929
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