免責事項 - google/stackoverflow を介してこれに対する回答を見つけようとしましたが、問題を定義する方法がわかりません (適切な用語がわかりません)。
次のような多くの小さな AI スニペットがあります。._ai
敵のタイプごとに (以下のような) スニペットがありnext()
、メインのゲーム ループで有限ステート マシンによって呼び出される関数が 1 つあります (fyi:next
関数は更新の反復ごとに呼び出されるわけではなく、敵が列)。
質問:どのようにすべてのケースをテストし (一部の敵の AI スニペットはより複雑で、1000 ターンに 1 回発生するケースがあることを考慮して)、コードが有効であることを確認するにはどうすればよいですか?
以下の例では、count++ の下に行を追加した場合blabla/1
、Javascript インタープリターは特定のパスに到達するまでエラーをキャッチしないため、エラーは長時間トリミングされない可能性があります。blabla/1
コンパイルされた言語では、コンパイル時にキャッチされるようなガベージを追加します。
// AI Snippet
this._ai = (function(commands){
var count = 0;
return {
next: function(onDone, goodies, baddies) {
// If the internal counter reaches
// 2, launch a super attack and
// reset the count
if(count >= 2) {
commands.super(onDone);
count = 0;
}
else {
// If not performing the super attack
// there is a 50% chance of calling
// the `attack` command
if(chance(50)) {
var target = goodies[0];
commands.attack(onDone, target);
}
// Or a 50% chance of calling the
// `charge` command
else {
commands.charge(onDone);
count++;
}
}
}
};
})(this._commands);
乱数発生器を調整して、値のテーブルを返し、各数値に対して何千回も0-n
実行することができます。next
すべてのパスにエラーがないことを具体的に教えてくれるとは思えません。