Test de Nivel de Español

Test de Nivel de Inglés

body {
font-family: ‘Arial’, sans-serif;
line-height: 1.6;
max-width: 100%;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
color: #333;
}

.container {
background-color: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

h1, h2, h3 {
color: #2c3e50;
text-align: center;
}

.intro {
background-color: #f8f9fa;
padding: 15px;
border-radius: 5px;
margin-bottom: 20px;
border-left: 4px solid #3498db;
}

#start-btn, #next-btn, #restart-btn, #previous-btn {
background-color: #3498db;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
margin: 10px 5px;
font-size: 16px;
transition: background-color 0.3s;
}

#start-btn:hover, #next-btn:hover, #restart-btn:hover, #previous-btn:hover {
background-color: #2980b9;
}

#restart-btn {
background-color: #2ecc71;
}

#restart-btn:hover {
background-color: #27ae60;
}

#previous-btn {
background-color: #95a5a6;
}

#previous-btn:hover {
background-color: #7f8c8d;
}

#timer {
text-align: center;
font-size: 20px;
margin: 10px 0;
font-weight: bold;
color: #e74c3c;
}

.question-container {
display: none;
padding: 15px;
background-color: #fff;
border-radius: 5px;
margin-bottom: 10px;
border-left: 4px solid #3498db;
}

.options {
margin-top: 15px;
}

.option {
display: block;
padding: 10px;
margin: 5px 0;
background-color: #f1f1f1;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
}

.option:hover {
background-color: #e6e6e6;
}

.option.selected {
background-color: #3498db;
color: white;
}

.option.correct {
background-color: #2ecc71;
color: white;
}

.option.incorrect {
background-color: #e74c3c;
color: white;
}

.feedback {
margin-top: 20px;
padding: 15px;
border-radius: 5px;
text-align: center;
font-weight: bold;
}

.level-description {
margin-top: 20px;
padding: 15px;
background-color: #f8f9fa;
border-radius: 5px;
border-left: 4px solid #2ecc71;
}

.progress-container {
width: 100%;
height: 20px;
background-color: #f1f1f1;
border-radius: 10px;
margin: 20px 0;
}

.progress-bar {
height: 100%;
background-color: #3498db;
border-radius: 10px;
width: 0%;
transition: width 0.3s;
}

.btn-container {
display: flex;
justify-content: space-between;
margin-top: 20px;
}

.hidden {
display: none;
}

#result-container {
display: none;
text-align: center;
padding: 20px;
background-color: #f8f9fa;
border-radius: 5px;
margin-top: 20px;
border: 2px solid #2ecc71;
}

#level-badge {
font-size: 60px;
font-weight: bold;
color: #2c3e50;
margin: 20px 0;
}

.firework {
position: absolute;
width: 5px;
height: 5px;
border-radius: 50%;
box-shadow: 0 0 10px 5px rgba(255, 255, 255, 0.8);
animation: firework 1s ease-out;
animation-fill-mode: forwards;
}

@keyframes firework {
0% {
transform: translate(0, 0);
opacity: 1;
width: 5px;
height: 5px;
}
100% {
transform: translate(var(–x-move), var(–y-move));
opacity: 0;
width: 2px;
height: 2px;
}
}

Bienvenido al Test de Nivel de Inglés

Este test te permitirá determinar tu nivel de inglés según el Marco Común Europeo de Referencia para las Lenguas (MCER), desde A1 hasta C2.

Instrucciones:

  • El test contiene aproximadamente 75 preguntas de dificultad progresiva
  • Tienes 45 segundos para responder a cada pregunta
  • La duración total del test es de 5 a 20 minutos según tu nivel
  • El test se detendrá automáticamente una vez que se identifique tu nivel
  • Puedes reiniciar el test en cualquier momento

¡Buena suerte!

¡Felicitaciones!

Has completado el test de nivel de inglés.

Tu nivel de inglés es:

