2017 © Pedro Peláez
 

library d

Dice rolling library

image

zero-config/d

Dice rolling library

  • Tuesday, February 21, 2017
  • by johmanx10
  • Repository
  • 1 Watchers
  • 0 Stars
  • 6 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Introduction

D is a dice rolling library. It allows for implementations of dice rolling applications and logic., (*1)

See also zero-config/d-roll, an application implementing D., (*2)

Installation

composer require zero-config/d:^2.0

Entities

The library implements the following entities:, (*3)

Entity Result Implements Role
D RoleInterface DieInterface Represents a single die.
Roll int RoleInterface Represents the outcome of a die roll.
Dice RoleIteratorInterface, DieInterface DiceInterface, DieIteratorInterface Represents multiple dice. It can roll for them at once or iterate over them.

The entity that represents a die is called D because die is a reserved keyword in the language and it matches with the shorthand name given to it by players all over the world., (*4)

Services

The library implements the following services:, (*5)

Service Result Implements Role
Interpreter DiceInterface DiceInterpreterInterface Interpret user input into a set of dice.
RollIterator RollInterface RollIteratorInterface Iterate over rolls.

Factories

The library implements the following factories:, (*6)

Factory Result Implements
DieFactory DieInterface, DiceInterface DieFactoryInterface, DiceFactoryInterface
RollFactory RollInterface RollFactoryInterface

Number generator

The number generator comes from the hylianshield/number-generator package by implementing its interface, the number generator can be swapped out., (*7)

Use case

You may want to use a different number generator, because the default number generator is not random enough to your taste. Let's see what is needed to create an implementation with a custom number generator:, (*8)

<?php
use ZeroConfig\D\RollFactory;
use ZeroConfig\D\DieFactory;
use ZeroConfig\D\Interpreter;
use HylianShield\NumberGenerator\NumberGeneratorInterface;

/** @var NumberGeneratorInterface $myCustomNumberGenerator */
$interpreter = new Interpreter(
    new DieFactory(
        new RollFactory(),
        $myCustomNumberGenerator
    )    
);

$dice  = $interpreter->interpretDice('2d20+10');
$total = $dice->getModifier();

foreach ($dice->roll() as $roll) {
    $total += $roll->getValue();
}

echo $total;

This will result in a number between 11 and 50., (*9)

One could make this a bit more verbose by iterating over the dice:, (*10)

<?php
/** @var \ZeroConfig\D\DiceInterface $dice */
foreach ($dice as $die) {
    echo sprintf(
        'd%d -> %d',
        $die->getNumberOfEyes(),
        $die->roll()->getValue()
    ) . PHP_EOL;
}
echo sprintf('+%d', $dice->getModifier());

This will output something like:, (*11)

d20 -> 19
d20 -> 4
+10

Complex interpretations.

If you want to interpret multiple dice configurations at once and also have them grouped and sorted, the interpreter has an additional method, interpretList., (*12)

<?php
/** ZeroConfig\D\DiceInterpreterInterface $interpreter */
$list = $interpreter->interpretList('3d6', 'D20', '4+10', '4+8', '1 d4');

The list will contain the following structure:, (*13)

20 => Dice => Die x1 (+0),
6  => Dice => Die x3 (+0),
4  => Dice => Die x3 (+8)

The Versions

21/02 2017

dev-master

9999999-dev

Dice rolling library

  Sources   Download

Apache-2.0

The Requires

 

The Development Requires

game die dice d20 d rolling gamble gambling d6

21/02 2017

2.0.0

2.0.0.0

Dice rolling library

  Sources   Download

Apache-2.0

The Requires

 

The Development Requires

game die dice d20 d rolling gamble gambling d6

11/02 2017

1.0.0

1.0.0.0

Dice rolling library

  Sources   Download

Apache-2.0

The Requires

 

The Development Requires

game die dice d20 d rolling gamble gambling d6