RosettaCodeData/Task/RPG-attributes-generator/PHP/rpg-attributes-generator-2.php

41 lines
1.1 KiB
PHP
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
<?php
class CharacterGenerator {
public static function roll(): array
{
$attributes = array_map(fn($stat) => self::rollStat(), range(1, 6));
if (!self::meetsRequirements($attributes)) {
return self::roll();
}
return $attributes;
}
private static function rollStat(): int
{
$rolls = d(6, 4);
return array_sum($rolls) - min($rolls);
}
private static function meetsRequirements(array $attributes): bool
{
$twoOrMoreOverFifteen = array_reduce($attributes, fn($n, $stat) => $n + ($stat > 15)) >= 2;
$sumOfAttributesMeetsMinimum = array_sum($attributes) >= 75;
return $sumOfAttributesMeetsMinimum && $twoOrMoreOverFifteen;
}
}
function d(int $d, int $numberToRoll): array
{
return array_map(fn($roll) => rand(1, $d), range(1, $numberToRoll));
}
$characterAttributes = CharacterGenerator::roll();
$attributesString = implode(', ', $characterAttributes);
$attributesTotal = array_sum($characterAttributes);
print "Attribute Total: $attributesTotal\n";
print "Attributes: $attributesString";