class BCDice::GameSystem::Dracurouge::YearTable
Public Class Methods
from_i18n(key, locale, years)
click to toggle source
@param key [String] @param locale [Symbol] @param years [Array<String>] @return [YearTable]
# File lib/bcdice/game_system/Dracurouge.rb, line 234 def self.from_i18n(key, locale, years) table = I18n.translate(key, locale: locale, raise: true) items = table[:items].zip(years) return new(table[:name], table[:year_title], items) end
new(name, year_title, items)
click to toggle source
@param name [String] @param year_title [String] @param items [Array<Array<(String, String)>>]
# File lib/bcdice/game_system/Dracurouge.rb, line 243 def initialize(name, year_title, items) @name = name @year_title = year_title @items = items.freeze end
Public Instance Methods
roll(randomizer)
click to toggle source
@param randomizer [Randomizer] @return [String]
# File lib/bcdice/game_system/Dracurouge.rb, line 251 def roll(randomizer) tens, ones = randomizer.roll_barabara(2, 6) index = (tens - 1) * 6 + (ones - 1) text, year_expr = @items[index] interim_expr = year_expr.gsub(/\d+D6+/) { |expr| roll_d6x(expr, randomizer) } year = ArithmeticEvaluator.eval(interim_expr.gsub("×", "*")) "#{@name}(#{tens}#{ones}) > #{text} > #{@year_title}:#{year_expr} > (#{interim_expr}) > #{@year_title}:#{year}年" end
Private Instance Methods
roll_d6x(expr, randomizer)
click to toggle source
D66と同様の形式でD666などにも対応したダイスロール
@param expr [String] @param randomizer [Randomizer] @return [Integer]
# File lib/bcdice/game_system/Dracurouge.rb, line 269 def roll_d6x(expr, randomizer) times, sides = expr.split("D", 2) times = times.to_i list = Array.new(times) do randomizer.roll_barabara(sides.length, 6) .reverse # テスト系の互換性のために反転する .map.with_index { |x, idx| x * (10**idx) } .sum() end return list.sum() end