Class: BCDice::Randomizer
- Inherits:
-
Object
- Object
- BCDice::Randomizer
- Defined in:
- lib/bcdice/randomizer.rb
Overview
乱数生成器
Defined Under Namespace
Classes: DetailedRandResult
Constant Summary collapse
- UPPER_LIMIT_DICE_TIMES =
200
- UPPER_LIMIT_DICE_SIDES =
10000
- UPPER_LIMIT_RANDS =
10000
Instance Attribute Summary collapse
- #detailed_rand_results ⇒ Array<DetailedRandResult> readonly
-
#rand_results ⇒ Array<Array<(Integer, Integer)>>
readonly
ダイスの出目一覧.
Instance Method Summary collapse
-
#initialize ⇒ Randomizer
constructor
A new instance of Randomizer.
-
#roll_barabara(times, sides) ⇒ Array<Integer>
複数個のダイスを振る.
-
#roll_d66(sort_type) ⇒ Integer
D66のダイスロールを行う.
-
#roll_d9 ⇒ Integer
d10を0~9として扱うダイスロール.
-
#roll_index(sides) ⇒ Integer
ダイス表などでindexを参照する用のダイスロール.
-
#roll_once(sides) ⇒ Integer
1回だけダイスロールを行う.
-
#roll_sum(times, sides) ⇒ Integer
複数個のダイスを振って、その合計を求める.
-
#roll_tens_d10 ⇒ Integer
十の位をd10を使って決定するためのダイスロール.
Constructor Details
#initialize ⇒ Randomizer
Returns a new instance of Randomizer.
11 12 13 14 |
# File 'lib/bcdice/randomizer.rb', line 11 def initialize @rand_results = [] @detailed_rand_results = [] end |
Instance Attribute Details
#detailed_rand_results ⇒ Array<DetailedRandResult> (readonly)
20 21 22 |
# File 'lib/bcdice/randomizer.rb', line 20 def detailed_rand_results @detailed_rand_results end |
#rand_results ⇒ Array<Array<(Integer, Integer)>> (readonly)
Returns ダイスの出目一覧.
17 18 19 |
# File 'lib/bcdice/randomizer.rb', line 17 def rand_results @rand_results end |
Instance Method Details
#roll_barabara(times, sides) ⇒ Array<Integer>
複数個のダイスを振る
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/bcdice/randomizer.rb', line 36 def (times, sides) if @rand_results.size + times > UPPER_LIMIT_RANDS raise TooManyRandsError end if times <= 0 || times > UPPER_LIMIT_DICE_TIMES return [] end Array.new(times) { roll_once(sides) } end |
#roll_d66(sort_type) ⇒ Integer
D66のダイスロールを行う
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/bcdice/randomizer.rb', line 106 def roll_d66(sort_type) dice_list = Array.new(2) { roll_once(6) } case sort_type when D66SortType::ASC dice_list.sort! when D66SortType::DESC dice_list.sort!.reverse! end return dice_list[0] * 10 + dice_list[1] end |
#roll_d9 ⇒ Integer
d10を0~9として扱うダイスロール
96 97 98 99 100 101 |
# File 'lib/bcdice/randomizer.rb', line 96 def roll_d9() dice = rand_inner(10) - 1 push_to_detail(:d9, 10, dice) return dice end |
#roll_index(sides) ⇒ Integer
ダイス表などでindexを参照する用のダイスロール
75 76 77 |
# File 'lib/bcdice/randomizer.rb', line 75 def roll_index(sides) roll_once(sides) - 1 end |
#roll_once(sides) ⇒ Integer
1回だけダイスロールを行う
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/bcdice/randomizer.rb', line 61 def roll_once(sides) if sides <= 0 || sides > UPPER_LIMIT_DICE_SIDES return 0 end dice = rand_inner(sides) push_to_detail(:normal, sides, dice) return dice end |
#roll_sum(times, sides) ⇒ Integer
複数個のダイスを振って、その合計を求める
53 54 55 |
# File 'lib/bcdice/randomizer.rb', line 53 def roll_sum(times, sides) (times, sides).sum() end |
#roll_tens_d10 ⇒ Integer
十の位をd10を使って決定するためのダイスロール
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/bcdice/randomizer.rb', line 81 def roll_tens_d10() # rand_innerの戻り値を10倍すればすむ話なのだが、既存のテストとの互換性の為に処理をする dice = rand_inner(10) if dice == 10 dice = 0 end ret = dice * 10 push_to_detail(:tens_d10, 10, ret) return ret end |