Class: BCDice::UserDefinedDiceTable
- Inherits:
-
Object
- Object
- BCDice::UserDefinedDiceTable
- Defined in:
- lib/bcdice/user_defined_dice_table.rb
Overview
テキストで定義したダイス表を実行するクラス
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(text) ⇒ UserDefinedDiceTable
constructor
A new instance of UserDefinedDiceTable.
-
#roll(randomizer: Randomizer.new) ⇒ Result?
ダイス表をロールする.
-
#valid? ⇒ Boolean
有効なダイス表かをチェックする。テキスト形式のミスだけではなく、抜けている出目や範囲外の出目がないか確認する。.
Constructor Details
#initialize(text) ⇒ UserDefinedDiceTable
Returns a new instance of UserDefinedDiceTable.
32 33 34 35 |
# File 'lib/bcdice/user_defined_dice_table.rb', line 32 def initialize(text) @text = text @rows = nil end |
Class Method Details
.roll(text) ⇒ Result nil
26 27 28 |
# File 'lib/bcdice/user_defined_dice_table.rb', line 26 def roll(text) new(text).roll() end |
Instance Method Details
#roll(randomizer: Randomizer.new) ⇒ Result?
ダイス表をロールする
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/bcdice/user_defined_dice_table.rb', line 40 def roll(randomizer: Randomizer.new) parse() index = roll_index(randomizer) unless valid? && index return nil end key = "#{index}:" row = @rows.find { |l| l.start_with?(key) } unless row return nil end chosen = row.delete_prefix(key).gsub('\n', "\n").strip Result.new.tap do |r| r.text = "#{@name}(#{index}) > #{chosen}" r.rands = randomizer.rand_results r.detailed_rands = randomizer.detailed_rand_results end end |
#valid? ⇒ Boolean
有効なダイス表かをチェックする。テキスト形式のミスだけではなく、抜けている出目や範囲外の出目がないか確認する。
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/bcdice/user_defined_dice_table.rb', line 64 def valid? parse() has_index = @rows.all? { |row| /^\d+:/.match?(row) } unless has_index return false end index_list = @rows.map(&:to_i).uniq.sort case @type when /^\d+D\d+$/ valid_d?(index_list) when "D66", "D66N" valid_d66?(index_list) when "D66A", "D66S" valid_d66_asc_sort?(index_list) when "D66D" valid_d66_desc_sort?(index_list) else false end end |