bcdice/BCDice

View on GitHub
lib/bcdice/dice_table/d66_parity_table.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module BCDice
  module DiceTable
    # 出目の偶奇による場合分け機能をもつD66表
    class D66ParityTable
      # @param key [String]
      # @param locale [Symbol]
      # @return [D66ParityTable]
      def self.from_i18n(key, locale)
        table = I18n.t(key, locale: locale, raise: true)
        new(table[:name], table[:odd], table[:even])
      end

      # @param name [String] 表の名前
      # @param odd [Array<String>] 左ダイスが奇数だったときの次層テーブル(サイズ6)
      # @param even [Array<String>] 左ダイスが偶数だったときの次層テーブル(サイズ6)
      def initialize(name, odd, even)
        @name = name
        @odd = odd.freeze
        @even = even.freeze
      end

      # 表を振る
      # @param randomizer [#roll_once] ランダマイザ
      # @return [String] 結果
      def roll(randomizer)
        dice1 = randomizer.roll_once(6)
        dice2 = randomizer.roll_once(6)

        if dice1.odd?
          second_table = @odd
        else
          second_table = @even
        end

        result = second_table[dice2 - 1]
        key = dice1 * 10 + dice2

        return RollResult.new(@name, key, result)
      end
    end
  end
end