比较两个数组索引的坐标

时间:2015-04-29 09:22:40

标签: c++ arrays

我正在创建一个基本的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
        }
    }
}

感谢任何帮助,

谢谢你们!

3 个答案:

答案 0 :(得分:1)

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

srtuct Point{
   int x,y;
};

首先让==运算符重载,以便comapare points

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作为公共成员,但我建议将它们设为私有并制作吸气剂(如果需要的话)制定者。
您可能还想在某些约定中调用它们,例如m_X和m_Y,它们将它们表示为 m 余烬。
此外,另一位开发人员可能不了解zeds可能意味着什么。为什么不给它一个明确的名字,比如“正在进行的僵尸”?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

第二个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
        }
    }
}

我不知道你的僵尸是如何移动的,但是僵尸的坐标可能很难与一个洞的坐标完全匹配。我的意思是,僵尸可能不太可能掉进洞里。也许你应该尝试考虑它们的大小,比如洞和僵尸有正方形的形状,当僵尸的正方形接触它落入的洞。看看how to detect collisions between squares

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