class BCDice::GameSystem::AlchemiaStruggle
Constants
- ALIAS
- ARTICLE_TABLES
- CATALYST_TABLES
- DRAMA_SEQUENCE_TABLES
- HELP_MESSAGE
- ID
- NAME
- ROLL_REG
- SORT_KEY
- TABLES
Public Class Methods
new(command)
click to toggle source
Calls superclass method
BCDice::Base::new
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 46 def initialize(command) super(command) @sort_add_dice = true # 加算ダイスのソート有 @sort_barabara_dice = true # バラバラダイスでソート有 @round_type = RoundType::CEIL # 割り算をした時の端数切り上げ end
Public Instance Methods
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 54 def eval_game_system_specific_command(command) c = ALIAS[command] || command try_roll_alchemia(c) || try_roll_uldice(c) || roll_tables(c, TABLES) end
make_dice_text(dice_list)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 134 def make_dice_text(dice_list) "[#{dice_list.sort.join ', '}]" end
make_roll_and_pick_text(rolled_dice_list, pick_dice_count, picked_dice_list)
click to toggle source
実際にピックできた数と要求されたピック数は一致しないケースが(ルール上)あるため、 pick_dice_count はパラメータとして受ける必要がある。
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 130 def make_roll_and_pick_text(rolled_dice_list, pick_dice_count, picked_dice_list) "(#{rolled_dice_list.size}D6|>#{pick_dice_count}D6) > #{make_dice_text(rolled_dice_list)} >> #{make_dice_text(picked_dice_list)} > #{picked_dice_list.sum}" end
make_roll_text(rolled_dice_list)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 125 def make_roll_text(rolled_dice_list) "(#{rolled_dice_list.size}D6) > #{make_dice_text(rolled_dice_list)}" end
pick_maximum(dice_list, pick_dice_count)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 117 def pick_maximum(dice_list, pick_dice_count) if dice_list.size <= pick_dice_count dice_list else dice_list.sort.pop(pick_dice_count) end end
roll_alchemia(roll_dice_count)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 104 def roll_alchemia(roll_dice_count) @randomizer.roll_barabara(roll_dice_count, 6) end
roll_alchemia_and_pick(roll_dice_count, pick_dice_count)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 108 def roll_alchemia_and_pick(roll_dice_count, pick_dice_count) rolled_dice_list = roll_alchemia(roll_dice_count) return { rolled_dices: rolled_dice_list, picked_dices: pick_maximum(rolled_dice_list, pick_dice_count), } end
try_roll_alchemia(command)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 62 def try_roll_alchemia(command) match = ROLL_REG.match(command) return nil unless match roll_dice_count = match[1].to_i if match[2].nil? # ロールのみ(ピックなし): result = roll_alchemia(roll_dice_count) return make_roll_text(result) else # ロールして最大値をピック: pick_dice_count = match[2].to_i result = roll_alchemia_and_pick(roll_dice_count, pick_dice_count) return make_roll_and_pick_text(result[:rolled_dices], pick_dice_count, result[:picked_dices]) end end
try_roll_uldice(command)
click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 83 def try_roll_uldice(command) match = /^(\d+)UL$/.match(command) return nil unless match roll_dice_count = match[1].to_i dice_list = @randomizer.roll_barabara(roll_dice_count, 6).sort dice_list_text = dice_list.join(",") result = dice_list.group_by(&:itself) .map { |k, v| "No.#{k}: #{v.size}個" } .join(", ") sequence = [ "(#{roll_dice_count}D6)", "[#{dice_list_text}]", result ] sequence.join(" > ") end