document.addEventListener('DOMContentLoaded', function() { // Initialize game state let coins = 5000; let currentPrize = 0; let lootBoxes = []; let multipliers = []; // DOM elements const lootBoxTrack = document.getElementById('lootBoxTrack'); const multiplierTrack = document.getElementById('multiplierTrack'); const spinLootBtn = document.getElementById('spinLootBtn'); const spinMultiplierBtn = document.getElementById('spinMultiplierBtn'); const prizeDisplay = document.getElementById('prizeDisplay'); const prizeDetails = document.getElementById('prizeDetails'); const claimBtn = document.getElementById('claimBtn'); const winModal = document.getElementById('winModal'); const modalPrize = document.getElementById('modalPrize'); const modalCloseBtn = document.getElementById('modalCloseBtn'); // Initialize loot boxes function initLootBoxes() { const boxTypes = [ { type: 'common', value: 10, color: 'gray-500' }, { type: 'common', value: 15, color: 'gray-500' }, { type: 'common', value: 20, color: 'gray-500' }, { type: 'rare', value: 30, color: 'blue-500' }, { type: 'rare', value: 40, color: 'blue-500' }, { type: 'epic', value: 60, color: 'purple-500' }, { type: 'epic', value: 80, color: 'purple-500' }, { type: 'legendary', value: 120, color: 'yellow-500' }, { type: 'legendary', value: 150, color: 'yellow-500' }, { type: 'jackpot', value: 300, color: 'orange-500' } ]; // Create enough boxes for smooth scrolling for (let i = 0; i < 30; i++) { const box = boxTypes[i % boxTypes.length]; lootBoxes.push(box); const boxElement = document.createElement('div'); boxElement.className = `loot-box ${box.type} flex-shrink-0 mx-2`; boxElement.innerHTML = `
${box.type === 'common' ? '📦' : box.type === 'rare' ? '🎁' : box.type === 'epic' ? '💎' : box.type === 'legendary' ? '🏆' : '💰'}
${box.value} SC
`; lootBoxTrack.appendChild(boxElement); } } // Initialize multipliers function initMultipliers() { const multiplierValues = [1, 1.25, 1.5, 2, 3, 5, 1, 1.25, 1.5, 2, 3, 5]; // Create enough multipliers for smooth scrolling for (let i = 0; i < 24; i++) { const value = multiplierValues[i % multiplierValues.length]; multipliers.push(value); const chip = document.createElement('div'); chip.className = 'multiplier-chip flex-shrink-0 mx-1'; chip.textContent = `×${value}`; chip.dataset.value = value; multiplierTrack.appendChild(chip); } } // Spin animation function spin(element, items, spinTime, callback) { const startTime = Date.now(); const speed = 0.5; // pixels per millisecond function animate() { const elapsed = Date.now() - startTime; const progress = Math.min(elapsed / spinTime, 1); // Ease-out function const easeProgress = 1 - Math.pow(1 - progress, 3); // Calculate distance (more at start, less at end) const distance = speed * spinTime * (1 - easeProgress * 0.9); element.style.transform = `translateX(-${distance}px)`; if (progress < 1) { requestAnimationFrame(animate); } else { // Snap to nearest item const itemWidth = items[0].offsetWidth + 8; // 8px for margin const totalDistance = parseInt(element.style.transform.replace('translateX(-', '').replace('px)', '')); const itemIndex = Math.round(totalDistance / itemWidth) % items.length; const snapDistance = itemIndex * itemWidth; element.style.transition = 'transform 0.5s ease-out'; element.style.transform = `translateX(-${snapDistance}px)`; setTimeout(() => { element.style.transition = ''; if (callback) callback(itemIndex); }, 500); } } animate(); } // Spin loot box spinLootBtn.addEventListener('click', function() { if (coins < 10) { alert('Not enough coins!'); return; } coins -= 10; updateCoinDisplay(); spinLootBtn.disabled = true; spin(lootBoxTrack, lootBoxTrack.children, 3000, function(index) { const selectedBox = lootBoxes[index % lootBoxes.length]; currentPrize = selectedBox.value; prizeDisplay.textContent = currentPrize; prizeDetails.innerHTML = ` You got a ${selectedBox.type} loot box! `; spinLootBtn.disabled = false; claimBtn.classList.remove('hidden'); }); }); // Spin multiplier spinMultiplierBtn.addEventListener('click', function() { if (coins < 5) { alert('Not enough coins!'); return; } if (currentPrize === 0) { alert('Spin a loot box first!'); return; } coins -= 5; updateCoinDisplay(); spinMultiplierBtn.disabled = true; spin(multiplierTrack, multiplierTrack.children, 2500, function(index) { const selectedMultiplier = multipliers[index % multipliers.length]; const totalPrize = Math.round(currentPrize * selectedMultiplier); prizeDisplay.textContent = totalPrize; prizeDetails.innerHTML += `
Multiplier: ×${selectedMultiplier}
`; currentPrize = totalPrize; spinMultiplierBtn.disabled = false; // Show win modal for big prizes if (totalPrize >= 100) { modalPrize.textContent = totalPrize; winModal.classList.remove('hidden'); prizeDisplay.classList.add('winner-animation'); } }); }); // Claim prize claimBtn.addEventListener('click', function() { coins += currentPrize; currentPrize = 0; updateCoinDisplay(); prizeDisplay.textContent = '0'; prizeDetails.textContent = 'Spin to win amazing prizes!'; prizeDisplay.classList.remove('winner-animation'); claimBtn.classList.add('hidden'); }); // Close modal modalCloseBtn.addEventListener('click', function() { winModal.classList.add('hidden'); }); // Update coin display function updateCoinDisplay() { document.querySelector('.bg-gray-700 span').textContent = coins.toLocaleString(); } // Initialize the game initLootBoxes(); initMultipliers(); });