gpt4 book ai didi

c++ - 建议的顺序相关操作的流控制结构

转载 作者:行者123 更新时间:2023-11-28 08:04:45 26 4
gpt4 key购买 nike

我遇到了以下问题,通过任何想象都不难解决,但我想知道最好/最优雅的解决方案是什么。

我有以下方法,其原型(prototype)如下所示:

bool Team::isEveryoneDead(int teamOnTurn);

两个团队可用,根据当前轮到哪个团队的实例,我想检查团队中的每个角色是否都以这个非常特殊的顺序:

  1. 遍历团队中首先的所有角色。如果有任何活着的角色,停止循环(并转到第 2 步)。如果没有没有活着,终止函数并返回。

  2. 现在我知道轮到的团队至少包含一个活着的角色,循环遍历当前轮到的团队并检查相同的东西。如果我发现某人还活着,停止循环并终止/返回。

参数 int teamOnTurn 允许我解析当前轮到的 Team 实例。 我评估“存活条件”的顺序在这里非常重要。

现在,有几种方法可以采用,例如对顺序进行硬编码(因为只有 2 个可能的顺序)并通过检查谁在轮到来解析顺序,然后执行已经具有特定顺序的分支,如下所示:

bool Team::isEveryoneDead(int teamOnTurn) {
if (Team::Blue == teamOnTurn) {
checkThis();
checkThat();
} else {
checkThat();
checkThis();
}
}

然而,这个解决方案对于 5 人来说不太适用!更多项目的特定调用排序的排列。 应该采用什么技术来最优雅地解决这个问题:)?

提前致谢,Scarlet。

最佳答案

尝试创建另一个实际执行检查的内部方法,并让 isEveryoneDead() 方法协调检查团队的顺序,可能是这样的:

bool Team::isEveryoneDead(int teamOnTurn) {
bool isFound = isEveryoneDeadInternal( /* params for team not on turn */ );
if(isFound) {
isFound = isEveryoneDeadInternal( /* params for team on turn */ );
}
return isFound;
}

// This method know nothing about on turn or off turn
bool Team:isEveryoneDeadInternal() {
// Loop through all characters in the team, checking if any are alive
// When the first live character is found, return true
// else return false
}

这是一个叫做 DRY 的概念:不要重复自己

关于c++ - 建议的顺序相关操作的流控制结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com