ruleta

 Te voy a preparar una versión más interactiva de la ruleta con Canvas donde tus alumnos puedan:

  1. Escribir sus propios elementos en un cuadro de texto.

  2. Agregar elementos a la ruleta con un botón.

  3. Girar la ruleta y eliminar el elemento seleccionado.

  4. Ver un historial de ganadores.


🎡 Ruleta interactiva para alumnos

Guarda este código como ruleta.html y ábrelo en el navegador.

html
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Ruleta Interactiva con Canvas</title> <style> body { font-family: Arial, sans-serif; text-align: center; background: #f0f0f0; } canvas { background: white; border-radius: 50%; box-shadow: 0 0 10px rgba(0,0,0,0.3); margin-top: 10px; } input, button { padding: 8px; font-size: 16px; margin: 5px; } button { cursor: pointer; border: none; border-radius: 5px; } .btn-agregar { background: #3498db; color: white; } .btn-agregar:hover { background: #2980b9; } .btn-girar { background: #2ecc71; color: white; } .btn-girar:hover { background: #27ae60; } #resultado { font-size: 20px; font-weight: bold; margin-top: 15px; } #historial { margin-top: 20px; text-align: left; max-width: 300px; margin-left: auto; margin-right: auto; background: white; padding: 10px; border-radius: 5px; box-shadow: 0 0 5px rgba(0,0,0,0.2); } </style> </head> <body> <h1>🎡 Ruleta Interactiva</h1> <input type="text" id="nuevoElemento" placeholder="Escribe un elemento"> <button class="btn-agregar" onclick="agregarElemento()">Agregar</button> <br> <canvas id="ruleta" width="400" height="400"></canvas> <br> <button class="btn-girar" onclick="girar()">Girar</button> <div id="resultado">Agrega elementos y gira la ruleta</div> <div id="historial"> <h3>📜 Historial de ganadores</h3> <ul id="listaHistorial"></ul> </div> <script> let canvas = document.getElementById("ruleta"); let ctx = canvas.getContext("2d"); let elementos = []; let historial = []; let anguloInicio = 0; let girando = false; let velocidad = 0; let colores = ["#FF5733", "#33FF57", "#3357FF", "#FFC300", "#8E44AD", "#E67E22", "#16A085", "#E74C3C"]; // Función para dibujar la ruleta function dibujarRuleta() { let segmentos = elementos.length; if (segmentos === 0) { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.font = "20px Arial"; ctx.fillStyle = "gray"; ctx.textAlign = "center"; ctx.fillText("Agrega elementos para comenzar", 200, 200); return; } let anguloPorSegmento = 2 * Math.PI / segmentos; ctx.clearRect(0, 0, canvas.width, canvas.height); for (let i = 0; i < segmentos; i++) { let angulo = anguloInicio + i * anguloPorSegmento; ctx.beginPath(); ctx.moveTo(200, 200); ctx.arc(200, 200, 200, angulo, angulo + anguloPorSegmento); ctx.fillStyle = colores[i % colores.length]; ctx.fill(); ctx.save(); ctx.translate(200, 200); ctx.rotate(angulo + anguloPorSegmento / 2); ctx.textAlign = "right"; ctx.fillStyle = "white"; ctx.font = "18px Arial"; ctx.fillText(elementos[i], 180, 10); ctx.restore(); } // Flecha ctx.beginPath(); ctx.moveTo(200, 0); ctx.lineTo(190, 20); ctx.lineTo(210, 20); ctx.closePath(); ctx.fillStyle = "black"; ctx.fill(); } // Agregar nuevo elemento function agregarElemento() { let valor = document.getElementById("nuevoElemento").value.trim(); if (valor) { elementos.push(valor); document.getElementById("nuevoElemento").value = ""; dibujarRuleta(); } } // Girar la ruleta function girar() { if (girando || elementos.length === 0) return; velocidad = Math.random() * 0.3 + 0.25; girando = true; animar(); } function animar() { if (!girando) return; anguloInicio += velocidad; velocidad *= 0.98; if (velocidad < 0.002) { girando = false; seleccionarElemento(); return; } dibujarRuleta(); requestAnimationFrame(animar); } // Seleccionar elemento function seleccionarElemento() { let segmentos = elementos.length; let anguloPorSegmento = 2 * Math.PI / segmentos; let anguloFinal = anguloInicio % (2 * Math.PI); let indice = Math.floor(((2 * Math.PI) - anguloFinal) / anguloPorSegmento) % segmentos; let ganador = elementos[indice]; document.getElementById("resultado").textContent = "🎯 Ganador: " + ganador; historial.push(ganador); actualizarHistorial(); elementos.splice(indice, 1); dibujarRuleta(); if (elementos.length === 0) { document.getElementById("resultado").textContent = "🎉 Ya no quedan elementos"; } } // Mostrar historial function actualizarHistorial() { let lista = document.getElementById("listaHistorial"); lista.innerHTML = ""; historial.forEach((item, index) => { let li = document.createElement("li"); li.textContent = (index+1) + ". " + item; lista.appendChild(li); }); } dibujarRuleta(); </script> </body> </html>

🔹 Mejoras que incluye:

  • Campo de texto para que los alumnos escriban sus elementos.

  • Botón "Agregar" que los mete en el arreglo y redibuja la ruleta.

  • Botón "Girar" que elige un elemento al azar, lo elimina y lo muestra en pantalla.

  • Historial con todos los ganadores que han salido.

  • Mensajes cuando ya no hay elementos en la ruleta.


Si quieres, puedo hacer que la ruleta tenga animación de confeti cuando sale el ganador para que se vea más divertida.
¿Quieres que le agreguemos ese efecto de celebración? 🎉

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

Pseudocódigo de la Máquina Expendedora

Trabajas en una compañía que ofrece seguros de vida y de gastos