Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ステラナイツの表追加 #107

Merged
merged 3 commits into from
Feb 4, 2020
Merged

ステラナイツの表追加 #107

merged 3 commits into from
Feb 4, 2020

Conversation

ysakasin
Copy link
Member

追加内容

基本

GAT:所属組織決定 (Gakuen Table)
HOT:希望表 (Hope Table)
DET:絶望表 (Despair Table)
WIT:願い事表 (Wish Table)
YST:あなたの物語表 (Your Story Table)
YSTA:あなたの物語表:異世界 (YST Another World)
PET:性格表 (Personality Table)
性格表を2回振り、性格を決定する

霧と桜のマルジナリア

YSTM:あなたの物語表:マルジナリア世界 (YST Marginalia)
STM:シチュエーション表:マルジナリア世界 (ST Marginalia)
YSTL:あなたの物語表:手紙世界 (YST Letter)
YSTR:あなたの物語表:リコレクト・ドール (YST Recollect-doll)
STBR:シチュエーション表B:場所(リコレクト・ドール) (ST B Recollect-doll)
STCR:シチュエーション表C:リコレクト (ST C Recollect)
STBS:シチュエーション表B:シトラセッティング (ST B Sut Tu Real)
STE:シチュエーション表:エクリプス専用 (ST Eclipse)

紫弾のオルトリヴート

FT:フラグメント表 (Fragment Table)
フラグメント表を5回振る
FTx:フラグメント表をx回振る
YSTB:あなたの物語表:ブリンガー (YST Bringer)
YSTF:あなたの物語表:フォージ (YST Forge)
STAL:シチュエーション表:オルトリヴート (ST Alt-Levoot)

基本
霧と桜のマルジナリア
紫弾のオルトリヴート
Copy link
Member

@ochaochaocha3 ochaochaocha3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

膨大な量の表追加、お疲れさまです。また、Tableクラスは他のダイスボットの表でも使えそうで便利だと思いました。DiceBotクラスを小さくできる可能性があるので、今後他のダイスボットにも導入していきたいですね。

Tableクラスの追加分について、コメントします。Tableクラスでは、コンストラクタで type を見て呼び出し方の判断および @type への記録を行い、roll メソッドで @type に応じて適切な処理を呼び出しています。これは、要するに roll メソッドについてのダックタイピングを可能にしたいということではないでしょうか? その場合、単純に roll メソッドを持つ別々のクラスを作る方が分かりやすいと考えました。例えば、以下のように3つのクラスを作るのはいかがでしょうか?

# 通常のダイスロールで項目を選ぶ1次元の表
# クラス名はRoll20のRollableTableに倣いました
class RollableTable
  # 表を初期化する
  # @param [String] name 表の名前
  # @param [String] roll_type 項目を選ぶときのダイスロールの方法("2d6" など)
  # @param [Array<String>] items 表の項目の配列
  def initialize(name, roll_type, items)
    # ...
  end

  # ダイスロールを行い、項目を選ぶ
  # @param [BCDice] bcdice BCDice
  # @return [String] 選ばれた項目
  def roll(bcdice)
    # ...
  end
end

# D66ダイスロールで項目を選ぶ2次元の表
class D66GridTable
  # 表を初期化する
  # @param [String] name 表の名前
  # @param [Array<Array<String>>] items 2次元の表項目
  def initialize(name, items)
    # ...
  end

  # ダイスロールを行い、項目を選ぶ
  # @param [BCDice] bcdice BCDice
  # @return [String] 選ばれた項目
  def roll(bcdice)
    # ...
  end
end

# D66ダイスロールで項目を選ぶ1次元の表
# 疎な表になるため、Hashで項目を用意する
class D66FlatTable
  # 表を初期化する
  # @param [String] name 表の名前
  # @param [Hash<Integer, String>] items 表の項目のHash
  def initialize(name, items)
    # ...
  end

  # ダイスロールを行い、項目を選ぶ
  # @param [BCDice] bcdice BCDice
  # @return [String] 選ばれた項目
  def roll(bcdice)
    # ...
  end
end

上記のようにクラスを作ると、ステラナイツの場合、以下のように表を定義することになります。

TABLES = {
  "GAT" => RollableTable.new(
    "所属組織決定",
    "1D6",
    GAKUEN_TABLE
  ),
  "HOT" => D66GridTable.new(
    "希望表",
    HOPE_TABLE
  ),
  # ...
}

@ysakasin
Copy link
Member Author

指摘いただいたテーブルの種類でクラスを分ける方式が良さそうなので、別PRでクラスを作ってからこのPRに適用してみます。

Copy link
Member

@ochaochaocha3 ochaochaocha3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題ないと思います!

@ysakasin ysakasin merged commit 2c65f3e into master Feb 4, 2020
@ysakasin ysakasin deleted the stella_knights branch February 4, 2020 09:30
@ochaochaocha3 ochaochaocha3 added enhance dicebot ダイスボットへの機能追加 refactoring 内部構造の改良 labels Feb 22, 2020
ysakasin added a commit that referenced this pull request Aug 30, 2020
ステラナイツの表追加
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhance dicebot ダイスボットへの機能追加 refactoring 内部構造の改良
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants