|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>Neon Math Explosion Quiz</title> |
|
<script src="https://cdn.tailwindcss.com"></script> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
<style> |
|
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap'); |
|
|
|
body { |
|
font-family: 'Press Start 2P', cursive; |
|
background-color: #0a0a1a; |
|
color: #fff; |
|
overflow: hidden; |
|
} |
|
|
|
.neon-text { |
|
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #ff00de, 0 0 30px #ff00de; |
|
color: white; |
|
} |
|
|
|
.neon-box { |
|
box-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #00f7ff, 0 0 30px #00f7ff; |
|
border: 2px solid #00f7ff; |
|
background-color: rgba(0, 0, 20, 0.7); |
|
} |
|
|
|
.neon-button { |
|
transition: all 0.3s; |
|
box-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #00ff88, 0 0 30px #00ff88; |
|
border: 2px solid #00ff88; |
|
background-color: rgba(0, 20, 10, 0.7); |
|
} |
|
|
|
.neon-button:hover { |
|
transform: scale(1.05); |
|
box-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #00ff88, 0 0 40px #00ff88; |
|
} |
|
|
|
.option { |
|
transition: all 0.3s; |
|
box-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #ffcc00, 0 0 30px #ffcc00; |
|
border: 2px solid #ffcc00; |
|
background-color: rgba(20, 15, 0, 0.7); |
|
} |
|
|
|
.option:hover { |
|
transform: scale(1.05); |
|
box-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #ffcc00, 0 0 40px #ffcc00; |
|
} |
|
|
|
.correct { |
|
animation: correct 1s; |
|
box-shadow: 0 0 20px #00ff88, 0 0 40px #00ff88; |
|
} |
|
|
|
.wrong { |
|
animation: wrong 1s; |
|
box-shadow: 0 0 20px #ff0000, 0 0 40px #ff0000; |
|
} |
|
|
|
@keyframes correct { |
|
0% { transform: scale(1); } |
|
50% { transform: scale(1.1); } |
|
100% { transform: scale(1); } |
|
} |
|
|
|
@keyframes wrong { |
|
0% { transform: scale(1); } |
|
50% { transform: scale(0.9); } |
|
100% { transform: scale(1); } |
|
} |
|
|
|
.explosion { |
|
position: fixed; |
|
top: 0; |
|
left: 0; |
|
width: 100%; |
|
height: 100%; |
|
background-color: #ff0000; |
|
opacity: 0; |
|
z-index: 100; |
|
pointer-events: none; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
font-size: 5rem; |
|
color: white; |
|
text-shadow: 0 0 10px black; |
|
animation: explosion 2s ease-out; |
|
} |
|
|
|
@keyframes explosion { |
|
0% { opacity: 0; transform: scale(0.1); } |
|
20% { opacity: 1; } |
|
100% { opacity: 0; transform: scale(2); } |
|
} |
|
|
|
.particle { |
|
position: absolute; |
|
background-color: #ff9900; |
|
border-radius: 50%; |
|
pointer-events: none; |
|
} |
|
|
|
.score-display { |
|
font-size: 2rem; |
|
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #00ff88, 0 0 30px #00ff88; |
|
} |
|
|
|
.question { |
|
min-height: 100px; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
} |
|
</style> |
|
</head> |
|
<body class="min-h-screen flex flex-col items-center justify-center p-4"> |
|
<div id="app" class="w-full max-w-2xl"> |
|
<h1 class="text-4xl md:text-5xl text-center mb-8 neon-text">NEON MATH EXPLOSION</h1> |
|
|
|
<div class="neon-box rounded-lg p-6 mb-8"> |
|
<div class="flex justify-between items-center mb-6"> |
|
<div class="score-display">Score: <span id="score">0</span></div> |
|
<div class="text-xl">Question: <span id="question-number">1</span>/10</div> |
|
</div> |
|
|
|
<div class="question text-2xl mb-8 text-center" id="question"> |
|
Loading question... |
|
</div> |
|
|
|
<div class="grid grid-cols-2 gap-4 mb-6" id="options"> |
|
|
|
</div> |
|
|
|
<div class="flex justify-center"> |
|
<button id="next-btn" class="neon-button py-3 px-6 rounded-lg text-lg hidden"> |
|
NEXT QUESTION <i class="fas fa-arrow-right ml-2"></i> |
|
</button> |
|
</div> |
|
</div> |
|
|
|
<div id="start-screen" class="neon-box rounded-lg p-8 text-center"> |
|
<h2 class="text-2xl md:text-3xl mb-6 neon-text">READY FOR THE CHALLENGE?</h2> |
|
<p class="mb-8">Answer 10 math questions correctly... or face explosive consequences!</p> |
|
<button id="start-btn" class="neon-button py-3 px-8 rounded-lg text-xl"> |
|
START QUIZ <i class="fas fa-bolt ml-2"></i> |
|
</button> |
|
</div> |
|
</div> |
|
|
|
<div id="explosion" class="explosion hidden"> |
|
BOOM! |
|
</div> |
|
|
|
<div id="game-over" class="neon-box rounded-lg p-8 text-center hidden absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 z-50 w-4/5 max-w-md"> |
|
<h2 class="text-3xl mb-6 neon-text">GAME OVER</h2> |
|
<p class="mb-4 text-xl">Your final score:</p> |
|
<p class="text-4xl mb-8 score-display" id="final-score">0</p> |
|
<button id="restart-btn" class="neon-button py-3 px-8 rounded-lg text-xl"> |
|
PLAY AGAIN <i class="fas fa-redo ml-2"></i> |
|
</button> |
|
</div> |
|
|
|
<script> |
|
document.addEventListener('DOMContentLoaded', () => { |
|
|
|
const startScreen = document.getElementById('start-screen'); |
|
const app = document.getElementById('app'); |
|
const questionElement = document.getElementById('question'); |
|
const optionsContainer = document.getElementById('options'); |
|
const nextButton = document.getElementById('next-btn'); |
|
const scoreElement = document.getElementById('score'); |
|
const questionNumberElement = document.getElementById('question-number'); |
|
const startButton = document.getElementById('start-btn'); |
|
const explosionElement = document.getElementById('explosion'); |
|
const gameOverScreen = document.getElementById('game-over'); |
|
const finalScoreElement = document.getElementById('final-score'); |
|
const restartButton = document.getElementById('restart-btn'); |
|
|
|
|
|
let currentQuestionIndex = 0; |
|
let score = 0; |
|
let questions = []; |
|
let selectedAnswer = null; |
|
let quizActive = false; |
|
|
|
|
|
function generateQuestions() { |
|
const operations = ['+', '-', '*', '/']; |
|
questions = []; |
|
|
|
for (let i = 0; i < 10; i++) { |
|
const operation = operations[Math.floor(Math.random() * operations.length)]; |
|
let num1, num2, answer; |
|
|
|
switch(operation) { |
|
case '+': |
|
num1 = Math.floor(Math.random() * 50) + 10; |
|
num2 = Math.floor(Math.random() * 50) + 10; |
|
answer = num1 + num2; |
|
break; |
|
case '-': |
|
num1 = Math.floor(Math.random() * 50) + 30; |
|
num2 = Math.floor(Math.random() * num1) + 1; |
|
answer = num1 - num2; |
|
break; |
|
case '*': |
|
num1 = Math.floor(Math.random() * 12) + 1; |
|
num2 = Math.floor(Math.random() * 12) + 1; |
|
answer = num1 * num2; |
|
break; |
|
case '/': |
|
num2 = Math.floor(Math.random() * 10) + 1; |
|
answer = Math.floor(Math.random() * 10) + 1; |
|
num1 = num2 * answer; |
|
break; |
|
} |
|
|
|
|
|
let options = [answer]; |
|
while (options.length < 4) { |
|
let wrongAnswer; |
|
if (operation === '/') { |
|
wrongAnswer = Math.floor(Math.random() * 15) + 1; |
|
} else { |
|
wrongAnswer = answer + (Math.floor(Math.random() * 10) - 5); |
|
} |
|
|
|
if (wrongAnswer !== answer && !options.includes(wrongAnswer) && wrongAnswer > 0) { |
|
options.push(wrongAnswer); |
|
} |
|
} |
|
|
|
|
|
options = options.sort(() => Math.random() - 0.5); |
|
|
|
questions.push({ |
|
question: `${num1} ${operation} ${num2} = ?`, |
|
answer: answer, |
|
options: options |
|
}); |
|
} |
|
} |
|
|
|
|
|
function startQuiz() { |
|
generateQuestions(); |
|
currentQuestionIndex = 0; |
|
score = 0; |
|
quizActive = true; |
|
scoreElement.textContent = score; |
|
questionNumberElement.textContent = 1; |
|
startScreen.classList.add('hidden'); |
|
app.classList.remove('hidden'); |
|
showQuestion(); |
|
} |
|
|
|
|
|
function showQuestion() { |
|
const currentQuestion = questions[currentQuestionIndex]; |
|
questionElement.textContent = currentQuestion.question; |
|
|
|
optionsContainer.innerHTML = ''; |
|
currentQuestion.options.forEach((option, index) => { |
|
const optionElement = document.createElement('div'); |
|
optionElement.className = 'option py-4 px-2 rounded-lg text-center cursor-pointer text-xl'; |
|
optionElement.textContent = option; |
|
optionElement.dataset.option = option; |
|
optionElement.addEventListener('click', selectAnswer); |
|
optionsContainer.appendChild(optionElement); |
|
}); |
|
|
|
nextButton.classList.add('hidden'); |
|
selectedAnswer = null; |
|
} |
|
|
|
|
|
function selectAnswer(e) { |
|
if (!quizActive || selectedAnswer !== null) return; |
|
|
|
const selectedOption = e.target; |
|
const currentQuestion = questions[currentQuestionIndex]; |
|
selectedAnswer = selectedOption.dataset.option; |
|
|
|
|
|
const options = document.querySelectorAll('.option'); |
|
options.forEach(option => { |
|
option.style.pointerEvents = 'none'; |
|
if (option.dataset.option == currentQuestion.answer) { |
|
option.classList.add('correct'); |
|
} |
|
}); |
|
|
|
|
|
if (selectedAnswer == currentQuestion.answer) { |
|
selectedOption.classList.add('correct'); |
|
score += 10; |
|
scoreElement.textContent = score; |
|
} else { |
|
selectedOption.classList.add('wrong'); |
|
createExplosion(); |
|
} |
|
|
|
nextButton.classList.remove('hidden'); |
|
} |
|
|
|
|
|
function nextQuestion() { |
|
currentQuestionIndex++; |
|
questionNumberElement.textContent = currentQuestionIndex + 1; |
|
|
|
if (currentQuestionIndex < questions.length) { |
|
showQuestion(); |
|
} else { |
|
endQuiz(); |
|
} |
|
} |
|
|
|
|
|
function createExplosion() { |
|
explosionElement.classList.remove('hidden'); |
|
|
|
|
|
for (let i = 0; i < 50; i++) { |
|
const particle = document.createElement('div'); |
|
particle.className = 'particle'; |
|
const size = Math.random() * 20 + 5; |
|
particle.style.width = `${size}px`; |
|
particle.style.height = `${size}px`; |
|
particle.style.left = `${Math.random() * 100}%`; |
|
particle.style.top = `${Math.random() * 100}%`; |
|
document.body.appendChild(particle); |
|
|
|
|
|
const angle = Math.random() * Math.PI * 2; |
|
const distance = Math.random() * 300 + 100; |
|
const duration = Math.random() * 2 + 1; |
|
|
|
particle.animate([ |
|
{ transform: 'translate(0, 0)', opacity: 1 }, |
|
{ transform: `translate(${Math.cos(angle) * distance}px, ${Math.sin(angle) * distance}px)`, opacity: 0 } |
|
], { |
|
duration: duration * 1000, |
|
easing: 'cubic-bezier(0.4, 0, 0.2, 1)' |
|
}); |
|
|
|
|
|
setTimeout(() => { |
|
particle.remove(); |
|
}, duration * 1000); |
|
} |
|
|
|
|
|
setTimeout(() => { |
|
explosionElement.classList.add('hidden'); |
|
}, 2000); |
|
} |
|
|
|
|
|
function endQuiz() { |
|
quizActive = false; |
|
finalScoreElement.textContent = score; |
|
gameOverScreen.classList.remove('hidden'); |
|
} |
|
|
|
|
|
function restartQuiz() { |
|
gameOverScreen.classList.add('hidden'); |
|
startQuiz(); |
|
} |
|
|
|
|
|
startButton.addEventListener('click', startQuiz); |
|
nextButton.addEventListener('click', nextQuestion); |
|
restartButton.addEventListener('click', restartQuiz); |
|
}); |
|
</script> |
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - <a href="https://enzostvs-deepsite.hf.space?remix=ghost613/math-quiz" style="color: #fff;text-decoration: underline;" target="_blank" >🧬 Remix</a></p></body> |
|
</html> |