// Definición de las preguntas por nivel
const questions = [
// A1 Questions (1-15)
{
level: “A1”,
question: “¿Cómo te llamas?”,
options: [“Me llamo Juan.”, “Yo Juan.”, “Juan soy.”, “Llamo Juan.”],
answer: 0
},
{
level: “A1”,
question: “Buenos días, ¿_____ estás?”,
options: [“qué”, “cómo”, “dónde”, “quién”],
answer: 1
},
{
level: “A1”,
question: “Hay _____ libro sobre la mesa.”,
options: [“un”, “una”, “unos”, “el”],
answer: 0
},
{
level: “A1”,
question: “Me gusta _____ café.”,
options: [“el”, “la”, “un”, “una”],
answer: 0
},
{
level: “A1”,
question: “Nosotros _____ estudiantes.”,
options: [“somos”, “son”, “es”, “sois”],
answer: 0
},
{
level: “A1”,
question: “¿Cuáles son los colores de la bandera española?”,
options: [“Rojo y amarillo”, “Rojo, amarillo y verde”, “Rojo, amarillo y azul”, “Amarillo, rojo y blanco”],
answer: 0
},
{
level: “A1”,
question: “Yo _____ pan.”,
options: [“como”, “comes”, “coméis”, “comen”],
answer: 0
},
{
level: “A1”,
question: “Ella _____ española.”,
options: [“eres”, “es”, “sois”, “son”],
answer: 1
},
{
level: “A1”,
question: “Nosotros _____ al cine ayer.”,
options: [“vamos”, “iremos”, “fuimos”, “íbamos”],
answer: 2
},
{
level: “A1”,
question: “Yo _____ levantarme a las 7 todos los días.”,
options: [“debo”, “deber”, “debe”, “debemos”],
answer: 0
},
{
level: “A1”,
question: “¿_____ vives?”,
options: [“Dónde”, “Quién”, “Qué”, “Cómo”],
answer: 0
},
{
level: “A1”,
question: “Hoy es _____ marzo.”,
options: [“a”, “en”, “de”, “el”],
answer: 2
},
{
level: “A1”,
question: “Mi madre es la hermana de mi _____.”,
options: [“tía”, “prima”, “sobrina”, “hija”],
answer: 0
},
{
level: “A1”,
question: “Quiero _____ agua, por favor.”,
options: [“un”, “una”, “la”, “el”],
answer: 0
},
{
level: “A1”,
question: “¿_____ te gusta hacer en tu tiempo libre?”,
options: [“Qué”, “Cómo”, “Por qué”, “Cuándo”],
answer: 0
},

// A2 Questions (16-30)
{
level: “A2”,
question: “Si tuviera tiempo, _____ al cine.”,
options: [“voy”, “iría”, “iré”, “iba”],
answer: 1
},
{
level: “A2”,
question: “Ella _____ en Madrid desde hace dos años.”,
options: [“vive”, “vivía”, “ha vivido”, “vivirá”],
answer: 0
},
{
level: “A2”,
question: “No puedo salir _____ está lloviendo.”,
options: [“porque”, “sin embargo”, “pero”, “ya que”],
answer: 0
},
{
level: “A2”,
question: “¿Has _____ esta película?”,
options: [“visto”, “ver”, “viendo”, “ves”],
answer: 0
},
{
level: “A2”,
question: “Nosotros _____ cenar en el restaurante mañana por la noche.”,
options: [“vamos a”, “iremos a”, “tenemos”, “somos”],
answer: 0
},
{
level: “A2”,
question: “Busco _____ apartamento para alquilar.”,
options: [“un”, “el”, “de”, “al”],
answer: 0
},
{
level: “A2”,
question: “Ellos se _____ la mano.”,
options: [“dieron”, “daban”, “dan”, “darán”],
answer: 0
},
{
level: “A2”,
question: “¿_____ tiempo se necesita para ir al aeropuerto?”,
options: [“Cuánto”, “Cómo”, “Cuándo”, “Qué”],
answer: 0
},
{
level: “A2”,
question: “Me gustaría _____ temprano mañana por la mañana.”,
options: [“levantarme”, “me levanto”, “me levantaba”, “levantar”],
answer: 0
},
{
level: “A2”,
question: “Ayer, nosotros _____ al restaurante.”,
options: [“fuimos”, “vamos”, “iremos”, “íbamos”],
answer: 0
},
{
level: “A2”,
question: “Ella no _____ entendido la pregunta.”,
options: [“ha”, “había”, “habrá”, “hubiera”],
answer: 0
},
{
level: “A2”,
question: “Este es el coche _____ compré ayer.”,
options: [“que”, “quien”, “cuyo”, “donde”],
answer: 0
},
{
level: “A2”,
question: “¿Puedes decirme _____ hiciste eso?”,
options: [“por qué”, “cómo”, “cuándo”, “dónde”],
answer: 0
},
{
level: “A2”,
question: “No me gusta esta camisa, prefiero _____.”,
options: [“ésta”, “éste”, “éstos”, “éstas”],
answer: 0
},
{
level: “A2”,
question: “¿_____ ir a la estación, por favor?”,
options: [“Para”, “Cómo”, “Cuándo”, “Dónde”],
answer: 1
},

// B1 Questions (31-45)
{
level: “B1”,
question: “Si _____ más dinero, compraría un coche nuevo.”,
options: [“tendría”, “tuviera”, “tengo”, “tendré”],
answer: 1
},
{
level: “B1”,
question: “Dudo que él _____ a tiempo.”,
options: [“es”, “será”, “sea”, “sería”],
answer: 2
},
{
level: “B1”,
question: “Es la película _____ todo el mundo habla.”,
options: [“que”, “quien”, “de la que”, “cuya”],
answer: 2
},
{
level: “B1”,
question: “Es necesario que tú _____ este documento antes de mañana.”,
options: [“terminarás”, “terminas”, “termines”, “terminar”],
answer: 2
},
{
level: “B1”,
question: “Ella me preguntó si yo _____ ir a su fiesta.”,
options: [“puedo”, “podía”, “podré”, “podría”],
answer: 1
},
{
level: “B1”,
question: “_____ su retraso, pudo asistir a la reunión.”,
options: [“A pesar de”, “Aunque”, “Sin embargo”, “No obstante”],
answer: 0
},
{
level: “B1”,
question: “Es importante que ustedes _____ este problema rápidamente.”,
options: [“resuelven”, “resolver”, “resuelvan”, “resolverán”],
answer: 2
},
{
level: “B1”,
question: “Lamento que ella no _____ venido a la fiesta.”,
options: [“es”, “haya”, “será”, “sería”],
answer: 1
},
{
level: “B1”,
question: “Nosotros ya _____ terminado cuando ellos llegaron.”,
options: [“habíamos”, “hemos”, “habremos”, “habríamos”],
answer: 0
},
{
level: “B1”,
question: “Te presto mi libro con la condición de que me lo _____.”,
options: [“devuelves”, “devolverás”, “devuelvas”, “devolvías”],
answer: 2
},
{
level: “B1”,
question: “Es la persona _____ te hablé ayer.”,
options: [“que”, “quien”, “de la que”, “cuya”],
answer: 2
},
{
level: “B1”,
question: “Digan lo que _____, no cambiaré de opinión.”,
options: [“dicen”, “dirán”, “digan”, “dirían”],
answer: 2
},
{
level: “B1”,
question: “_____ su edad, sigue siendo muy activo.”,
options: [“A pesar de”, “A pesar”, “Gracias a”, “Debido a”],
answer: 0
},
{
level: “B1”,
question: “Te _____ tan pronto como tenga noticias.”,
options: [“contacto”, “contactaré”, “contactaba”, “contactaría”],
answer: 1
},
{
level: “B1”,
question: “Es posible que él _____ tarde mañana.”,
options: [“llegará”, “llega”, “llegue”, “llegaría”],
answer: 2
},

// B2 Questions (46-60)
{
level: “B2”,
question: “En caso de que _____ retraso, avísame.”,
options: [“tendrías”, “tendrás”, “tuvieras”, “tengas”],
answer: 3
},
{
level: “B2”,
question: “Todavía no he recibido el paquete _____ pedí hace dos semanas.”,
options: [“que”, “el cual”, “cuyo”, “de que”],
answer: 0
},
{
level: “B2”,
question: “_____ tengas razón, no puedo apoyarte en este asunto.”,
options: [“Aunque”, “A pesar de que”, “Porque”, “Ya que”],
answer: 0
},
{
level: “B2”,
question: “No es tanto su actitud _____ sus palabras lo que me ha sorprendido.”,
options: [“como”, “que”, “cual”, “cuanto”],
answer: 0
},
{
level: “B2”,
question: “Si _____ más temprano, no habrías perdido el avión.”,
options: [“salías”, “saldrías”, “hubieras salido”, “habrías salido”],
answer: 2
},
{
level: “B2”,
question: “Quisiera que ustedes _____ esta tarea para mañana.”,
options: [“completan”, “completar”, “completen”, “completarían”],
answer: 2
},
{
level: “B2”,
question: “_____ a su experiencia, supo manejar la crisis eficazmente.”,
options: [“Gracias”, “Debido”, “En cuanto”, “Tras”],
answer: 0
},
{
level: “B2”,
question: “Estos son los documentos _____ debes referirte.”,
options: [“que”, “a los que”, “cuales”, “los cuales”],
answer: 1
},
{
level: “B2”,
question: “Es imperativo que nosotros _____ esta decisión ahora.”,
options: [“tomamos”, “tomaremos”, “tomemos”, “tomaríamos”],
answer: 2
},
{
level: “B2”,
question: “Aunque _____ por esta razón, me niego a participar.”,
options: [“sea”, “fuera”, “sería”, “es”],
answer: 0
},
{
level: “B2”,
question: “La reunión, _____ había olvidado por completo, ha sido aplazada.”,
options: [“que”, “la cual”, “de la que”, “cuya”],
answer: 0
},
{
level: “B2”,
question: “_____ sea muy joven, ya tiene mucha experiencia.”,
options: [“Aunque”, “A pesar de”, “Incluso si”, “Por más que”],
answer: 0
},
{
level: “B2”,
question: “Sería necesario que ustedes _____ estos documentos antes del viernes.”,
options: [“firman”, “firmen”, “firmarán”, “firmarían”],
answer: 1
},
{
level: “B2”,
question: “Esta es la propuesta _____ finalmente optamos.”,
options: [“que”, “por la que”, “en la que”, “con la que”],
answer: 1
},
{
level: “B2”,
question: “Respondí a su correo electrónico, _____ todavía no he recibido respuesta.”,
options: [“sin embargo”, “pero”, “no obstante”, “aunque”],
answer: 1
},

// C1 Questions (61-75)
{
level: “C1”,
question: “De no haber sido por su intervención, _____ en una situación mucho más complicada.”,
options: [“estaríamos”, “habríamos estado”, “hubiéramos estado”, “estuviéramos”],
answer: 1
},
{
level: “C1”,
question: “Es preferible que ustedes _____ las consecuencias antes de tomar su decisión.”,
options: [“pesan”, “pesarán”, “pesaran”, “pesen”],
answer: 3
},
{
level: “C1”,
question: “Esta obra, _____ la crítica ha elogiado, sigue siendo desconocida para el gran público.”,
options: [“que”, “a la que”, “de la que”, “cuya”],
answer: 2
},
{
level: “C1”,
question: “_____ se trate de una situación excepcional, no podemos hacer excepciones.”,
options: [“Aunque”, “Por más que”, “Aun cuando”, “Para que”],
answer: 0
},
{
level: “C1”,
question: “Es un fenómeno _____ causas siguen siendo misteriosas.”,
options: [“cuyas”, “del cual”, “que”, “del que”],
answer: 0
},
{
level: “C1”,
question: “_____ inteligente que sea, ha cometido un error de juicio.”,
options: [“Tan”, “Por”, “Como”, “Aunque”],
answer: 0
},
{
level: “C1”,
question: “Conviene que nosotros _____ las diferentes opciones que se nos presentan.”,
options: [“examinamos”, “examinemos”, “examinaríamos”, “examináramos”],
answer: 1
},
{
level: “C1”,
question: “_____ de nuevas informaciones, tendremos que reajustar nuestra estrategia.”,
options: [“A falta”, “En vista”, “A pesar”, “Sin conocimiento”],
answer: 1
},
{
level: “C1”,
question: “Le agradecería que me _____ su respuesta a la mayor brevedad posible.”,
options: [“haga llegar”, “haga conocer”, “haga saber”, “haga enviar”],
answer: 0
},
{
level: “C1”,
question: “_____ absurdo que parezca, su teoría ha resultado ser exacta.”,
options: [“Por”, “Si”, “Como”, “Tan”],
answer: 0
},
{
level: “C1”,
question: “Ya es hora de que ustedes _____ sus responsabilidades en este asunto.”,
options: [“asumen”, “asuman”, “asumirían”, “asumirán”],
answer: 1
},
{
level: “C1”,
question: “Esta decisión, _____ nos habíamos opuesto firmemente, finalmente ha sido adoptada.”,
options: [“a la que”, “contra la que”, “para la que”, “en la que”],
answer: 1
},
{
level: “C1”,
question: “_____ haya preparado su discurso con cuidado, ha tenido dificultades para convencer al auditorio.”,
options: [“Aunque”, “Puesto que”, “Porque”, “Mientras que”],
answer: 0
},
{
level: “C1”,
question: “Esta hipótesis, _____ atractiva que sea, no se basa en ninguna prueba tangible.”,
options: [“por”, “si”, “tan”, “como”],
answer: 2
},
{
level: “C1”,
question: “Es indispensable que ustedes _____ este contrato antes de fin de mes.”,
options: [“rescindan”, “rescindirían”, “rescindieron”, “rescindirán”],
answer: 0
},

// C2 Questions (76-90)
{
level: “C2”,
question: “_____ la complejidad del problema, conviene abordar esta cuestión con prudencia.”,
options: [“Habida cuenta de”, “En vista de”, “Debido a”, “No obstante”],
answer: 0
},
{
level: “C2”,
question: “El gobierno ha promulgado esta ley, _____ las intensas oposiciones de los sindicatos.”,
options: [“a pesar de”, “no obstante”, “en detrimento de”, “sin considerar”],
answer: 1
},
{
level: “C2”,
question: “_____ hubiéramos realizado todos los trámites necesarios, nuestra solicitud ha sido rechazada.”,
options: [“Aunque”, “Mientras que”, “Cuando”, “Por más que”],
answer: 0
},
{
level: “C2”,
question: “Estas maniobras dilatorias, _____ se han dedicado, solo han servido para retrasar lo inevitable.”,
options: [“a las que”, “de las que”, “para las que”, “por las que”],
answer: 0
},
{
level: “C2”,
question: “Habría sido preferible que ustedes _____ esta oportunidad cuando se presentó.”,
options: [“aprovecharan”, “aprovechen”, “aprovecharían”, “aprovecharon”],
answer: 0
},
{
level: “C2”,
question: “_____ de demostrar lo absurdo de esta teoría, se lanzó en una explicación alambicada.”,
options: [“Con el fin”, “Con el único fin”, “Con la esperanza”, “Con la intención”],
answer: 1
},
{
level: “C2”,
question: “Esta medida, _____ aplicación se enfrenta a numerosos obstáculos, debería ser reexaminada.”,
options: [“cuya”, “para la que”, “de la que”, “que”],
answer: 0
},
{
level: “C2”,
question: “_____ fue su compromiso, no logró cambiar la posición de sus adversarios.”,
options: [“Tal”, “Cual”, “Como”, “Tanto”],
answer: 0
},
{
level: “C2”,
question: “Dudo mucho que él _____ a la reunión de mañana, teniendo en cuenta su apretada agenda.”,
options: [“asista”, “asistirá”, “asistiría”, “haya asistido”],
answer: 0
},
{
level: “C2”,
question: “_____ las apariencias, esta propuesta esconde intenciones mucho menos loables.”,
options: [“A pesar de”, “Excepto”, “Bajo”, “Además de”],
answer: 2
},
{
level: “C2”,
question: “Es importante que nosotros _____ estos malentendidos antes de que degeneren en conflicto abierto.”,
options: [“disipamos”, “disipemos”, “disiparemos”, “disiparíamos”],
answer: 1
},
{
level: “C2”,
question: “Es una cuestión _____ no ha juzgado oportuno expresarse públicamente.”,
options: [“sobre la que”, “para la que”, “de la que”, “a la que”],
answer: 0
},
{
level: “C2”,
question: “_____ como sea, debemos tomar una decisión antes del fin de semana.”,
options: [“Sea”, “Aunque”, “Como”, “Por más”],
answer: 0
},
{
level: “C2”,
question: “El informe, _____ encontrará un resumen en anexo, hace mención de una situación preocupante.”,
options: [“del que”, “en el que”, “donde”, “que”],
answer: 0
},
{
level: “C2”,
question: “_____ circunstancias atenuantes, la pena habría sido mucho más severa.”,
options: [“De no haber sido por”, “Sin”, “A falta de”, “En ausencia de”],
answer: 0
}
];

