Closed ochaochaocha3 closed 5 years ago
プロジェクト「加算ロールと計算の実装」が完了しました。特徴は以下のとおりです。
プログラミング言語の処理系と同様に、入力されたBCDiceコマンドを抽象構文木に変換して処理します。プログラムの規模は大きいですが、演算子の順番なども考慮した計算を完璧に行うことができ、今後の実装も機能ごとに分けながら行うことができます。
各段階でテストを行い、多くの入力に対して各段階が期待通りの結果を返すことを確認しています。
ゲームシステムごとにパッケージを作り、pkg/dicebot/gamesystem 以下にそれらのパッケージを配置する予定です。現在のBCDiceと同様にpkg/dicebot/listでゲーム識別子に対応するコンストラクタを登録することで、BCDice本体(pkg/bcdice)からゲーム識別子を指定してダイスボットを作ることができます。
pkg/dicebot/gamesystem/basic/testdata/DiceBot.txtのような、現在のBCDiceのテストデータをそのまま読み込むことができるため、各ゲームシステムのダイスボットが正しく移植されているかを簡単に確認することができます。テストデータを現在のBCDiceからコピーすれば、ダイスボットごとに最小限のテストコードを書くだけ(例:pkg/dicebot/gamesystem/basic/basic_test.go)で多くのテストを実行できます。
RubyのirbのようなREPLであるGoBCDiceREPL(cmd/GoBCDiceREPL)を作りました。readlineにも対応しており、ダイスボットの動作確認が行いやすくなっています。
mattnさんのgo-colorableを導入すると、WindowsでもREPLが正常に表示されるようになりました。
プロジェクト「加算ロールと計算の実装」が完了しました。特徴は以下のとおりです。
体系的なBCDiceコマンドの処理
プログラミング言語の処理系と同様に、入力されたBCDiceコマンドを抽象構文木に変換して処理します。プログラムの規模は大きいですが、演算子の順番なども考慮した計算を完璧に行うことができ、今後の実装も機能ごとに分けながら行うことができます。
処理手順
テスト
各段階でテストを行い、多くの入力に対して各段階が期待通りの結果を返すことを確認しています。
ゲームシステムごとのパッケージ分け、読み込み
ゲームシステムごとにパッケージを作り、pkg/dicebot/gamesystem 以下にそれらのパッケージを配置する予定です。現在のBCDiceと同様にpkg/dicebot/listでゲーム識別子に対応するコンストラクタを登録することで、BCDice本体(pkg/bcdice)からゲーム識別子を指定してダイスボットを作ることができます。
既存のテストデータをそのまま読み込み可能
pkg/dicebot/gamesystem/basic/testdata/DiceBot.txtのような、現在のBCDiceのテストデータをそのまま読み込むことができるため、各ゲームシステムのダイスボットが正しく移植されているかを簡単に確認することができます。テストデータを現在のBCDiceからコピーすれば、ダイスボットごとに最小限のテストコードを書くだけ(例:pkg/dicebot/gamesystem/basic/basic_test.go)で多くのテストを実行できます。
高機能なREPL
RubyのirbのようなREPLであるGoBCDiceREPL(cmd/GoBCDiceREPL)を作りました。readlineにも対応しており、ダイスボットの動作確認が行いやすくなっています。