Class: RpgLib::DiceRoller

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/rpg_lib/dice_roller.rb

Overview

DiceRoller

Constant Summary collapse

DICE_REGEXP =
/(\d*)d(\d+)((dl)(\d*)|(dh)(\d*))?/

Instance Method Summary collapse

Instance Method Details

#random_value_in_range(range) ⇒ Object



29
30
31
# File 'lib/rpg_lib/dice_roller.rb', line 29

def random_value_in_range(range)
  rand(range)
end

#roll(dice) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/rpg_lib/dice_roller.rb', line 40

def roll(dice)
  local_dice = dice.dup
  loop do
    m = local_dice.downcase.match(DICE_REGEXP)
    break if m.nil?
    rolled_value = roll_dice(RollDescriptor.new(m))
    local_dice[m.begin(0)...m.end(0)] = rolled_value.to_s
  end
  eval(local_dice)
end

#roll_and_ignore(dice, ignored_values) ⇒ Object



51
52
53
54
55
56
57
58
# File 'lib/rpg_lib/dice_roller.rb', line 51

def roll_and_ignore(dice, ignored_values)
  rolled_value = nil
  loop do
    rolled_value = roll(dice)
    break unless ignored_values.include?(rolled_value)
  end
  rolled_value
end

#roll_dice(roll_descriptor) ⇒ Object



33
34
35
36
37
38
# File 'lib/rpg_lib/dice_roller.rb', line 33

def roll_dice(roll_descriptor)
  rolled_values = roll_all_dice_from_descriptor(roll_descriptor)
  drop_lowest(rolled_values, roll_descriptor)
  drop_highest(rolled_values, roll_descriptor)
  total(rolled_values)
end