// Variables globales
let currentQuestionIndex = 0;
let userAnswers = [];
let timer;
let timeLeft = 45;
let questionsPerLevel = {
“A1”: 0,
“A2”: 0,
“B1”: 0,
“B2”: 0,
“C1”: 0,
“C2”: 0
};
let correctPerLevel = {
“A1”: 0,
“A2”: 0,
“B1”: 0,
“B2”: 0,
“C1”: 0,
“C2”: 0
};
let currentLevelIndex = 0;
const levels = [“A1”, “A2”, “B1”, “B2”, “C1”, “C2”];
let testCompleted = false;

// Contar las preguntas por nivel
questions.forEach(question => {
questionsPerLevel[question.level]++;
});

// Descripción de los niveles
const levelDescriptions = {
“A1”: “Nivel Principiante (A1): Puedes comprender y utilizar expresiones cotidianas y frases muy básicas. Puedes presentarte y presentar a alguien, y hacer preguntas simples sobre temas personales.”,
“A2”: “Nivel Elemental (A2): Puedes comprender frases y expresiones frecuentemente utilizadas relacionadas con áreas inmediatas (información personal, compras, entorno cercano, trabajo). Puedes comunicarte en tareas simples y cotidianas.”,
“B1”: “Nivel Intermedio (B1): Puedes comprender los puntos principales de una conversación en un lenguaje claro y estándar. Puedes desenvolverte en la mayoría de las situaciones durante un viaje. Puedes producir un discurso simple y coherente sobre temas familiares.”,
“B2”: “Nivel Avanzado (B2): Puedes comprender el contenido esencial de temas concretos o abstractos en un texto complejo. Puedes comunicarte con un grado de espontaneidad y fluidez que hace posible la interacción normal con un hablante nativo.”,
“C1”: “Nivel Dominio Operativo (C1): Puedes comprender una amplia gama de textos extensos y exigentes, así como captar significados implícitos. Puedes expresarte de forma espontánea y fluida sin tener que buscar demasiado las palabras.”,
“C2”: “Nivel Maestría (C2): Puedes comprender prácticamente todo lo que lees o escuchas sin esfuerzo. Puedes expresarte espontáneamente, con gran fluidez y precisión, y puedes distinguir matices sutiles de significado incluso en situaciones complejas.”
};

