JSFiddle - React, Tailwind, and code Playground
HTML
<input type="text" id="pokemonPS" placeholder="vida máxima del pokemón"/>
<input type="text" id="pokemonCPS" placeholder="vida actual del pokemón"/>
<input type="range" id="pokemonCRatio" min="3" max="255"/>
<select id="pokeBallRatio">Poke Ball:
<option value="1.0">Poke Ball</option>
<option value="1.0">Amigo Ball</option>
<option value="1.5">Compti Ball</option>
<option value="1.5">Super Ball</option>
<option value="1.5">Safari Ball</option>
<option value="2.0">Ultra Ball</option>
<option value="3.0">Cebo Ball</option>
<option value="8.0">Amor Ball</option>
</select>
<select id="bonusState">Estado:
<option value="1.0">Ninguno</option>
<option value="1.5">Paralizado</option>
<option value="1.5">Quemado</option>
<option value="1.5">Envenenado</option>
<option value="2.0">Congelado</option>
<option value="2.0">Dormido</option>
</select>
<button id="calcRate">Capturar!</button>
<section class="log"></section>
CSS
.log {
padding: .5re 1rem;
}
JavaScript
document.querySelector('#calcRate').addEventListener('click', function() {
capturePokemon();
});
function capturePokemon() {
var pokemonPS = parseInt(document.querySelector('#pokemonPS').value);
var pokemonCPS = parseInt(document.querySelector('#pokemonCPS').value);
var pokemonCRatio = parseInt(document.querySelector('#pokemonCRatio').value);
var pokeBallRatio = parseFloat(document.querySelector('#pokeBallRatio').value);
var bonusState = parseFloat(document.querySelector('#bonusState').value);
var fail = false;
// calculamos el ratio de captura
var a = (((3 * pokemonPS - 2 * pokemonCPS) * pokemonCRatio *
pokeBallRatio) / (3 * pokemonPS)) * bonusState;
// si a > 255, el pokemón es capturado
if(a > 255) {
log('Pokemón capturado!');
return false;
}
// si !a > 255, calcuamos b
var b = Math.pow(2, 16) * sqrtN(a / (Math.pow(2, 8) - 1), 4);
// generamos los números aleatorios
for(var i=1; i<=3; i++) {
var random = Math.random() * 65536;
console.log(random);
if(random > b) {
fail = true;
}
}
if(fail) {
log('Lo siento, el pokemón se escapó');
} else {
log('El pokemón ha sido capturado luego de 3 rebotes!');
}
}
function log(message) {
document.querySelector('.log').innerText = message;
}
function sqrtN(value, exp) {
return Math.exp(Math.log(value) / exp);
}