数组问题(if (zeds[i].x == zeds[i].x))

  • 本文关键字:zeds 问题 if 数组 c++
  • 更新时间 :
  • 英文 :


我在C++中创建了一个简单的游戏,玩家必须避免被僵尸咬伤才能生存。

僵尸作为Z字符存储在名为 zeds 的数组中。

我正在尝试编写一个函数,可以检查是否有僵尸发生碰撞,并采取相应的行动。

我已经写了这个if语句:

for (int i; i < MAXZEDS; ++i);
    if (zeds[i].x == zeds[i].x && zeds[i].y == zeds[i].y) 
    {
            --zlives;
            updateLives();
    }
显然它不起作用,我

只是想知道我是否可以以某种方式重写它,以便在僵尸与另一个僵尸碰撞而不是自身碰撞时仅减少zlives

对标题表示歉意,我找不到更好的方法来总结我的问题。提前感谢任何帮助。

你需要一个双循环,这样你才能比较两个不同的僵尸。
像这样的东西。

for (int i = 0; i < MAXZEDS - 1; ++i)
{
    // Looping from i + 1 ensures that we only test each pair once.
    for (int j = i + 1; j < MAXZEDS; ++j)
    {
        if (zeds[i].x == zeds[j].x && zeds[i].y == zeds[j].y) 
        {
            --zlives;
            updateLives();
        }
    }
}

最简单的方法是 2 个循环。

for (int i = 0; i < MAXZEDS; ++i) {
    for (int j = i+1; j < MAXZEDS; ++j) {
        if (zeds[i].x == zeds[j].x && zeds[i].y == zeds[j].y) 
        {
            --zlives;
            updateLives();
        }
    }
}

如果 zeds 中的对象顺序不重要,并且operator<()zeds 的元素类型正确定义,则可以对zeds进行排序并检查连续元素以降低复杂性。

尝试使用嵌套for循环:

for (int i = 0; i < MAXZEDS; i++)
{
    for (int j = 0; j < MAXZEDS; j++)
    {
        if (i == j) continue; // Don't compare the current zed with itself
        else if (zeds[i].x == zeds[j].x && zeds[i].y == zeds[j].y)
        {
            --zlives;
            updateLives();
        }
    }
}

这将循环访问zeds两次,并将数组中的每个项与其他项进行比较。我相信有更有效的方法,但这是最简单的。

最新更新