// Inicialización del test
document.addEventListener(‘DOMContentLoaded’, function() {
document.getElementById(‘start-btn’).addEventListener(‘click’, startTest);document.getElementById(‘next-btn’).addEventListener(‘click’, nextQuestion);
document.getElementById(‘previous-btn’).addEventListener(‘click’, previousQuestion);
document.getElementById(‘restart-btn’).addEventListener(‘click’, restartTest);
});

// Iniciar el test
function startTest() {
document.getElementById(‘intro-container’).style.display = ‘none’;
document.getElementById(‘test-container’).style.display = ‘block’;
document.getElementById(‘question-container’).style.display = ‘block’;

// Reiniciar variables
currentQuestionIndex = 0;
userAnswers = Array(questions.length).fill(null);
correctPerLevel = {
“A1”: 0,
“A2”: 0,
“B1”: 0,
“B2”: 0,
“C1”: 0,
“C2”: 0
};
testCompleted = false;
currentLevelIndex = 0;

// Mostrar la primera pregunta
showQuestion(currentQuestionIndex);
startTimer();
updateProgressBar();
}

// Mostrar pregunta
function showQuestion(index) {
const questionData = questions[index];
const questionContainer = document.getElementById(‘question-container’);

// Crear el contenido de la pregunta
let content = `

Pregunta ${index + 1} (Nivel ${questionData.level})

${questionData.question}

`;

// Agregar opciones
questionData.options.forEach((option, i) => {
let selectedClass = userAnswers[index] === i ? ‘selected’ : ”;
content += `

${option}

`;
});

content += `

`;

// Mostrar la pregunta
questionContainer.innerHTML = content;

// Agregar eventos a las opciones
const options = document.querySelectorAll(‘.option’);
options.forEach(option => {
option.addEventListener(‘click’, function() {
selectOption(this);
});
});

// Mostrar/ocultar botones de navegación
document.getElementById(‘previous-btn’).style.display = index > 0 ? ‘block’ : ‘none’;

// Actualizar el temporizador
resetTimer();
}

