JSFiddle - React, Tailwind, and code Playground
JavaScript
function roll() {
return Math.floor(Math.random() * 6) +1;
}
function play(luck) {
let days = 0;
let log = [];
while (luck >= 0 && days < 1024) {
days++;
luck = resolve(luck, days, log);
}
log.push("You have survived " + days + " day(s)!");
return log;
}
function resolve(luck, days, log) {
const result = roll() + roll();
log.push("Day: " + days + ", Luck: " + luck + ", Dice roll: " + result);
switch (result) {
case 12: luck += 2; break;
case 11:
case 10: luck += 1; break;
case 9:
case 8: break;
case 7: {if (luck) {luck -= 1;} else {luck = resolve(luck, days, log); }}break;
case 6:
case 5: luck -= 1; break;
case 4:
case 3: luck -= 2; break;
case 2: luck -= 3; break;
default: break;
}
return luck;
}
const h1 = document.createElement('h1');
const btn = document.createElement('button');
const input = document.createElement('input');
const logs = document.createElement('div');
h1.innerHTML = '36 days later';
input.setAttribute('type', 'number');
input.setAttribute('min', 0);
input.setAttribute('max', 100);
input.setAttribute('step', 1);
input.setAttribute('placeholder', 'initial luck');
input.style = 'width: 6rem;';
btn.innerHTML = 'Let\'s survive!';
btn.addEventListener('click', () => {
let luck = parseInt(input.value || 0);
const log = play(luck);
logs.innerHTML = '';
log.forEach((line) => {
const p = document.createElement('p');
p.innerHTML = line;
logs.appendChild(p);
});
});
document.querySelector('body').appendChild(h1);
document.querySelector('body').appendChild(input);
document.querySelector('body').appendChild(btn)
document.querySelector('body').appendChild(logs);