Как да използвам JavaScript Math.random () като генератор на произволни числа

Често докато разработвате проекти, ще откриете, че търсите начини за генериране на произволни числа.

Най-честите случаи на използване за генериране на произволни числа са хазартни игри като хвърляне на зарове, разбъркване на игрални карти и въртене на рулетки.

В това ръководство ще научите как да генерирате произволно число, използвайки Math.random()метода, като създадете мини игра със зарове.

Методът Math.random ()

В Mathобекта в JavaScript е вграден обект, който има свойства и методи за извършване на математически изчисления.

Честото използване на Mathобекта е да се създаде произволно число с помощта на random()метода.

const randomValue = Math.random();

Но Math.random()методът всъщност не връща цяло число. Вместо това връща стойност с плаваща запетая между 0 (включително) и 1 (изключително). Също така имайте предвид, че връщаната стойност Math.random()е псевдослучайна по своя характер.

Случайните числа, генерирани от, Math.random()може да изглеждат случайни, но тези числа ще се повтарят и в крайна сметка ще покажат неслучаен модел за определен период от време.

Това е така, защото алгоритмичното генериране на произволни числа никога не може да бъде наистина случайно по своята същност. Ето защо ги наричаме генератори на псевдослучайни числа (PRNG).

За да научите повече за Math.random()метода, можете да разгледате това ръководство.

Функция генератор на случайни числа

Сега нека използваме Math.random()метода, за да създадем функция, която ще върне произволно цяло число между две стойности (включително).

const getRandomNumber = (min, max) => { return Math.floor(Math.random() * (max - min + 1)) + min; };

Нека разбием логиката тук.

В Math.random()метода ще се върне число с плаваща точка между 0 и 1 (не се брои).

Така че интервалите ще бъдат както следва:

[0 .................................... 1) [min .................................... max)

За да вземете предвид втория интервал, извадете мин от двата края. Това ще ви даде интервал между 0 и max-min.

[0 .................................... 1) [0 .................................... max - min)

Така че сега, за да получите произволна стойност, ще направите следното:

const x = Math.random() * (max - min)

Ето xслучайната стойност.

В момента maxе изключен от интервала. За да го включите, добавете 1. Също така, трябва да добавите minгърба, който е бил изваден по-рано, за да получите стойност между [min, max).

const x = Math.random() * (max - min + 1) + min

Добре, така че сега последната стъпка остава да се уверите, че xвинаги е цяло число.

const x = Math.floor(Math.random() * (max - min + 1)) + min

Можете да използвате Math.round()метода вместо floor(), но това ще ви даде неравномерно разпределение. Това означава, че и двете, maxи minще имат половин шанс да излязат като резултат. Използването Math.floor()ще ви даде идеално равномерно разпределение.

Така че сега, след като сте разбрали справедливо как работи случайното поколение, нека използваме тази функция, за да симулираме хвърляне на зарове.

Играта с подвижни зарове

В този раздел ще създадем наистина проста игра с мини зарове. Двама играчи въвеждат името си и ще хвърлят зара. Играчът, чиито зарове имат по-голям брой, ще спечели рунда.

Първо, създайте функция, rollDiceкоято симулира действието за хвърляне на заровете.

Вътре в тялото на функцията извикайте getRandomNumber()функцията с 1и 6като аргументи. Това ще ви даде произволно произволно число между 1 и 6 (включително и двете), точно както ще работят реалните зарове.

const rollDice = () => getRandomNumber(1, 6);

След това създайте две полета за въвеждане и бутон, както е показано по-долу:

 Roll Dice 

Когато кликнете върху бутона „Хвърляне на зарове“, вземете имената на играчите от полетата за въвеждане и извикайте rollDice()функцията за всеки играч.

const getRandomNumber = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; const rollDice = () => getRandomNumber(1, 6); document.getElementById("roll").addEventListener("click", function () { // fetch player names from the input fields const player1 = document.getElementById("player1").value; const player2 = document.getElementById("player2").value; // roll dice for both players const player1Score = rollDice(); const player2Score = rollDice(); // initialize empty string to store result let result = ""; // determine the result if (player1Score > player2Score) { result = `${player1} won the round`; } else if (player2Score > player1Score) { result = `${player2} won the round`; } else { result = "This round is tied"; } // display the result on the page document.getElementById("results").innerHTML = ` 

${player1} => ${player1Score}

${player2} => ${player2Score}

${result}

`; });

Можете да проверите полетата с имената на играчите и да прецизирате маркировката с някои CSS. За целите на краткостта го улеснявам в това ръководство.

Това е. Можете да разгледате демонстрацията тук.

Заключение

Така че генерирането на случайни числа в JavaScript все пак не е толкова случайно. Всичко, което правим, е да приемаме някои входни числа, използвайки някаква математика и да изплюваме псевдослучайно число.

За повечето приложения и игри, базирани на браузър, тази случайност е достатъчна и служи за целта си.

Това е всичко за това ръководство. Бъдете в безопасност и продължете да кодирате като звяр.