私は次の問題に遭遇しました。これは想像力を働かせても解決するのは難しいことではありませんが、最良/最もエレガントな解決策が何であるかを知りたいと思います。
のプロトタイプは次のようになります。
bool Team::isEveryoneDead(int teamOnTurn);
利用可能なチームは2つあり、現在順番になっているチームのインスタンスに応じて、チーム内のすべてのキャラクターがこの非常に特定の順序で死んでいるかどうかを確認したいと思います。
最初にターンしていないチーム内のすべてのキャラクターをループします。生きているキャラクターがいる場合は、ループを停止します(ステップ2に進みます)。生きている人がいない場合は、関数を 終了して戻ります。
ターンしていないチームに生きているキャラクターが少なくとも1人含まれていることがわかったので、現在ターンしているチームをループして同じことを確認します。誰かが生きているのを見つけたら、ループを止めて終了/戻ります。
この引数int teamOnTurn
により、現在順番になっているTeamのインスタンスを解決できます。ここでは、「生きている状態」を評価する順序が非常に重要です。
ここで、実行できるいくつかのアプローチがあります。たとえば、順序をハードコーディングし(可能な順序は2つしかないため)、順番を確認して、次のような特定の順序を持つブランチを実行することにより、順序を解決します。
bool Team::isEveryoneDead(int teamOnTurn) {
if (Team::Blue == teamOnTurn) {
checkThis();
checkThat();
} else {
checkThat();
checkThis();
}
}
ただし、このソリューションは、たとえば5では完全には機能しません。より多くのアイテムの特定の呼び出し順序の順列。最大限のエレガンスでこれを解決するには、どのような手法を導入する必要がありますか:) ?
よろしくお願いします、スカーレット。