class Crapshoot::Tokens::Series

Public Class Methods

new(count, sides, drop = nil) click to toggle source
# File lib/crapshoot/tokens/series.rb, line 4
def initialize(count, sides, drop = nil)
  @count = count.to_i
  @sides = sides.to_i
  @drop = drop
end

Public Instance Methods

eval(stack) click to toggle source
# File lib/crapshoot/tokens/series.rb, line 10
def eval(stack)
  raise TooManyDiceException.new(@count) if @count > 50_000
  results_array = (1..@count).to_a.map{ roll_a_die }.sort
  numeric_result = results_array.inject(&:+)
  roll_description = results_array.join '+'
  case @drop
  when '^'
    max = results_array.last
    numeric_result -= max
    roll_description += "-#{max}"
  when 'v'
    min = results_array.first
    numeric_result -= min
    roll_description += "-#{min}"
  end
  @result = Result.new numeric_result
  @result.description = "(#{roll_description})"
  @result.detailed_description = [["#{@count}d#{@sides}#{@drop}", roll_description]]

  return @result
end
inspect() click to toggle source
# File lib/crapshoot/tokens/series.rb, line 32
def inspect
  "<Crapshoot::Tokens::Series dice=#{@count}d#{@sides} drop=#{@drop or 'nothing'}>"
end

Private Instance Methods

roll_a_die() click to toggle source
# File lib/crapshoot/tokens/series.rb, line 38
def roll_a_die
  # +1 because we can roll a zero
  SecureRandom.random_number(@sides) + 1
end