/* https://en.wikipedia.org/wiki/Bo_Bing_(game) */ function randomNumber (minimum, maximum, times = 1) { let resultNumber = 0; for (currentRandom = 0; currentRandom < times; currentRandom++) { resultNumber = Math.floor(Math.random() * (maximum - minimum) + minimum); }; return resultNumber; }; function rollDice(times = 1) { let value_dices = []; let value_current = 0; let dices_amount_current = value_dices.length; for (rolls = 0; rolls < times; rolls++) { for (dices_max = 6; dices_amount_current < dices_max; dices_amount_current = value_dices.length) { value_current = randomNumber(1, 6); if (randomNumber(1, 2) == 1) { value_dices.push(value_current); } else { value_dices.unshift(value_current); }; }; }; return value_dices; }; function rollDiceWithResults() { let value_dices = rollDice(); let value_current = 0; let value_dices_numbers = { 'one': 0, 'two': 0, 'three': 0, 'four': 0, 'five': 0, 'six': 0 }; /* The first dice is always the zeroth dice! */ for (diceNumber = 0; diceNumber < value_dices.length; diceNumber++) { value_current = value_dices[diceNumber]; switch (value_current) { case 1: value_dices_numbers.one++; break; case 2: value_dices_numbers.two++; break; case 3: value_dices_numbers.three++; break; case 4: value_dices_numbers.four++; break; case 5: value_dices_numbers.five++; break; case 6: value_dices_numbers.six++; break; }; }; let result_number = 0; /* The highest of each place starts as an integer, the rest is an increment by .1. */ if ((value_dices_numbers.four == value_dices.length) || (value_dices_numbers.one == value_dices.length)) { /* Six Fours */ result_number = 1; if (value_dices_numbers.one > value_dices_numbers.four) { /* Six Ones */ result_number = result_number + 0.1; }; } else if (value_dices.every( (val, i, arr) => val === arr[0] )) { /* Six of a Kind */ result_number = 1.2; } else if (value_dices_numbers.four == 5) { /* Five Fours */ result_number = 1.3; } else if ((value_dices_numbers.one == 5) || (value_dices_numbers.two == 5) || (value_dices_numbers.three == 5) || (value_dices_numbers.five == 5) || (value_dices_numbers.six == 5)) { /* Five of a Kind */ result_number = 1.4; } else if (value_dices_numbers.four == 4) { /* Four Fours */ result_number = 1.5; } else if (value_dices_numbers.every( (val, i, arr) => val === arr[0] )) { result_number = 2; }; let results = {'dice': value_dices, 'result': result_number}; return results; }