Kotlin/JavaでBCDiceを動かす
BCDiceとは
日本で最も使われている、TRPG用ダイスロール処理システムです。どどんとふ、ココフォリア、ユドナリウム、TRPGスタジオなど様々なオンセツールで使われています。
https://bcdice.org/ からの引用
Kotlin/JavaからBCDiceを用いる方法
1. APIサーバーを使用した方法
BCDiceには公式からbcdice-apiというWebサーバーが公開されています。
自分でホストすることもできますし、有志によって維持/管理されているサーバーもあります。
Kotlin/JavaからもこれらのAPIサーバーにアクセスすることで、BCDiceを用いることができます。
2. bcdice-ktを用いる
今回の本題はこのbcdice-ktを用いる方法です。
これは私が学生時代にDiscordBot用に作成したもので、APIサーバーに依存せずにBCDiceを用いることができます。
bcdice-kt
Gradle・Maven
GradleとMavenなどのパッケージマネージャーを用いることで使用できます。
Gradle
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.simple-timer:bcdice-kt:VERSION'
}
Maven
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.simple-timer</groupId>
<artifactId>bcdice-kt</artifactId>
<version>VERSION</version>
</dependency>
実行時の下準備
bcdice-ktは内部にBCDice本体を内包していません。ですので、初回起動時はインターネット上からBCDiceをダウンロード/インストールする必要があります。すでにダウンロードされている場合、それ以降はインターネットに接続されている必要がありません。
インストールの確認後、setup()
で初期化処理を行います。
Kotlin
val bcdice = BCDice()
//動作に必要なファイルがインストールされているかを確認
if (!bcdice.wasInstalled()) {
//インストール
bcdice.install()
}
//ゲームシステム読み込みなどのセットアップを行う
bcdice.setup()
Java
BCDice bcdice = new BCDice();
//動作に必要なファイルがインストールされているかを確認
if(!bcdice.wasInstalled()){
//インストール
bcdice.install();
}
//ゲームシステム読み込みなどのセットアップを行う
bcdice.setup();
ダイスロール
ダイスロールを行うには、ゲームシステムを指定する必要があります。
ゲームシステムの一覧は、公式の対応ゲームシステム一覧をご覧ください。
Kotlin
/*
実行時の下準備をあらかじめ行う
*/
//ゲームシステムを取得
val gameSystem = bcdice.getGameSystem("Cthulhu7th")
val result = gameSystem.roll("CC+1")
println(result.text) //結果のテキスト
Java
/*
実行時の下準備をあらかじめ行う
*/
//ゲームシステムを取得
GameSystem gameSystem = bcdice.getGameSystem("Cthulhu7th");
GameSystem.DiceResult result = gameSystem.roll("CC+1");
System.out.println(result.getText()); //結果のテキスト
オリジナル表
オリジナル表にも対応しています。
Kotlin
/*
実行時の下準備をあらかじめ行う
*/
//テーブルのデータをテキストで作成
val text = """
飲み物表
1D6
1:水
2:緑茶
3:麦茶
4:コーラ
5:オレンジジュース
6:選ばれし者の知的飲料
""".trimIndent()
val result = bcdice.rollOriginalTable(text)
println(result.text) //結果のテキスト
/*
実行時の下準備をあらかじめ行う
*/
//テーブルのデータをTableDataとして作成
val tableData = OriginalTable.TableData(
"飲み物表",
"1D6",
mapOf(
1 to "水",
2 to "緑茶",
3 to "麦茶",
4 to "コーラ",
5 to "オレンジジュース",
6 to "選ばれし者の知的飲料"
)
)
val result = bcdice.rollOriginalTable(tableData)
println(result.text) //結果のテキスト
Java
/*
実行時の下準備をあらかじめ行う
*/
//テーブルのデータをテキストで作成
String text = """
飲み物表
1D6
1:水
2:緑茶
3:麦茶
4:コーラ
5:オレンジジュース
6:選ばれし者の知的飲料
""";
Result result = bcdice.rollOriginalTable(text);
System.out.println(result.getText()); //結果のテキスト
/*
実行時の下準備をあらかじめ行う
*/
//テーブルのデータをTableDataとして作成
OriginalTable.TableData tableData = new OriginalTable.TableData(
"飲み物表",
"1D6",
Map.of(
1, "水",
2, "緑茶",
3, "麦茶",
4, "コーラ",
5, "オレンジジュース",
6, "選ばれし者の知的飲料"
)
);
//テーブルを作成
Result result = bcdice.rollOriginalTable(tableData);
System.out.println(result.getText()); //結果のテキスト