我正在创建一个基本的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
}
}
}
感谢任何帮助,
谢谢你们!
答案 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 ++实现。它们简单而且效率很高。