比较两个数组索引的坐标

Comparing coordinates of two array indexes

本文关键字:数组 索引 坐标 两个 比较      更新时间:2023-10-16

我正在创建一个基本的C++游戏,其中涉及用户试图逃离僵尸。

僵尸存储在一个名为 zeds 的数组中。整个游戏中都布置了陷阱,这些陷阱应该将僵尸重置到它们的初始位置,存储在一个名为 holes 的数组中。

我正在尝试弄清楚如何将僵尸的坐标与洞的坐标进行比较,如果它们匹配,则重置僵尸。

我不知道如何开始比较zeds的坐标和洞的坐标。我试过写这个,但它不起作用。

for (int i = 0; i < MAXZEDS; ++i)
{
    for (int j = 0; i < MAXHOLES; ++j)
    {
        if (zeds[i].x == holes[j].x && zeds[i].y == holes[j].y)
        {
                //reset cords code here
        }
    }
}

感谢任何帮助,

谢谢大家!

你的代码中有几个错别字,我应该是 thirs 行中的 j。 无论如何,您可以通过使用 OOP 实践来提高代码的可读性。假设你有一个包含 x 和 y 的 Point 类(我想你有)

srtuct Point{
   int x,y;
};

首先让我们重载 == 运算符以 comapare 点

srtuct Point{
   int x,y;
   bool operator == (const Point& rhs){
     return x==rhs.x && y == rhs.y;
   }
};

现在让我们使用范围语义而不是索引和另一个 C++11 功能

for (auto& zombieCoord : zeds){
   for (auto& holeCoord : holes){
     if (zombieCoord  == holeCoord ){
        //do somthing
     }
   }
}

是不是更小、更干净、更清晰?

您可能想要的另一件事:
我继续像你一样使用 x 和 y 作为公共成员,但我建议将它们设为私有并制作 getter(如果需要)二传手。
您可能还想在某些约定中调用它们,例如 m_X 和 m_Y,这将它们表示为 m余烬。
此外,其他开发人员可能不明白zeds的含义。为什么不给它一个明确的名字,比如"正在进行的僵尸"?

首先,你的循环是错误的。第二个循环必须检查 j

第二个for中有一个错误,你在哪里检查i而不是j

for (int i = 0; i < MAXZEDS; ++i)
{
    for (int j = 0; j < MAXHOLES; ++j)
    {
        if (zeds[i].x == holes[j].x && zeds[i].y == holes[j].y)
        {
                //reset cords code here
        }
    }
}

我不知道你的僵尸是如何移动的,但僵尸的坐标可能很难与洞的坐标完全匹配。我的意思是,僵尸不太可能掉进洞里。也许你应该试着考虑它们的大小,比如洞和僵尸有正方形的形状,当僵尸的正方形接触它掉进去的洞时。看看如何检测正方形之间的碰撞

此代码执行MAXZEDS * MAXHOLES迭代,这可能很多。您可能还希望实现更有效的冲突检测方法。看看Quadtrees,我敢打赌有一个很好的C++实现。它们简单且非常高效。