Dice gen and analyser script for RPGs: comments sought
richardb at sailmaker.co.nospam.uk
Tue Sep 5 03:17:48 CEST 2006
Hi fellow Pythonistas,
I've been using Python in anger for some time, and I must say, as I
wrote in <http://macprang.sourceforge.net/>:
"It's refreshing beyond words to use a language that so freely combines
such a small, clean syntax with such a powerful synthesis of
procedural, object-oriented and functional techniques."
My (hardcore C++) workplace is now very much converted to Python for
scripting tasks! We have completely abandoned Unix and DOS
shell-script, and Perl. We drive our entire "build-for-QA" process,
including code-signing, with Python and also use it for all our
automated nightly builds and unit tests.
So, inspired by the Python cookbook article 17.13, and because the
subject interests me, I've bashed out a module in my own time that can
do brute force and monte carlo analysis of dice under various RPG
* vanilla rolls of n x-sided dice, the result being multiplied by y
(usual d20 system ndx*y)
* as above, but the lowest m rolls are discarded
(optional d20 char gen rules)
* dice beating a threshold (Storyteller-style system),
with optional roll again
* opposed sorted rolls (Risk-style system).
The 1.0 version is at http://www.sailmaker.co.uk/newfiles/dice.py and
is public domain.
Before you ask, yes I'm fully aware of Newton's binomial theorem and
its generaliziations. The point of this code is to however to
generalise, exercise and accumulate the brute force and Monte Carlo
methods across various evaluatuon rules.
All comments welcomed, cc to email preferred merely because it shows up
sooner for me and is less likely to be missed.
Comments, insights and overall evaluations are especially welcomed re:
* Cleanliness of design
* Pythonicity of design
* Pythonicity of code
* Efficiency of code
* Quality of docstrings
* Conformance with modern docstring standards
* Conformance with coding standards e.g. PEP 8
I look forward to receiving your comments and criticisms.
More information about the Python-list