Autor Tema: Se quiere que el promedio se duplique o algo así, pero hay error.

0 Usuarios y 1 Visitante están viendo este tema.

03 Agosto, 2026, 02:33 am
Leído 342 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,256
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
AverageTime = 0;
SumOfTimes = 0;
Playthroughs = 0;

O sea tenemos:
TiempoPromedio
SumaDeTiempos
Participaciones

Digamos que se cuenta qué tan rápido llega el corredor a la meta, pero si arranca antes de la señal se hace esto:
Playthroughs++;
SumOfTimes = SumOfTimes*2;
AverageTime = SumOfTimes/Playthroughs;

TimePassed es el tiempo que obtuvo en la actual participación. O sea, se castiga al corredor.

Aumentan sus participaciones, eso es normal.
A la suma de sus tiempos, se lo duplica.
Se recalcula el promedio.

Quisiera que el promedio aumente cuando pase eso, pero a veces falla, quizá cuando Playthroughs es 1, al duplicarse SumOfTimes no hay aumento de AverageTime porque ahora se hace /2.
Pasamos de
Algo/1
a
Algo*2/2

¿Qué debería hacer entonces para que funcione bien?

Antes sólo usaba una variable llamada FakeAverageTime, al calcularla normal (no por el castigo) hacía
FakeAverageTime = (FakeAverageTime+TimePassed)/2;
O sea los últimos TimePassed tenían más influencia que los anteriores, no era un promedio correcto, y al aplicar el castigo hacia
FakeAverageTime = FakeAverageTime*2;
que funcionaba correctamente.

¿Qué debería hacer ahora en los castigos? ¿no aumentar Playthroughs?

23 Agosto, 2026, 08:36 am
Respuesta #1

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,256
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Era bastante más difícil de lo que creí.

https://share.google/aimode/a4FnTeY2YfWeOYOaJ

Solución elegida:

Si se gana:
PlayerHasWon = true;
Playthroughs++;
SumOfTimes = SumOfTimes+TimePassed;
AverageTime = SumOfTimes/Playthroughs;

Si se pierde:
Código: [Seleccionar]
Playthroughs++;
if (PlayerHasWon == true) {
if (SumOfTimes > 0) {
SumOfTimes = AverageTime * 2 * Playthroughs;
} else {
SumOfTimes = 1;
}
} else if (SumOfTimes > 0) {
SumOfTimes = AverageTime * 2 * Playthroughs;
} else {
SumOfTimes = SumOfTimes+100;
}
AverageTime = SumOfTimes/Playthroughs;

Creo que no es exacto lo que pedí, pero sino es imposible.

Cuando se pierde, lo normal es que la suma de tiempo aumenta de modo que el promedio se duplique.
Casos especiales:
- Si el jugador alguna vez ha ganado y su promedio es 0, a la suma sólo se le suma 1. No tendría sentido hacer 0*2. El castigo por perder con el promedio perfecto es que aumente 1.
- Si el jugador nunca ganó y su promedio es 0, tampoco tiene sentido el castigo de hacerle *2, se le hace +100 a la suma y queda 100.

Ya veo lo que dijo la IA de la redundancia, creo que es mejor así:
Código: [Seleccionar]
Playthroughs++;
if (SumOfTimes > 0) {
SumOfTimes = AverageTime * 2 * Playthroughs;
} else if (PlayerHasWon == true) {
SumOfTimes = 1;
} else {
SumOfTimes = SumOfTimes+100;
}
AverageTime = SumOfTimes/Playthroughs;

¡Todo ese lío para un sencillo juego de cliquear cuando se dé la señal!
¿¡Por qué las Matemáticas tienen que ser tan complicadas!?