Math.random () basierte Funktion funktioniert nicht in einer anderen Funktion
Posted: 15 Feb 2025, 17:13
Ich habe einen Simulator für ein TTRPG mit "Explodierenden Würfel" codiert. Wenn Sie eine maximale Zahl auf einer Sterbe rollen, können Sie diese sterben und das Ergebnis zur maximalen Nummer hinzufügen. Das bedeutet, dass es 100% unmöglich ist, ein Ergebnis zu erhalten, das einem Vielfachen der maximalen Zahl entspricht. Und es funktioniert, es kann niemals acht gleich sind (getestet mit einem unendlichen endenden während der Schleife). Würfel explodieren und mit Vorteil/Nachteil rollen. In multidiceroll () verwende ich explosivediceroll () und führe es durch Schleifen aus und so weiter, um mehrere Würfel und Vorteile zu simulieren. rollt die maximale Nummer irgendwie in der Multidiceroll () -Funktion, was unmöglich sein sollte. Warum ist das? Wie löste ich es auch? Ich weiß nicht, ob das verwandt oder hilfreich ist. Während Schleifen allgemeines Design: < /p>
für immer fortgesetzt, es funktioniert ordnungsgemäß
wurde schnell angehalten und endete immer in der Konsole:
Code: Select all
while([function with an input of a 1d8, no advantage] != 8) {}
< /code>
Die Idee ist, dass, da es einfach unmöglich ist, eine 8 zu bekommen, die während der Schleife für immer fortgesetzt wird. Ich habe jedes Mal höchstens ein paar Sekunden gewartet. < /P>
explosiveDiceRoll()
Code: Select all
multiDiceRoll()
Code: Select all
1d8
8,8 - SHOULD NOT EQUAL
[ 8 ]
< /code>
function explosiveDiceRoll(maxRoll) {
let roll = diceRoll(maxRoll);
let sum = roll;
while(roll === maxRoll) { //Reroll and add everytime it hits the max roll
roll = diceRoll(maxRoll);
if(roll === 0) console.log("zero error");
sum += roll
}
return sum;
}
< /code>
function multiDiceRoll(diceString,advantage) {
diceString = diceString.split("d");
// console.log(diceString);
let diceAmount= diceString[0];
let diceType = diceString[1];
console.log(`${diceAmount}d${diceType}`);
let results = [];
for(let i = 0; i
export function diceRoll(maxRoll) {
return Math.ceil(Math.random()*maxRoll);
}