// Seleccionar una opción
function selectOption(selectedOption) {
const options = document.querySelectorAll(‘.option’);
options.forEach(option => {
option.classList.remove(‘selected’);
});

selectedOption.classList.add(‘selected’);
userAnswers[currentQuestionIndex] = parseInt(selectedOption.getAttribute(‘data-index’));
}

// Avanzar a la siguiente pregunta
function nextQuestion() {
// Si no se ha seleccionado una respuesta, mostrar un mensaje
if (userAnswers[currentQuestionIndex] === null) {
alert(‘Por favor, selecciona una respuesta antes de continuar.’);
return;
}

// Verificar si la respuesta es correcta
const currentQuestion = questions[currentQuestionIndex];
const userAnswer = userAnswers[currentQuestionIndex];
const currentLevel = currentQuestion.level;

if (userAnswer === currentQuestion.answer) {
correctPerLevel[currentLevel]++;
}

// Avanzar a la siguiente pregunta
currentQuestionIndex++;

// Verificar si necesitamos cambiar de nivel o terminar el test
if (shouldChangeLevel() || currentQuestionIndex >= questions.length) {
finishTest();
return;
}

// Mostrar la siguiente pregunta
showQuestion(currentQuestionIndex);
updateProgressBar();
}

// Volver a la pregunta anterior
function previousQuestion() {
if (currentQuestionIndex > 0) {
currentQuestionIndex–;
showQuestion(currentQuestionIndex);
updateProgressBar();
}
}

