Source code for dicetables.roller

import random
from typing import Optional, List

from dicetables.tools.alias_table import AliasTable


[docs]class Roller(object): def __init__(self, events, random_generator: Optional[random.Random] = None): """ :param events: any IntegerEvents :param random_generator: any instance of random.Random. defaults to python default random instance """ self._alias_table = AliasTable(events.get_dict()) self._random_generator = random_generator if not self._random_generator: self._random_generator = random.Random() @property def alias_table(self) -> AliasTable: """ here is `a nice explanation of alias tables: <http://www.keithschwarz.com/darts-dice-coins/>`_ :return: dicetables.tools.AliasTable """ return self._alias_table @property def random_generator(self) -> random.Random: return self._random_generator
[docs] def roll(self) -> int: length = self._random_generator.randrange(self._alias_table.length) height = self._random_generator.randrange(self._alias_table.height) return self._alias_table.get(length, height)
[docs] def roll_many(self, times) -> List[int]: """ :param times: int - how many times to roll :return: [int,..] - the value of each roll """ return [self.roll() for _ in range(times)]