gpt4 book ai didi

C++:检查 vector 中所有对象属性的值

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:25 26 4
gpt4 key购买 nike

我认为最好用一些伪代码来解释:

std::vector<Yes> objs;
//The Yes Class constructor: Yes(x,y)
//Let's imagine I instantiated this vector with one object somewhere appropriately

void inSomeFunction()
{
for(int i = 0; i < 20; ++i)
{
int randX = rand() % mapWidth;
int randY = rand() % mapHeight;

for(int j = 0; j < objs.size(); ++j)
{
if(randX > x + threshold, for all objects in my vector && randY > y + threshold, for all objects in my vector)
{
objs.push_back(Yes(randX,randY));
}
}
}
}

所以我有一个窗口,其尺寸为 mapWidth 和 mapHeight,我基本上只是想制作 20 个在 xy 平面上不重叠的对象。

我还想确保 randX 和 randY 不重叠,但也要与所有其他现有对象保持一定的阈值距离。因此,假设我的阈值 = 20,那么我想确保 randX 和 randY 不包含在 vector 中任何/所有现有对象周围的半径为 20 的圆中。

为了清楚起见,示例:第一个 Yes 对象位于 (x,y) = (10,20) 并且我的阈值 = 20,我想创建第二个对象,将 randX 和 randY 作为参数,并将其插入我的 vector 中;但是,我想确保点 (randX,randY) 不在半径为 20 的圆中并且以 (10,20) 为中心,这是我的第一个对象的坐标。该程序可以生成另一个随机数 (x,y) 或仅以适合我想要的条件的方式生成 randX 和 randY,但我需要它在我创建更多对象时继续检查 vector 中的所有对象。

我想知道如何做到这一点?同样为了更清楚起见,它是用于游戏的。我正在尝试在 2D map 中生成多个建筑物,但我显然不希望它们重叠或彼此靠近。我将如何着手完成这项工作?

最佳答案

我会把它分解成更小的函数。
像这样:

bool overlaps(const Yes& thing, int x, int y)
{
// See if (x, y) overlaps 'thing' in whichever way is appropriate.
}

bool overlaps_any(const std::vector<Yes>& things, int x, int y)
{
for (const Yes& thing : things)
{
if (overlaps(thing, x, y))
{
return true;
}
}
return false;
}

void inSomeFunction(std::vector<Yes>& objs)
{
for(int i = 0; i < 20; ++i)
{
int x = 0;
int y = 0;
do {
x = rand() % mapWidth;
y = rand() % mapHeight;
} while (overlaps_any(objs, x, y));
objs.push_back(Yes(x,y));
}
}

可能有更高效的方法,但由于您只生成一次 map ,所以目前我不会担心效率问题。

关于C++:检查 vector 中所有对象属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27164203/

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