/* * TP6: Roulette * Author: SIMAILA Djalim * Date: 2025-01-27 * Description: A roulette game * Version: 1.0 */ /* * The amount of money of a bet * @type {Number} * @example 1 */ var bet = 1; var currentSpin = 0; /* * Array of the n next spins * @type {Array} * @example [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] */ var spinArray; var potentialQualifyingNumbers = []; /* * Object containing the qualifying numbers , and the remaining spins in which they are played * @type {Object} * @example {10: 3, 15: 5, 20: 1} */ var qualifyingNumbers = {}; /** * Array containing the wining numbers , and the winning amount * @type {Array} * @example [[10, 5], [15, 10], [20, 15]] */ var winingNumbers = []; /** * Array containing the qualifying number that didn't win * @type {Array} * @example [10,15,20] */ var losingNumbers = []; var spinInterval; function lowerBound() { return currentSpin - 30 < 0 ? 0 : currentSpin - 30; } /* * Function to generate a random array of numbers * @param len: length of the number array * @returns {Array} numberArray */ function generate_random_array(len = 30) { let numberArray = []; for (let i = 0; i < len; i++) numberArray.push(Math.floor(Math.random() * 37)); return numberArray; } /* * Function to check if a number is qualifying * @param num: number to check * @returns {Boolean} true if the number is qualifying, false otherwise */ function qualifyingPreprocess() { let currentNumber = spinArray[currentSpin]; if (!spinArray.slice(lowerBound(), currentSpin).includes(currentNumber)) { potentialQualifyingNumbers.push({ number: currentNumber, firstOccurence: currentSpin, secondOccurence: null, thirdOccurence: null, }); } potentialQualifyingNumbers = potentialQualifyingNumbers.filter( (potientialNumber) => currentSpin - potientialNumber.firstOccurence < 18, ); let qualifiedIndexes = new Set(); potentialQualifyingNumbers.forEach((potentialNumber, index) => { if (potentialNumber.number == currentNumber) { if (potentialNumber.firstOccurence == currentSpin) return; if (potentialNumber.secondOccurence == null) potentialNumber.secondOccurence = currentSpin; else if (potentialNumber.thirdOccurence == null) potentialNumber.thirdOccurence = currentSpin; } if ( potentialNumber.secondOccurence != null && potentialNumber.thirdOccurence != null ) { let space1 = potentialNumber.secondOccurence - potentialNumber.firstOccurence; let space2 = potentialNumber.thirdOccurence - potentialNumber.secondOccurence; if (Math.abs(space2 - space1) <= 6) { if ( spinArray[currentSpin] !== spinArray[currentSpin - 1] && spinArray[currentSpin] !== spinArray[currentSpin - 2] ) { qualifyingNumbers[potentialNumber.number] = 9; qualifiedIndexes.add(index); } } } }); potentialQualifyingNumbers = potentialQualifyingNumbers.filter( (_, index) => !qualifiedIndexes.has(index), ); } function setupGame() { spinArray = generate_random_array( document.getElementById("maxSpinInput").value, ); document.getElementById("setupGame").classList.add("hidden"); spinInterval = setInterval(() => processSpin(), 100); } function processSpin() { // Check if the number is qualifying qualifyingPreprocess(); for (let number in qualifyingNumbers) { // if the number is a wining number if (number == currentSpin) { // Add the wining number to the wining numbers Array winingNumbers.push([ number, 36 * bet - (9 - qualifyingNumbers[number]), // loss ]); } qualifyingNumbers[number] -= 1; if (qualifyingNumbers[number] == 0) { losingNumbers.push(number); delete qualifyingNumbers[number]; } } console.log(potentialQualifyingNumbers); console.log(qualifyingNumbers); console.log(winingNumbers); console.log(losingNumbers); currentSpin += 1; showLastSpins(); } function showLastSpins() { document.getElementById("lastSpins").replaceChildren(); spinArray.slice(lowerBound(), currentSpin).forEach((number) => { let numberDiv = document.createElement("div"); numberDiv.classList.add("spinNumber"); numberDiv.textContent = number; document.getElementById("lastSpins").appendChild(numberDiv); }); }