elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: El geolocalizador de IP's ya funciona con IPv6


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Números más bajos tienen más probabilidad de elegirse pero Dificultad influye al revés.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Números más bajos tienen más probabilidad de elegirse pero Dificultad influye al revés.  (Leído 1,898 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.831


Hackentifiko!


Ver Perfil
Números más bajos tienen más probabilidad de elegirse pero Dificultad influye al revés.
« en: 20 Junio 2026, 04:39 am »

Enemigos aparecen con un nivel al azar.
Los de nivel 1 deben tener X probabilidad.
Los de nivel 2, X/2.
Los de nivel 3, X/3.
y así hasta nivel 99: X/99
No sé bien qué es X, pero si ponía porcentajes quedaba mal:
100% (100/1)
50% (100/2)
etc, si suman los porcentajes supera 100 y no se entiende.

La cuestión es que entre más nivel, menos probable. El siguiente código no hace exacto lo que quiero creo, pero como base parece bien:
Código
  1. LVElegido = 0;
  2. PesoDelElegido = -999;
  3. LVCandidato = 0;
  4. do {
  5.   LVCandidato++;
  6.   Peso = Math.random() * 100) - LVCandidato;
  7.   if (Peso > PesoDelElegido) {
  8.      PesoDelElegido = Peso;
  9.      LVElegido = LVCandidato;
  10.   }
  11. } while (LVCandidato < 99);

Quiero que además una variable Dificultad haga más probable que los LV elegidos sean altos.

No sé exactamente cómo ¿así?
Peso = Math.random() * 100) - LVCandidato/Dificultad;

Quisiera que algo que aumenta el resultado no divida, claridad.

Lo he hablado con una IA pero no entiendo sus respuestas.

Esto parece tener demasiados pasos y ser excesivamente complicado (algunas variables tienen nombres que ya no uso pero no es mucha diferencia, básicamente LVChequeandose es LVCandidato y TuNivel es Dificultad:
Código
  1. LVElegido = 0;
  2. PesoDelElegido = -1;
  3. LVChequeandose = 0;
  4.  
  5. do {
  6.   LVChequeandose++;
  7.  
  8.   // 1. Calculamos cuánto se aleja este enemigo del nivel 1
  9.   Distancia = LVChequeandose - 1;
  10.  
  11.   // 2. Dividimos esa distancia entre TuNivel.
  12.   // Al subir de nivel, la distancia "duele menos" y los niveles altos ganan peso.
  13.   Penalizacion = Distancia / TuNivel;
  14.  
  15.   // 3. El peso base arranca en 100 y le restamos la penalización suavizada
  16.   PesoBase = 100 - Penalizacion;
  17.   if (PesoBase < 0) PesoBase = 0; // Evitamos pesos negativos
  18.  
  19.   // 4. Aplicamos el Math.random() multiplicando al PesoBase
  20.   PesoCandidato = PesoBase * Math.random();
  21.  
  22.   if (PesoCandidato > PesoDelElegido) {
  23.      PesoDelElegido = PesoCandidato;
  24.      LVElegido = LVChequeandose;
  25.   }
  26. } while (LVChequeandose < 99);

Y esto es cuando se lo pedí en 1 línea:
Código
  1. PesoCandidato = Math.max(0, 100 - ((LVChequeandose - 1) / TuNivel)) * Math.random();

En fin, quisiera que me digan un método simple o me expliquen por qué es necesario tanto lío.

Por qué hace
Distancia = LVChequeandose - 1;
Penalizacion = Distancia / TuNivel;

en vez de
Penalizacion = LVChequeandose / TuNivel;

¿por qué es tan importante el -1?


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines