Sha256: 0a96b177341fed0d058affa5625b76a683a98e8661b53b391f956812075a2456

Contents?: true

Size: 1.35 KB

Versions: 10

Compression:

Stored size: 1.35 KB

Contents

module Ludy

  # dices, e.g., 4d6, 2d20, etc.
  class Dices
    attr_reader :amounts, :faces
    # the default dice is 1d20
    def initialize amounts = 1, faces = 20
      @amounts = amounts
      @faces = faces
    end
    # roll the dices
    def roll
      @amounts.roll @faces
    end
    # the possible min value these dices would roll out.
    def min; @amounts; end
    # the possible max value these dices would roll out.
    def max; @amounts*@faces; end
  end

  # a dice set could contain 4d6 + 2d20 and more dices.
  class DiceSet
    attr_reader :min, :max
    def initialize *args
      @diceset = args
      @min = @max = 0
      @diceset.each{ |i|
        @min += i.min
        @max += i.max
      }
    end
    # roll the dice set
    def roll
      result = 0
      @diceset.each { |i| result += i.roll }
      result
    end
    # put dices into this dice set
    def << dices
      @diceset << dices
      @min += dices.min
      @max += dices.max
      self
    end
  end

end

class Numeric
  # roll dices (with amounts equal to self.to_i) with faces = ?
  def roll faces = 20
    return nil unless self > 0 &&  self.integer? &&
                     faces > 0 && faces.integer?
    result = 0
    1.step(self){ |i| result += rand(faces) + 1 }
    result
  end

  # create dices with faces = ?
  def dices faces = 20
    Ludy::Dices.new self, faces
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
ludy-0.1.2 lib/ludy/dices.rb
ludy-0.1.1 lib/ludy/dices.rb
ludy-0.1.0 lib/ludy/dices.rb
ludy-0.1.5 lib/ludy/dices.rb
ludy-0.1.6 lib/ludy/dices.rb
ludy-0.1.7 lib/ludy/dices.rb
ludy-0.1.8 lib/ludy/dices.rb
ludy-0.1.9 lib/ludy/dices.rb
ludy-0.1.3 lib/ludy/dices.rb
ludy-0.1.4 lib/ludy/dices.rb