Closed ochaochaocha3 closed 4 years ago
URollListの評価結果の内容はRRollListのそれと変わらない。違いは値のグループごとに合計をとるかどうかだけなので、URollExprの評価では、URollListの評価をRRollListの処理の流用で行い、(小計について合計と最大値を出せばよい。URollCompについても同様。
現在は個数振り足しロールとの重複部分が多いが、これを解消するにはRRollとURollを統一するのが手っ取り早いかもしれない。違いは中置表記だけなので、中置表記時に表示する演算子を "R"
、"U"
と変更できればよい。URollExprの評価器を作ったら、この統一を行いたい。
マスターコマンドがどどんとふやBCDice-APIで使えるかは不明なので、まずは境界値を指定した場合のみを実装する。
抽象構文木の例
3u6[6]
(URollExpr (URollList 6 (URoll 3 6)))
1U100[96]+3
(URollExpr (+ (URollList 96 (URoll 1 100)) 3))
3u6+5u6[6]>=7
(URollComp (>= (URollExpr (URollList 6 (URoll 3 6) (URoll 5 6))) 7))
(5+6)u10[10]+5>=8
(URollComp (>= (URollExpr (+ (URollList 10 (URoll (+ 5 6) 10)) 5)) 8))
評価の対象とする型、結果の型
結果のメッセージの例
3u6[6]
DiceBot : (3U6[6]) > 11[6,5],7[6,1],7[6,1] > 11/25 (最大/合計)
1U100[96]+3
DiceBot : (1U100[96]+3) > 155[98,57]+3 > 158/158(最大/合計)
3u6+5u6[6]>=7
(3U6+5U6[6]>=7) > 3,5,3,10[6,4],1,15[6,6,3],5,1 > 成功数2
(5+6)u10[10]+5>=8
DiceBot : (11U10[10]+5>=8) > 3,2,7,4,7,5,4,4,7,16[10,6],1+5 > 成功数9