feat: Ajustes tecnicos para ruleta y posicion de puntaje

This commit is contained in:
2026-07-30 14:38:25 -06:00
parent 1ea384bcf9
commit 5bdb522d53
4 changed files with 29 additions and 5 deletions
+4 -1
View File
@@ -13,6 +13,7 @@ type Screen = 'intro' | 'cover' | 'game' | 'result'
interface ResultState {
aprobado: boolean
sinIntentos: boolean
correctas: number
}
export default function App() {
@@ -23,6 +24,7 @@ export default function App() {
const [resultState, setResultState] = useState<ResultState>({
aprobado: false,
sinIntentos: intentosAgotados(),
correctas: 0,
})
function handleIntroContinue() {
@@ -38,7 +40,7 @@ export default function App() {
setScore(Math.round((correctas / 12) * 100), 100, 0)
setLessonStatus(aprobado ? 'passed' : 'failed')
finishSCORM()
setResultState({ aprobado, sinIntentos: intentosAgotados() })
setResultState({ aprobado, sinIntentos: intentosAgotados(), correctas })
setScreen('result')
}
@@ -108,6 +110,7 @@ export default function App() {
<Result
aprobado={resultState.aprobado}
sinIntentos={resultState.sinIntentos}
correctas={resultState.correctas}
onReintentar={handleReintentar}
/>
</ScaleWrapper>
+1 -1
View File
@@ -72,7 +72,7 @@ export default function RuletaSVG({ categorias, rotacion, isSpinning, onClick }:
<div className="relative flex flex-col items-center justify-center w-full select-none">
{/* ─── Puntero ─── */}
<div className="absolute top-0 left-1/2 -translate-x-1/2 z-20" style={{ marginTop: '0px' }}>
<div className="absolute top-0 left-1/2 -translate-x-1/2 z-20" style={{ marginTop: '20px' }}>
<img
src="./img/indicador.png"
alt="Indicador"
+21 -1
View File
@@ -1,10 +1,11 @@
interface ResultProps {
aprobado: boolean
sinIntentos: boolean
correctas: number
onReintentar: () => void
}
export default function Result(_props: ResultProps) {
export default function Result({ correctas }: ResultProps) {
return (
<div className="flex w-full h-full">
{/* ─── Columna izquierda 50% ─── */}
@@ -57,6 +58,25 @@ export default function Result(_props: ResultProps) {
</p>
</div>
</div>
{/* Calificación */}
<div
className="px-8 py-4 rounded-xl text-center mt-4"
style={{
backgroundColor: '#ed1f24',
width: '90%',
alignSelf: 'center',
marginLeft: 'auto',
marginRight: 'auto',
}}
>
<p className="text-white font-bold" style={{ fontSize: '28px' }}>
Calificación: {Math.round((correctas / 12) * 100)}%
</p>
<p className="text-white mt-1" style={{ fontSize: '28px', opacity: 0.9 }}>
{correctas} de 12 aciertos
</p>
</div>
</div>
{/* ─── Columna derecha 50% ─── */}
+3 -2
View File
@@ -49,10 +49,11 @@ function crearPool(): Record<number, Pregunta[]> {
export function useRuleta() {
const poolInicial = useMemo(() => crearPool(), [])
const rotacionInicial = useMemo(() => Math.random() * 360, [])
const [estado, setEstado] = useState<EstadoJuego>({
isSpinning: false,
rotacion: 0,
rotacion: rotacionInicial,
preguntaActual: null,
categoriaActual: null,
mostrarFeedback: false,
@@ -66,7 +67,7 @@ export function useRuleta() {
tiempoRestante: TIEMPO_LIMITE,
})
const rotacionRef = useRef(0)
const rotacionRef = useRef(rotacionInicial)
const isSpinningRef = useRef(false)
const completadoRef = useRef(false)
const usadasRef = useRef<Record<number, number>>({})