// Verificar si se debe cambiar de nivel
function shouldChangeLevel() {
const currentQuestion = questions[currentQuestionIndex – 1];
const currentLevel = currentQuestion.level;
const currentLevelQuestions = questionsPerLevel[currentLevel];

// Contar cuántas preguntas de este nivel se han respondido
const answeredQuestionsOfLevel = questions
.slice(0, currentQuestionIndex)
.filter(q => q.level === currentLevel)
.length;

// Si se han contestado al menos 10 preguntas del nivel actual
if (answeredQuestionsOfLevel >= 10) {
// Calcular porcentaje de aciertos
const correctPercentage = (correctPerLevel[currentLevel] / answeredQuestionsOfLevel) * 100;

// Si el porcentaje de aciertos es menor al 60%, detenemos el test
if (correctPercentage = 60) {
return true;
}

// Si se han contestado todas las preguntas del nivel actual
if (answeredQuestionsOfLevel >= currentLevelQuestions) {
// Avanzamos al siguiente nivel
const currentLevelIndex = levels.indexOf(currentLevel);
if (currentLevelIndex answer !== null).length;
const correctAnswers = levels.reduce((total, level) => total + correctPerLevel[level], 0);
const accuracy = Math.round((correctAnswers / answeredQuestions) * 100);

feedback.textContent = `Has respondido correctamente ${correctAnswers} de ${answeredQuestions} preguntas (${accuracy}% de precisión).`;

// Crear fuegos artificiales
createFireworks();

testCompleted = true;
}

// Determinar el nivel del usuario
function determineUserLevel() {
let userLevel = “A1”;

for (let i = levels.length – 1; i >= 0; i–) {
const level = levels[i];
const answeredQuestionsOfLevel = questions
.slice(0, currentQuestionIndex)
.filter(q => q.level === level)
.length;

if (answeredQuestionsOfLevel > 0) {
const correctPercentage = (correctPerLevel[level] / answeredQuestionsOfLevel) * 100;

if (correctPercentage >= 60) {
userLevel = level;
break;
}
}
}

return userLevel;
}

// Reiniciar el test
function restartTest() {
document.getElementById(‘result-container’).style.display = ‘none’;
startTest();
}

// Temporizador
function startTimer() {
timeLeft = 45;
document.getElementById(‘timer’).textContent = timeLeft;

timer = setInterval(function() {
timeLeft–;
document.getElementById(‘timer’).textContent = timeLeft;

if (timeLeft {
option.classList.remove(‘selected’);
if (parseInt(option.getAttribute(‘data-index’)) === randomAnswer) {
option.classList.add(‘selected’);
}
});
}

// Avanzar a la siguiente pregunta automáticamente
setTimeout(function() {
nextQuestion();
}, 1000);
}
}, 1000);
}

