Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

Here is my dice package below. It allows for computing dice expressions, which I have created a bit of syntax for. Please give comments on it as this is my first package ever made public. And though it works, it may not be the best.

package RPG::Dice; require 5.005; use strict; use warnings; use Carp; use Exporter; use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK @EXPORT $VERSION); @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not expo +rt # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. # This allows declaration use RPG::Dice ':all'; # If you do not need this, moving things directly into @EXPORT or @EXP +ORT_OK # will save memory. %EXPORT_TAGS = ( 'all' => [ qw( &computeDice ) ] ); @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); @EXPORT = qw( &computeDice ); $VERSION = '0.85'; my($no_ltz_results) = 1; BEGIN { srand(); # intitalize Randomizer } #--------------------------------------------------------------------- #--------------------------------------------------------------------- sub computeDice { my($die_expr) = shift; my($top_rolls, $no_rolls, $die_face, $adj, $die_modifier, $list_rolls) + = 0; my($roll); my($result) = 0; my(@dice_rolls) = (); my(@temp_rolls) = (); if ($die_expr =~ /tt(\d+)/i) # Top rolls { $top_rolls = $1 * -1; $die_expr =~ s/tt(\d+)//i; } if ($die_expr =~ /l/i) # lowercase L { $list_rolls = 1; $die_expr =~ s/ *l *//i; } if ($die_expr =~ /(\d+)d(\d+)(([-+])(\d+))*/) { $no_rolls = $1; $die_face = $2; $adj = $4; $die_modifier = $5; while ($no_rolls-- > 0) { push(@dice_rolls, int(rand($die_face) + 1)); } } if (@dice_rolls) #@articles = sort {$a <=> $b} @files; { if ($top_rolls) { @dice_rolls = sort {$a <=> $b} @dice_rolls; @dice_rolls = splice(@dice_rolls, $top_rolls); } foreach $roll (@dice_rolls) { $result += $roll; } if ($adj =~ /-/) { $result -= $die_modifier; } else { $result += $die_modifier; } } else { $result = -1; } $result = 1 if (($no_ltz_results) && ($result < 1)); if ($list_rolls) { return($result, @dice_rolls); } else { return($result); } } 1; __END__ # Below is stub documentation for your module. You better edit it! =head1 NAME RPG::Dice - Perl extension for Dice rolling expressions. =head1 SYNOPSIS use RPG::Dice; $dice_roll = computeDice("1d10+1"); $dice_roll = computeDice("tt3 4d6"); # Stat-Roll (roll 4d6 take top +3) -or- $dice_roll = RPG::Dice::computeDice("1d10+1"); =head1 DESCRIPTION Dice is a set of subroutines for parsing dice expressions. RPG is an ongoing library for Role Playing Game systems written in Perl. =item computeDice("1d2+3"); Function evaluates the expression. for example the expression "1d2+3" means roll 1 '2 sided die' and add 3 to the result. Dice Expression Syntax: [tt#1] #2d#3[+/-#4] [l] Where: tt#1 = Take Top Number of rolls for result #2 = Number of times to roll die face #3 = Die Face #4 = Result Modifier l = List roll results (lower case L) Returns list with result as first item and rolls following. If tt is used it returns all the rolls. Example Syntax: "tt3 4d6" Roll 4 d6 and take top 3 rolls "5d10-3" Roll =head2 NOTE: An internal variable '$no_ltz_results', if set to false(0) will al +low for zero or negative results from expression. This is by default set to true. =head2 EXPORT computeDice(). =head1 AUTHOR Syrkres =head1 SEE ALSO perl(1). =cut

In reply to Re: Modules: Building blocks for the Daft Adventure by Syrkres
in thread Modules: Building blocks for the Daft Adventure by Tiefling

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
Domain Nodelet?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2022-05-27 00:26 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (94 votes). Check out past polls.