raa0121 / GoBCDice

GoBCDice is BCDice reimplemented by Go.
BSD 3-Clause "New" or "Revised" License
9 stars 2 forks source link

上方無限ロール(URoll)を実装する #17

Closed ochaochaocha3 closed 4 years ago

ochaochaocha3 commented 5 years ago

ダイスをバラバラにロールして、その結果が上方無限境界値以上になると再度振り、その値をダイス目に加えることができるロール(ロールマスターやシャドウランなど)にも対応しました。これは上方無限が成立し続ける限り振り続けます。BのかわりにUを使うことで使用できます。境界値は"[境界値]"で指定するほかにマスターコマンドで自動設定もできます。条件式がない場合は、合計値が出るようにしました。条件式をつけると目標値にいくつ達したかも表示します。

例)

3u6[6]   1U100[96]+3   3u6+5u6[6]>=7   (5+6)u10[10]+5>=8

(マスターコマンドで境界値登録してある場合は 3u6>=6 と記述できます。)

マスターコマンドがどどんとふやBCDice-APIで使えるかは不明なので、まずは境界値を指定した場合のみを実装する。

抽象構文木の例

評価の対象とする型、結果の型

結果のメッセージの例

ochaochaocha3 commented 5 years ago

URollListの評価結果の内容はRRollListのそれと変わらない。違いは値のグループごとに合計をとるかどうかだけなので、URollExprの評価では、URollListの評価をRRollListの処理の流用で行い、(小計について合計と最大値を出せばよい。URollCompについても同様。

ochaochaocha3 commented 4 years ago

現在は個数振り足しロールとの重複部分が多いが、これを解消するにはRRollとURollを統一するのが手っ取り早いかもしれない。違いは中置表記だけなので、中置表記時に表示する演算子を "R""U" と変更できればよい。URollExprの評価器を作ったら、この統一を行いたい。

ochaochaocha3 commented 4 years ago

37 を同時に進め、そちらは完了。残りは成功数カウント。