-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathscript.js
More file actions
174 lines (152 loc) · 6.35 KB
/
script.js
File metadata and controls
174 lines (152 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
const caja = document.getElementById('options');
const categorySelect = document.getElementById('category');
const difficultySelect = document.getElementById('difficulty');
const typeSelect = document.getElementById('type');
const startBtn = document.getElementById('startBtn');
const quizContainer = document.getElementById('quiz-container');
const scoreContainer = document.getElementById('score');
const newTriviaBtn = document.getElementById('newTriviaBtn');
let currentQuestion = 0;
let score = 0;
let triviaData = [];
let userAnswers = []; // Array para guardar las respuestas del usuario
let timer; // Variable para el temporizador
// Obtener las categorías de la API
fetch('https://opentdb.com/api_category.php')
.then(response => response.json())
.then(data => {
data.trivia_categories.forEach(category => {
const option = document.createElement('option');
option.value = category.id;
option.text = category.name;
categorySelect.add(option);
});
});
// Manejar el clic en el botón "Crear Trivia"
startBtn.addEventListener('click', () => {
const category = categorySelect.value;
const difficulty = difficultySelect.value;
const type = typeSelect.value;
// Construir la URL de la API
let apiUrl = `https://opentdb.com/api.php?amount=10`;
if (category !== '') {
apiUrl += `&category=${category}`;
}
if (difficulty !== '') {
apiUrl += `&difficulty=${difficulty}`;
}
if (type !== '') {
apiUrl += `&type=${type}`;
}
// Obtener las preguntas de la API
fetch(apiUrl)
.then(response => response.json())
.then(data => {
triviaData = data.results;
userAnswers = []; // Reiniciar el array de respuestas del usuario
showQuestion();
});
});
// Mostrar la pregunta actual
function showQuestion() {
if (currentQuestion < triviaData.length) {
const questionData = triviaData[currentQuestion];
// Decodificar entidades HTML en las preguntas y respuestas
const questionText = decodeURIComponent(questionData.question);
const correctAnswer = decodeURIComponent(questionData.correct_answer);
const incorrectAnswers = questionData.incorrect_answers.map(answer => decodeURIComponent(answer));
caja.classList.add("despues");
// Crear el HTML para la pregunta y las respuestas
let questionHTML = `
<div class="question">
<h3>${questionText}</h3>
<div id="timer">Tiempo restante: 20</div>
<ul>
`;
const answers = [correctAnswer, ...incorrectAnswers].sort(() => Math.random() - 0.5); // Ordenar aleatoriamente las respuestas
answers.forEach(answer => {
questionHTML += `
<li class="answer">
<input type="radio" name="answer" value="${answer}"> ${answer}
</li>
`;
});
questionHTML += `
</ul>
<button onclick="checkAnswer('${correctAnswer}')">Responder</button>
</div>
`;
quizContainer.style.display = 'block'; // Mostrar el botón de nueva trivia
quizContainer.innerHTML = questionHTML;
// Iniciar el temporizador
let timeLeft = 20; // Tiempo en segundos
timer = setInterval(() => {
timeLeft--;
document.getElementById('timer').textContent = `Tiempo restante: ${timeLeft}`;
if (timeLeft <= 0) {
clearInterval(timer);
checkAnswer(''); // Pasar una respuesta vacía para marcarla como incorrecta
}
}, 1000);
} else {
// Mostrar el puntaje final y las respuestas
clearInterval(timer);
showResults();
}
}
// Verificar la respuesta del usuario
function checkAnswer(correctAnswer) {
clearInterval(timer);
quizContainer.style.display = 'block'; // Mostrar el botón de nueva trivia
const selectedAnswer = document.querySelector('input[name="answer"]:checked');
if (selectedAnswer) {
userAnswers.push(selectedAnswer.value); // Guardar la respuesta del usuario
if (selectedAnswer.value === correctAnswer) {
score += 100;
}
currentQuestion++;
showQuestion();
} else {
// Si el tiempo se agotó, se pasa a la siguiente pregunta
if (correctAnswer === '') {
userAnswers.push(''); // Guardar una respuesta vacía para indicar que no se respondió
currentQuestion++;
showQuestion();
} else {
alert('Por favor, selecciona una respuesta.');
}
}
}
// Mostrar el puntaje final y las respuestas
function showResults() {
let resultsHTML = `<h2>Puntaje final: ${score} de ${triviaData.length * 100}</h2>`;
resultsHTML += '<ul>';
for (let i = 0; i < triviaData.length; i++) {
const questionData = triviaData[i];
const questionText = decodeURIComponent(questionData.question);
const correctAnswer = decodeURIComponent(questionData.correct_answer);
const userAnswer = userAnswers[i];
resultsHTML += `<li>${questionText}<br>`;
resultsHTML += `<span class="turespuesta">Tu respuesta: ${userAnswer}</span><br>`;
resultsHTML += `<span class="correct">Respuesta correcta: ${correctAnswer}</span><br>`;
// Resaltar la respuesta incorrecta en rojo
if (userAnswer !== correctAnswer) {
resultsHTML += `<span class="incorrect">Respuesta incorrecta</span>`;
}
resultsHTML += '</li>';
}
resultsHTML += '</ul>';
resultsHTML += `<img src="images/globo.png" class="globo">`;
quizContainer.innerHTML = resultsHTML;
scoreContainer.textContent = '';
newTriviaBtn.style.display = 'block'; // Mostrar el botón de nueva trivia
}
// Manejar el clic en el botón "Nueva Trivia"
newTriviaBtn.addEventListener('click', () => {
currentQuestion = 0;
score = 0;
userAnswers = []; // Reiniciar el array de respuestas del usuario
scoreContainer.textContent = '';
quizContainer.innerHTML = '';
newTriviaBtn.style.display = 'none'; // Ocultar el botón de nueva trivia
});