Class: BCDice::CommonCommand::AddDice::Node::DiceRollWithFilter
- Inherits:
-
Object
- Object
- BCDice::CommonCommand::AddDice::Node::DiceRollWithFilter
- Defined in:
- lib/bcdice/common_command/add_dice/node.rb
Overview
フィルタ処理付きダイスロールのノード。
ダイスロール後、条件に従って出目を選択し、和を求める。
Defined Under Namespace
Classes: Filter
Constant Summary collapse
- KEEP_HIGHEST =
大きな出目から複数個取る
Filter.new( :KH, lambda { |sorted_values, n| sorted_values.reverse.take(n) } ).freeze
- KEEP_LOWEST =
小さな出目から複数個取る
Filter.new( :KL, lambda { |sorted_values, n| sorted_values.take(n) } ).freeze
- DROP_HIGHEST =
大きな出目から複数個除く
Filter.new( :DH, lambda { |sorted_values, n| sorted_values.reverse.drop(n) } ).freeze
- DROP_LOWEST =
小さな出目から複数個除く
Filter.new( :DL, lambda { |sorted_values, n| sorted_values.drop(n) } ).freeze
Instance Method Summary collapse
-
#eval(game_system, randomizer) ⇒ Integer
ノードを評価する(ダイスを振り、出目を選択して和を求める).
-
#expr(game_system) ⇒ String
文字列に変換する.
- #include_dice? ⇒ Boolean
-
#initialize(times, sides, n_filtering, filter) ⇒ DiceRollWithFilter
constructor
ノードを初期化する.
-
#output ⇒ String
メッセージへの出力を返す.
-
#s_exp ⇒ String
ノードのS式を返す.
Constructor Details
#initialize(times, sides, n_filtering, filter) ⇒ DiceRollWithFilter
ノードを初期化する
499 500 501 502 503 504 505 506 507 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 499 def initialize(times, sides, n_filtering, filter) @times = times @sides = sides @n_filtering = n_filtering @filter = filter # ダイスを振った結果の出力 @text = nil end |
Instance Method Details
#eval(game_system, randomizer) ⇒ Integer
ノードを評価する(ダイスを振り、出目を選択して和を求める)
評価結果は出目の合計値になる。 出目はランダマイザに記録される。
516 517 518 519 520 521 522 523 524 525 526 527 528 529 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 516 def eval(game_system, randomizer) times = @times.eval(game_system, nil) sides = @sides.eval(game_system, nil) n_filtering = @n_filtering.eval(game_system, nil) sorted_values = randomizer.roll(times, sides).sort total = @filter .apply[sorted_values, n_filtering] .sum() @text = "#{total}[#{sorted_values.join(',')}]" return total end |
#expr(game_system) ⇒ String
文字列に変換する
538 539 540 541 542 543 544 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 538 def expr(game_system) times = @times.eval(game_system, nil) sides = @sides.eval(game_system, nil) n_filtering = @n_filtering.eval(game_system, nil) "#{times}D#{sides}#{@filter.abbr}#{n_filtering}" end |
#include_dice? ⇒ Boolean
532 533 534 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 532 def include_dice? true end |
#output ⇒ String
メッセージへの出力を返す
548 549 550 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 548 def output @text end |
#s_exp ⇒ String
ノードのS式を返す
554 555 556 |
# File 'lib/bcdice/common_command/add_dice/node.rb', line 554 def s_exp "(DiceRollWithFilter #{@times.s_exp} #{@sides.s_exp} #{@filter.abbr.inspect} #{@n_filtering.s_exp})" end |