Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Rate my Die class

Name: Anonymous 2012-06-30 5:37

module DMT

    # Custom die class to take into account
    # Multiple dice, bonuses added to dice and dropped dice
    class Die

        # Standard initializer
        def self.[] str
            raise TypeError, "Argument must be a String" unless str.is_a? String
            raise ArgumentError, "Error: Malformed Argument\
                \nUsage:\
                \n\t<Number>d<Die>\
                \n\t<Number>d<Die><+ or -><Bonus>\
                \n\t<Number>d<Die><+ or -><Bonus> drop <NumDropped>\
                \nExamples:\
                \n\tDMT::Die[\"3d6\"]\
                \n\tDMT::Die[\"3d6+4\"], DMT::Die[\"3d6-2\"]\
                \n\tDMT::Die[\"4d6 drop 1\"], DMT::Die[\"4d6-2 drop 1\"]\
                \n" unless str.match /\A(\d+d\d+\ ?([\+\-]\ ?\d+)?(\ drop\ \d+)?)\z/
            args = (str.split /\D/).reject{|s| s.empty?}.map{|i| i.to_i}
            if str.include? "drop" then
                if str.include? "-" then
                    new args[0], args[1], -args[2], args[3]
                else
                    (args.size.eql? 3) ? (new args[0], args[1], 0, args[2]) : (new *args)
                end
            else
                if str.include? "-" then
                    new args[0], args[1], -args[2]
                else
                    new *args
                end
            end
        end

        # Die roller, produces a random number
        def roll
            damage = @bonus
            dies = []
            @number.times { dies.push (rand @value) + 1 }
            (dies.sort.last dies.size - @drop).each { |d| damage += d }
            damage
        end

        def inspect
            "<Die: #{@number}d#{@value}" +
                (@bonus.zero?? "" : @bonus < 0 ? @bonus.to_s : "+#{@bonus}") +
                (@drop.zero?? "" : " Drop #{@drop}") + ">"
        end
    protected
        def initialize num, val, bonus = 0, drop = 0
            @number = num
            @value = val
            @bonus = bonus
            @drop = drop
        end
    end
end

Name: Anonymous 2012-07-02 8:33

module Main where

import System.Random
import Data.List

data Die = Die { number :: Integer
               , die :: Integer
               , bonus :: Integer
               , drop :: Integer
               , rnd :: StdGen
               }

instance Show Die where
    show (Die n d b dr _) = show n ++ ('d':show d) ++
                            if b == 0 then "" else ('+':show b) ++
                            if dr == 0 then "" else (" drop " ++ show dr)

roll :: Die -> (Integer, Die)
roll (Die n d b dr g) = (b + sum (sort rnds), Die n d b dr ng)
                      where (rnds, ng) = rndlist g (n - dr)
                            rndlist g 0 = ([], g)
                            rndlist g i = (a:a', g'')
                                        where (a, g') = randomR (1, d) g
                                              (a', g'') = rndlist g' (i - 1)

rolls :: Die -> [Integer]
rolls d = n : rolls nd
        where (n, nd) = roll d

Stop using your shitty unintelligible languages of yesterday.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List