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

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

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不在向量中任何/所有现有对象周围的半径为20的圆中。

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

我想知道如何做到这一点?同样为了更清晰起见,它适用于游戏。我正在尝试在2D地图中生成多个建筑物,但我显然不希望它们重叠或彼此靠近。我将如何实现这一目标?

莫尔布德尼洛

我将其分解为较小的功能。
像这样:

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));
    }
}

可能有更有效的方法,但是由于您只生成一次地图,因此我现在不必担心效率。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

动态调用向量中所有对象的C ++类成员

来自分类Dev

C# 检查 Outlook 中所有帐户的 SmtpAddress

来自分类Dev

Obj-C-获取键中所有值的总和?

来自分类Dev

Obj-C-获取键中所有值的总和?

来自分类Dev

检查向量的所有元素在C ++中是否相等

来自分类Dev

C ++向量的所有组合

来自分类Dev

在C#中获取对类型中所有类型对象的引用

来自分类Dev

目标C-遍历NSArray,其中所有对象均继承自同一协议

来自分类Dev

C ++中所有内容的基类

来自分类Dev

C#递归检查所有值不为null

来自分类Dev

在C ++中所有带有字符串变量的静态类结构都没有对象

来自分类Dev

C#:如何从JS对象获取键的所有值?

来自分类Dev

在C#中记录对象的所有属性。如何记录内部对象的属性呢?

来自分类Dev

在C#中记录对象的所有属性。如何记录内部对象的属性呢?

来自分类Dev

列出C / C ++中所有可用的函数原型?

来自分类Dev

C#检查所有数据表值中的空值或空值

来自分类Dev

C#检查所有数据表值中的空值或空值

来自分类Dev

C ++ OPENGL根据列表中的所有其他对象检查多个对象的位置

来自分类Dev

如何使用Windows Portable Devices C ++ API获取MTP设备公开的文件夹中所有文件(对象)的列表?

来自分类Dev

如何获得向量中所有分量的最大值?

来自分类Dev

具有C ++中所有同步方法的类

来自分类Dev

使二维数组中所有元素的快速方法在C ++中变为某些非零值

来自分类Dev

实例化对象(C#.net)中的所有属性和子属性

来自分类Dev

实例化对象(C#.net)中的所有属性和子属性

来自分类Dev

C - 检查结构数组的所有值是否返回相同的值

来自分类Dev

C ++:如何在向量向量中打印所有元素

来自分类Dev

C ++:如何在向量向量中打印所有元素

来自分类Dev

循环遍历具有嵌套对象的JSON对象并检查布尔值c#

Related 相关文章

  1. 1

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

  2. 2

    动态调用向量中所有对象的C ++类成员

  3. 3

    C# 检查 Outlook 中所有帐户的 SmtpAddress

  4. 4

    Obj-C-获取键中所有值的总和?

  5. 5

    Obj-C-获取键中所有值的总和?

  6. 6

    检查向量的所有元素在C ++中是否相等

  7. 7

    C ++向量的所有组合

  8. 8

    在C#中获取对类型中所有类型对象的引用

  9. 9

    目标C-遍历NSArray,其中所有对象均继承自同一协议

  10. 10

    C ++中所有内容的基类

  11. 11

    C#递归检查所有值不为null

  12. 12

    在C ++中所有带有字符串变量的静态类结构都没有对象

  13. 13

    C#:如何从JS对象获取键的所有值?

  14. 14

    在C#中记录对象的所有属性。如何记录内部对象的属性呢?

  15. 15

    在C#中记录对象的所有属性。如何记录内部对象的属性呢?

  16. 16

    列出C / C ++中所有可用的函数原型?

  17. 17

    C#检查所有数据表值中的空值或空值

  18. 18

    C#检查所有数据表值中的空值或空值

  19. 19

    C ++ OPENGL根据列表中的所有其他对象检查多个对象的位置

  20. 20

    如何使用Windows Portable Devices C ++ API获取MTP设备公开的文件夹中所有文件(对象)的列表?

  21. 21

    如何获得向量中所有分量的最大值?

  22. 22

    具有C ++中所有同步方法的类

  23. 23

    使二维数组中所有元素的快速方法在C ++中变为某些非零值

  24. 24

    实例化对象(C#.net)中的所有属性和子属性

  25. 25

    实例化对象(C#.net)中的所有属性和子属性

  26. 26

    C - 检查结构数组的所有值是否返回相同的值

  27. 27

    C ++:如何在向量向量中打印所有元素

  28. 28

    C ++:如何在向量向量中打印所有元素

  29. 29

    循环遍历具有嵌套对象的JSON对象并检查布尔值c#

热门标签

归档