// Reiniciar el temporizador
function resetTimer() {
clearInterval(timer);
startTimer();
}

// Actualizar barra de progreso
function updateProgressBar() {
const progress = (currentQuestionIndex / questions.length) * 100;
document.querySelector(‘.progress-bar’).style.width = `${progress}%`;
}

// Crear efectos de fuegos artificiales
function createFireworks() {
const resultContainer = document.getElementById(‘result-container’);

for (let i = 0; i {
const firework = document.createElement(‘div’);
firework.classList.add(‘firework’);

// Posición inicial
const startX = Math.random() * resultContainer.offsetWidth;
const startY = Math.random() * resultContainer.offsetHeight;

firework.style.left = `${startX}px`;
firework.style.top = `${startY}px`;

// Color aleatorio
const hue = Math.floor(Math.random() * 360);
firework.style.backgroundColor = `hsl(${hue}, 100%, 50%)`;
firework.style.boxShadow = `0 0 10px 5px hsl(${hue}, 100%, 60%)`;

// Dirección aleatoria
const xMove = (Math.random() – 0.5) * 100;
const yMove = (Math.random() – 0.5) * 100;
firework.style.setProperty(‘–x-move’, `${xMove}px`);
firework.style.setProperty(‘–y-move’, `${yMove}px`);

resultContainer.appendChild(firework);

// Eliminar después de la animación
setTimeout(() => {
firework.remove();
}, 1000);
}, i * 100);
}
}