jifish/ezdice

一个用于解析骰子表示法和掷骰子的简单PHP库。

1.0.0 2022-09-25 13:45 UTC

This package is auto-updated.

Last update: 2024-09-25 18:27:34 UTC


README

一个用于解析骰子表示法和掷骰子的简单PHP库。

适用于PHP 7+。

为什么使用EZDice?

EZDice是因为我对类似库不满意而编写的。与其他产品相比,EZDice有以下优势

  • 无冗余。EZDice是一个简单的类,没有依赖关系。
  • 提供每次掷骰子的结果,而不仅仅是总和。
  • 设计用于人类而非机器的宽容解析器。
  • 可以选择轻松替换RNG。
  • MIT许可,确保您可以在任何项目中自由使用。

使用方法

这里是一个基本示例

require 'ezdice.php';

$ezd = new ezdice\EZDice();
echo($ezd->roll('1d20+2d4'));
echo(' Rolls:');
foreach($ezd->getDiceStates() as $die) {
    echo(' ['.$die['value'].'] ');
}

示例输出

23 Rolls: [17] [4] [2]

使用Composer安装

您不必使用Composer将EZDice包含到项目中,但您可以选择

composer require jifish/ezdice

方法

roll($diceStr)

$diceStr 解析为骰子表示法,然后掷这些骰子。返回所有掷骰子和修正项的总和,或者如果没有找到,则返回 false

解析器非常宽容,忽略空白符和它不识别的其他内容。它也不区分大小写。以下简要介绍了骰子表示法。

getTotal()

返回最后一次掷骰子的总和。

getDiceStates()

返回一个描述最后一次掷骰子后骰子状态的 (array)。每个骰子也是一个 (array),具有以下键

  • sides - (int) 骰子的面数
  • value - (int) 骰子掷出的值
  • dropped - (bool) true 如果此骰子被丢弃,否则 false。丢弃的骰子不计入总和。

getModifier()

返回表示最后一次掷骰子中所有修正项的总和的 (string)。如果没有修正项或它们相互抵消,则返回空字符串。如果需要,您可以将其转换为 (int)

例如,如果您掷出 1d8+10+1d4-2,则此方法将返回 +8

strContainsDice($diceStr)

解析 $diceStr 并返回 true 如果它至少包含一个掷骰子,否则返回 false。用于验证用户输入很有用。没有骰子的修正项不计入。

骰子表示法

  • 骰子表示法的形式为 (骰子数量)d(骰子面数)。例如 2d10
  • 可以使用 +- 运算符链式连接额外的骰子。例如 2d10+1d6
  • 也可以指定修正项。例如 2d10-5
  • 可以使用 d% 作为百分比骰子的简写。 1d%1d100 等价。
  • 将掷骰子后附加 -L 以丢弃该组中的最低骰子,或 -H 以丢弃最高骰子。丢弃的骰子不包括在总和内。例如 2d20-L 将掷出 2 个二十面骰子并丢弃最低的。您也可以指定丢弃的骰子数量,例如 6d6-H3 将丢弃最高的 3 个掷骰结果。
  • 目前没有提供用于Fudge骰子的表示法。您可以使用 1d3-2 代替。
  • 空白符以及任何未识别为骰子或修正项的内容都视为 + 运算符。例如 foo10 1d4bar1d4 5 等同于 5+1d4+1d4+10,或者简单地 2d4+15

替换随机数生成器

默认情况下使用 mt_rand() 作为RNG,这对于大多数应用程序来说应该很好。如果您想更改此设置,例如要标准化骰子掷骰结果,您可以扩展类并重写方法 getRandomNumber($max)

class WeightedDice extends ezdice\EZDice {
    protected function getRandomNumber($max) {
        if (mt_rand(0,1)) return $max;
        return mt_rand(1,$max);
    }
}

法律条款

在MIT许可下发布。版权所有(c)2021约瑟夫·福勒。