tsgammon-core
Version:
A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui
41 lines (40 loc) • 1.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.rollMathRandom = exports.presetDiceSource = exports.randomDiceSource = void 0;
function diceSource(doRoll) {
const doRollDices = () => ({ dice1: doRoll(), dice2: doRoll() });
return {
roll: doRollDices,
openingRoll: () => asOpeningRoll(doRollDices),
};
}
exports.randomDiceSource = diceSource(rollMathRandom);
/**
* 指定された配列が尽きるまでは、その内容がロール結果として返る
* 尽きた後は、randomDiceSourceと同じ動作をする
* @param pips ロール結果として返したい目の配列
*/
function presetDiceSource(...pips) {
const pipEntries = pips.entries();
const doRoll = () => {
const value = pipEntries.next();
return value.done ? rollMathRandom() : value.value[1];
};
return diceSource(doRoll);
}
exports.presetDiceSource = presetDiceSource;
function asOpeningRoll(src) {
let counter = 0;
do {
const dices = src();
if (dices.dice1 !== dices.dice2) {
return dices;
}
counter++;
} while (counter < 1000);
throw new Error('Too many doublets');
}
function rollMathRandom() {
return (Math.floor(Math.random() * 6) + 1);
}
exports.rollMathRandom = rollMathRandom;