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