我正在尝试从玩家的位置找到最接近的Healthpacks或敌人。我写了这样的话:
for(auto &hp : model->getAllHealthPacks()){
if(!hp->getUsed()){
int x = hp->getXPos();
int y = hp->getYPos();
int q = (x*x)+(y*y);
if(q < smallest){
smallest = z;
hpfound = hp;
foundAHp++;
}
}
}
现在我想知道,这其实不合适。是否有更好和专业的方法来改进我的代码? (拉姆达)?
答案 0 :(得分:1)
一般来说代码还不错,但还有一些改进空间。首先,您可以使变量hp保持不变,因为您没有修改其内容。
您还可以创建一个类来将坐标存储在单个对象中,如
class Coordinate{
std::pair<int,int> coords;
...
};
最终代码可能如下所示:
for(const auto &hp : model->getAllHealthPacks()){
if(!hp->getUsed()){
Coordinate coord(hp->getCoord());
int q = coord.getX()*coord.getX()+coord.getY()*coord.getY();
if(q < smallest){
smallest = z;
hpfound = hp;
foundAHp++;
}
}
}
您还应该将q重命名为更清晰的内容以供将来参考。